3

一些内置perf事件映射到非核心事件。例如,LLC-loadsLLC-load-misses被映射到OFFCORE_RESPONSE.事件。正如这里所讨论的,这可以很容易地确定。但是,这些核心外事件需要将某些值写入某些 MSR 寄存器以实际指定特定事件。perf似乎正在使用一个名为snb_hw_cache_extra_regs的数组来指定要写入哪些 MSR 寄存器的值。我想知道这个数组是如何使用的。基本上我想知道如何perf通过查看源代码来确定事件映射到的特定非核心事件。

4

1 回答 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 来自数组。confighw_cache_event_ids

所以它基本上是一个循环测试几个位掩码,直到找到兼容的 PM MSR,我认为你可以跳过它并查看存储在snb_hw_cache_extra_regs数组中的值。


1 由于定义用于生成值的宏snb_hw_cache_extra_regs从未在源代码中重用,并且值直接映射到英特尔手册中记录的 MSR 布局,因此我没有费心验证此声明。

于 2019-01-17T13:11:48.247 回答