Server 为什么perf不适用于我的Intel Skylake服务器中的精确事件?

Server 为什么perf不适用于我的Intel Skylake服务器中的精确事件?,server,intel,performancecounter,perf,Server,Intel,Performancecounter,Perf,我想测量工作负载中远程和本地内存访问的百分比。我面临一些问题,因为我觉得我在Skylake服务器上没有获得mem_load_l3_miss_retired.remote_dram和mem_load_l3_miss_retired.local_dram事件的正确数字。 所以我想利用精确的事件。但令我惊讶的是,我得到的事件在机器中不受支持。尽管手册提到该计数器为PEBS计数器 我的输出如下: perf stat -e mem_load_l3_miss_retired.remote_dram:p sl

我想测量工作负载中远程和本地内存访问的百分比。我面临一些问题,因为我觉得我在Skylake服务器上没有获得mem_load_l3_miss_retired.remote_dram和mem_load_l3_miss_retired.local_dram事件的正确数字。 所以我想利用精确的事件。但令我惊讶的是,我得到的事件在机器中不受支持。尽管手册提到该计数器为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-e mem_load_l3_miss_retired.remote_dram:p sleep 2
“睡眠2”的性能计数器统计信息:
mem_load_l3_miss_已退休。远程内存:p

请帮我找到解决办法

使用
perf stat
无法获得
精确的事件编号

perf stat
以非采样模式运行,其中
perf
维护所有事件发生的运行计数。在计数模式下记录精确事件是没有意义的<代码>精确事件
,如Peter所述,可帮助您正确缩小指令范围(实际上是+1指令,来自触发PEBS辅助的指令),样本中的记录归因于该指令

此外,众所周知,PEBS中断处理程序会与运行
perf stat
时运行的计数器溢出NMI发生冲突。要了解更多信息,请查看讨论

由于上述原因,可以看出,在非采样模式下已禁用记录
precise
事件

您应该使用
perf record
来记录
precise
事件,因为事件
mem\u load\u l3\u miss\u已失效。远程\u dram
支持PEB


使用
perf stat
无法获得
精确的事件编号

perf stat
以非采样模式运行,其中
perf
维护所有事件发生的运行计数。在计数模式下记录精确事件是没有意义的<代码>精确事件
,如Peter所述,可帮助您正确缩小指令范围(实际上是+1指令,来自触发PEBS辅助的指令),样本中的记录归因于该指令

此外,众所周知,PEBS中断处理程序会与运行
perf stat
时运行的计数器溢出NMI发生冲突。要了解更多信息,请查看讨论

由于上述原因,可以看出,在非采样模式下已禁用记录
precise
事件

您应该使用
perf record
来记录
precise
事件,因为事件
mem\u load\u l3\u miss\u已失效。远程\u dram
支持PEB


如果运行
perf stat/bin/ls
,一般情况下的事件(如
指令
)是否有效?如果您在没有PMU传递的VM中,您将无法使用硬件事件。是的,通常所有计数器都工作。mem_load_l3_miss_退役。remote_dram:u,mem_load_l3_miss_退役。remote_dram:k甚至mem_load_l3_miss_退役。remote_dram工作正常。只是当我想使用精确模式时,它不起作用。注意:我不是在虚拟机上。我在服务器上,也有sudo特权。@PeterCords实际上没有使用PEBS计数器,我怀疑mem_load_l3_miss_retired.remote_dram和mem_load_l3_miss_retired.local_dram在某些情况下给我的计数。所以我想检查精确的模式读数。大概那个事件不支持PEB。并非所有人都这样做。请记住,Precise只是指样本归属于哪个指令(与性能记录有关),以及PEB通过为样本提供缓冲区来减少中断开销。非PEBS模式仍应准确报告
perf stat
的总计。(但请检查CPU的已发布勘误表;有些涉及性能事件的事件可能会导致某些事件的假计数。)如果运行
perf stat/bin/ls
,是否在常规工作中执行事件,如
指令
?如果您在没有PMU传递的VM中,您将无法使用硬件事件。是的,通常所有计数器都工作。mem_load_l3_miss_退役。remote_dram:u,mem_load_l3_miss_退役。remote_dram:k甚至mem_load_l3_miss_退役。remote_dram工作正常。只是当我想使用精确模式时,它不起作用。注意:我不是在虚拟机上。我在服务器上,也有sudo特权。@PeterCords实际上没有使用PEBS计数器,我怀疑mem_load_l3_miss_retired.remote_dram和mem_load_l3_miss_retired.local_dram在某些情况下给我的计数。所以我想检查精确的模式读数。大概那个事件不支持PEB。并非所有人都这样做。请记住,Precise只是指样本归属于哪个指令(与性能记录有关),以及PEB通过为样本提供缓冲区来减少中断开销。非PEBS模式仍应准确报告
perf stat
的总计。(但请检查CPU的已发布勘误表;有些涉及性能事件的勘误表可能导致某些事件的假计数。)
/* There's no sense in having PEBS for non sampling events: */
    if (!is_sampling_event(event))
            return -EINVAL;
perf record -e mem_load_l3_miss_retired.remote_dram:p sleep 2