一些内置perf
事件映射到非核心事件。例如,LLC-loads
和LLC-load-misses
被映射到OFFCORE_RESPONSE.
事件。正如这里所讨论的,这可以很容易地确定。但是,这些核心外事件需要将某些值写入某些 MSR 寄存器以实际指定特定事件。perf
似乎正在使用一个名为snb_hw_cache_extra_regs的数组来指定要写入哪些 MSR 寄存器的值。我想知道这个数组是如何使用的。基本上我想知道如何perf
通过查看源代码来确定事件映射到的特定非核心事件。
问问题
732 次
1 回答
4
此处为 SnB存储了非核心 PM MSR 的阵列,其他架构也很接近。
宏INTEL_UEVENT_EXTRA_REG
在这里,它只是将 设置msr
为第二个参数,config_mask
设置0x000000FFULL
和 设置valid_mask
为第三个参数(第一个是用于对相关普通 PMR 进行编程的事件)。
的值snb_hw_cache_extra_regs
就是将要写入所选 PM MSR 1中的值。该数组在此处
查找并在此处用于
选择第一个 PM MSR 匹配,其中arg 来自数组。config
hw_cache_event_ids
所以它基本上是一个循环测试几个位掩码,直到找到兼容的 PM MSR,我认为你可以跳过它并查看存储在snb_hw_cache_extra_regs
数组中的值。
1
由于定义用于生成值的宏snb_hw_cache_extra_regs
从未在源代码中重用,并且值直接映射到英特尔手册中记录的 MSR 布局,因此我没有费心验证此声明。
于 2019-01-17T13:11:48.247 回答