perf 如何使用 offcore 事件?
How does perf use the offcore events?
一些内置 perf
事件映射到非核心事件。例如,LLC-loads
和 LLC-load-misses
映射到 OFFCORE_RESPONSE.
事件。这可以很容易地确定,如 . However, these offcore events require writing certain values to certain MSR registers to actually specify a particular event. perf
seems to be using an array called something like snb_hw_cache_extra_regs 中所讨论的,以指定要写入哪些 MSR 寄存器的值。我想知道这个数组是如何使用的。基本上我想知道如何通过查看源代码来确定 perf
事件映射到的特定 offcore 事件。
为 SnB 存储了 offcore PM MSR 数组 here,其他架构接近。
宏 INTEL_UEVENT_EXTRA_REG
是 here,它只是将 msr
设置为第二个参数,将 config_mask
设置为 0x000000FFULL
,将 valid_mask
设置为第三个参数参数(第一个是对关联的普通 PMR 进行编程的事件)。
snb_hw_cache_extra_regs
的值正是将要写入所选 PM MSR 的值1.
该数组被查找 here 并使用
here to select the first PM MSR matching, where the config
arg comes from the array hw_cache_event_ids
.
所以它基本上是一个循环测试几个位掩码,直到找到兼容的 PM MSR,我认为您可以跳过它并查看存储在 snb_hw_cache_extra_regs
数组中的值。
1
由于定义为 snb_hw_cache_extra_regs
中的值的宏从未在源代码中重复使用,并且这些值直接映射到英特尔手册中记录的 MSR 布局,因此我没有费心验证此声明。
一些内置 perf
事件映射到非核心事件。例如,LLC-loads
和 LLC-load-misses
映射到 OFFCORE_RESPONSE.
事件。这可以很容易地确定,如 perf
seems to be using an array called something like snb_hw_cache_extra_regs 中所讨论的,以指定要写入哪些 MSR 寄存器的值。我想知道这个数组是如何使用的。基本上我想知道如何通过查看源代码来确定 perf
事件映射到的特定 offcore 事件。
为 SnB 存储了 offcore PM MSR 数组 here,其他架构接近。
宏 INTEL_UEVENT_EXTRA_REG
是 here,它只是将 msr
设置为第二个参数,将 config_mask
设置为 0x000000FFULL
,将 valid_mask
设置为第三个参数参数(第一个是对关联的普通 PMR 进行编程的事件)。
snb_hw_cache_extra_regs
的值正是将要写入所选 PM MSR 的值1.
该数组被查找 here 并使用
here to select the first PM MSR matching, where the config
arg comes from the array hw_cache_event_ids
.
所以它基本上是一个循环测试几个位掩码,直到找到兼容的 PM MSR,我认为您可以跳过它并查看存储在 snb_hw_cache_extra_regs
数组中的值。
1
由于定义为 snb_hw_cache_extra_regs
中的值的宏从未在源代码中重复使用,并且这些值直接映射到英特尔手册中记录的 MSR 布局,因此我没有费心验证此声明。