为什么在我的英特尔Skylake服务器中,perf对精确事件不起作用?

问题描述 投票:0回答:1

我想测量工作负载中远程和本地内存访问的百分比。我面临着一些问题,因为我觉得我的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    

请帮我解决这个问题

server intel performancecounter perf
1个回答
1
投票

你无法获得 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
© www.soinside.com 2019 - 2024. All rights reserved.