我想测量工作负载中远程和本地内存访问的百分比。我面临着一些问题,因为我觉得我的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
请帮我解决这个问题
你无法获得 Precise
事件编号与 perf stat
.
perf stat
在非采样模式下运行,其中: 。perf
对所有事件的发生进行统计。记录这些事件没有意义。Precise events
在计数模式下。Precise events
正如Peter所提到的,可以帮助你正确地缩小指令(实际上是+1指令,来自触发PEBS辅助的指令)的范围,样本中的记录归于该指令。
另外,已知PEBS中断处理程序会与计数器溢出NMI产生冲突,当运行 perf stat
是运行的。为了更多的了解,你应该看看 这个 的讨论。
基于上述原因,记录 precise
事件在非取样模式下已被禁用,可以看出 此处.
/* 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 已经.
perf record -e mem_load_l3_miss_retired.remote_dram:p sleep 2