amd_pmu_v2_handle_irq 应用于处理 AMD 处理器中的 PMU 溢出。当我在系统中使用
perf top -ag
时,它被大量调用。
但是当我使用
perf stat -a
命令时,对该函数的调用较少,这是为什么呢?为什么当我不使用任何 perf 命令时,相关调用的数量非常少?
您的系统是否启用了 NMI 看门狗定时器?它对计数器进行编程以不频繁地引发中断。检查您的
dmesg
是否有 NMI watchdog: Enabled. Permanently consumes one hw-PMU counter.
该消息是我在 Skylake 上的 Linux 6.5 上看到的,之前我的
kernel/nmi_watchdog = 0
配置文件中的 sysctl
禁用了它,因此每个逻辑核心的所有四个可编程计数器均可用。
回复:
perf stat -a
不需要很多中断:整个时间间隔内的总计数不需要统计采样。它可以在尽可能宽的溢出限制下进行编程。当它想要在最后收集数据时,它可以从每个 PMU 计数器中读取计数(并将其添加到沿途收集的 max * overflows
中)。仅当事件超出 PMU 计数器可容纳的范围时才需要发生中断。
但是
perf top
就像perf record
一样,编程计数器,因此它们经常溢出,因此它可以每次记录一个(进程/程序计数器)样本。这使得它每隔几秒就可以显示出整个过程中的热点,而不仅仅是最后的总计数,如perf stat
。
perf stat
的侵入性较小,根本不会中断正在分析的代码。 (perf stat -I 1000
每 1000 毫秒收集一次计数器值,但仍然不需要知道每个间隔内发生了什么。)