1

我正在尝试使用 perf 在我的机器上测量某些事件,包括 L1-dcache-stores,与内核 3.10.0-1127 的相对较旧的 CentOS 7 相比,它具有相对较新的处理器 i9-10900K

问题是 perf 报告 L1-dcache-stores 以及其他一些事件在我运行时不受支持perf stat -e L1-dcache-stores,所以我不能使用它,至少以我知道的直接方式。然而,在内核为 4.18.0-193 的 CentOS 8 下,perf 在同一台机器上可以正常工作。所以,我怀疑这是因为旧内核不知道如何处理太新处理器上的某些性能计数器,而 perf 本质上是内核的一部分。

我该怎么做才能在 CentOS 7 系统上使用 perf 并让 L1-dcache-stores 之类的东西在我的处理器上正常工作?我不能只从 CentOS 8 获取 perf 二进制文件并在 CentOS 7 上使用它,因为 glibc 版本不同。

$ sudo perf stat -e L1-dcache-stores echo


 Performance counter stats for 'echo':

   <not supported>      L1-dcache-stores                                            

       0.000486304 seconds time elapsed

       0.000389000 seconds user
       0.000000000 seconds sys
4

1 回答 1

3

从 CentOS 内核软件包版本开始添加了对您的处理器 (Comet Lake) 的支持(请参阅内核更改日志4.18.0-151.el8中列出的标题为“perf/x86/intel:添加 Comet Lake CPU 支持”的提交)。因此,所有特定于模型的硬件事件,包括4.18.0-193 中的 perf 中的名称都受名称支持,但 3.10.0-1127 中不支持。这就是为什么你得到. 将告诉您所有归类为“硬件缓存事件”的事件在 3.10.0-1127 中不受支持。在 perf_event 子系统的所有版本中,都按名称支持英特尔架构硬件事件,例如和。L1-dcache-stores<not supported>perf statcyclesinstructions

在不支持其运行的处理器的内核上使用特定于模型的硬件事件的唯一方法是在perf命令中指定原始事件代码而不是事件名称。此方法在perf-list手册的“ARBITRARY PMUS”部分中进行了描述。例如,性能事件L1-dcache-stores将映射到MEM_INST_RETIRED.ALL_STORES处理器上的本机事件。然后可以通过在英特尔手册中查找事件名称来确定事件代码。

perf stat -e cpu/event=0xd0,umask=0x82,name=MEM_INST_RETIRED.ALL_STORES/ ...
于 2020-12-23T00:57:00.600 回答