【发布时间】:2020-09-07 01:06:06
【问题描述】:
在perf_event_open 之上进行自定义实现我需要同时监控多个PERF_TYPE_HW_CACHE。
英特尔手册指出,对于我的 CPU 架构,每个线程有 4 个可编程计数器(如果禁用超线程,则为 8 个)。因此,我将选择的 PERF_TYPE_HW_CACHE 事件分组为 1 个 perf 事件组,其中包含 PERF_TYPE_HW_CACHE 4 个事件 (LLC_GROUP)。
我进行了第一次实验,得到了以下结果:
LLC_GROUP of thread 2 | time Enabled: 3190370379, time Running: 3017
HW_CACHE_LLC_READ_MISSES = 0
HW_CACHE_LLC_WRITE_MISSES = 0
HW_CACHE_LLC_READS = 0
HW_CACHE_LLC_WRITES = 0
从以上结果可以清楚地看出,PMU 并不“适合”所有 4 个事件。我们还观察到没有实际结果的“奇怪”多路复用..
因此,下一步,我将 4 事件组分成 2 组,每组 2 个事件(LLC_GROUP、LLC2_GROUP),我得到的结果如下:
LLC_GROUP of thread 2 | time Enabled: 2772569406, time Running: 1396022331
HW_CACHE_LLC_READ_MISSES = 102117
HW_CACHE_LLC_WRITE_MISSES = 9624295
LLC2_GROUP of thread 2 | time Enabled: 2772571024, time Running: 1376575096
HW_CACHE_LLC_READS = 22020658
HW_CACHE_LLC_WRITES = 18156060
使用此配置,我们再次观察到 PMU 不能同时“适应”4 PERF_TYPE_HW_CACHE,但这次(预期的)多路复用正在发生。
有人解释一下吗?
这种行为对我来说看起来很奇怪,因为我无需多路复用即可监控多个 PERF_TYPE_HARDWARE 事件(最多 6 个),而且我希望 PERF_TYPE_HW_CACHE 事件也会发生同样的情况。
【问题讨论】:
-
您使用的是什么 CPU 和内核版本? (这看起来像是PERF_TYPE_HARDWARE and PERF_TYPE_HW_CACHE concurrent monitoring 的后续行动,以防任何人试图回答这个问题。)
-
另外,您是否禁用了 Linux 的 NMI 看门狗 (sysctl
kernel/nmi_watchdog = 0) 以释放每个逻辑核心的第 4 个硬件性能计数器? -
嗨,彼得。是的,确实,这是一种后续,但我想更具体... CPU:Kaby Lake,内核:4.15.0-74-generic,nmi_watchdog = 0。谢谢
标签: linux linux-kernel cpu-cache perf intel-pmu