为什么 perf 不适用于我的 Intel Skylake 服务器中的精确事件?
Why is perf not working for precise events in my Intel Skylake Server?
我想测量工作负载中远程和本地内存访问的百分比。我遇到了一些问题,因为我觉得我的 Skylake 服务器上的事件 mem_load_l3_miss_retired.remote_dram 和 mem_load_l3_miss_retired.local_dram 没有得到正确的数字。
所以我想利用 Precise 事件。但令我惊讶的是,我得到的是机器不支持的事件。尽管手册中将计数器称为 PEBS 计数器。
我的输出如下:
perf stat -e mem_load_l3_miss_retired.remote_dram:p sleep 2
Performance counter stats for 'sleep 2':
<not supported> mem_load_l3_miss_retired.remote_dram:p
请帮助我找到解决方案。
您无法通过 perf stat
获得 Precise
事件编号。
perf stat
运行s 在非采样模式下,其中 perf
维护所有事件发生的 运行ning 计数。在计数模式下记录Precise events
没有意义。 Precise events
,正如Peter所提到的,帮助您正确缩小指令范围(实际上是+1指令,来自触发PEBS辅助的指令),样本中的记录归因于该指令。
此外,已知 PEBS 中断处理程序会导致与计数器溢出 NMI 发生冲突,当 perf stat
为 运行 时 运行s。为了更深入地理解,你应该看看 this 讨论。
由于以上原因,在非采样模式下记录precise
事件已被禁用,可见here.
/* There's no sense in having PEBS for non sampling events: */
if (!is_sampling_event(event))
return -EINVAL;
您应该使用 perf record
来记录 precise
事件,因为事件 mem_load_l3_miss_retired.remote_dram
似乎支持 PEBS already.
perf record -e mem_load_l3_miss_retired.remote_dram:p sleep 2
我想测量工作负载中远程和本地内存访问的百分比。我遇到了一些问题,因为我觉得我的 Skylake 服务器上的事件 mem_load_l3_miss_retired.remote_dram 和 mem_load_l3_miss_retired.local_dram 没有得到正确的数字。 所以我想利用 Precise 事件。但令我惊讶的是,我得到的是机器不支持的事件。尽管手册中将计数器称为 PEBS 计数器。
我的输出如下:
perf stat -e mem_load_l3_miss_retired.remote_dram:p sleep 2
Performance counter stats for 'sleep 2':
<not supported> mem_load_l3_miss_retired.remote_dram:p
请帮助我找到解决方案。
您无法通过 perf stat
获得 Precise
事件编号。
perf stat
运行s 在非采样模式下,其中 perf
维护所有事件发生的 运行ning 计数。在计数模式下记录Precise events
没有意义。 Precise events
,正如Peter所提到的,帮助您正确缩小指令范围(实际上是+1指令,来自触发PEBS辅助的指令),样本中的记录归因于该指令。
此外,已知 PEBS 中断处理程序会导致与计数器溢出 NMI 发生冲突,当 perf stat
为 运行 时 运行s。为了更深入地理解,你应该看看 this 讨论。
由于以上原因,在非采样模式下记录precise
事件已被禁用,可见here.
/* There's no sense in having PEBS for non sampling events: */
if (!is_sampling_event(event))
return -EINVAL;
您应该使用 perf record
来记录 precise
事件,因为事件 mem_load_l3_miss_retired.remote_dram
似乎支持 PEBS already.
perf record -e mem_load_l3_miss_retired.remote_dram:p sleep 2