使用 "Perf stat" 同时分析进程和 system-wide 事件
using "Perf stat" to profile both process and system-wide events simultaneously
如标题所示,是否可以在同一 perf stat 执行中同时分析每个进程和 system-wide 的硬件事件?
更准确地说,perf stat 命令将 return 两个 perf 事件列表,一个用于使用 perf stat 初始化的进程,第二个用于 system-wide 数据。
我知道一种可能的替代方法是使用 --per-core 并将进程固定到一个核心,同时能够检查其他核心上发生的情况。
系统范围的选项 -a
是 perf 命令本身的属性,而不是要分析的事件的属性,因此您无法收集每个进程和系统范围的事件计数单个 perf 命令。
但是,您可以 运行 多个 perf 进程同时处理重叠事件。例如,如果你想分析一个特定的进程和整个系统,你可以启动两个 perf stat
命令,一个用于一个目的。在内部,perf_event 子系统调度每个核心上的所有启用事件。如果由于某些事件的约束之间存在冲突或硬件事件的数量大于性能监控计数器的数量而无法同时调度所有指定的事件,则使用多路复用。来自每个 perf stat
命令的每个事件都需要专用的 PMC。
在现代 Intel 处理器上,如果禁用超线程(或者如果处理器型号不支持 HT),每个逻辑核心可以有 8 个通用 PMC 而不是只有 4 个。这可能有助于消除或减少多路复用。
除此之外,我认为这并不容易。
如标题所示,是否可以在同一 perf stat 执行中同时分析每个进程和 system-wide 的硬件事件? 更准确地说,perf stat 命令将 return 两个 perf 事件列表,一个用于使用 perf stat 初始化的进程,第二个用于 system-wide 数据。 我知道一种可能的替代方法是使用 --per-core 并将进程固定到一个核心,同时能够检查其他核心上发生的情况。
系统范围的选项 -a
是 perf 命令本身的属性,而不是要分析的事件的属性,因此您无法收集每个进程和系统范围的事件计数单个 perf 命令。
但是,您可以 运行 多个 perf 进程同时处理重叠事件。例如,如果你想分析一个特定的进程和整个系统,你可以启动两个 perf stat
命令,一个用于一个目的。在内部,perf_event 子系统调度每个核心上的所有启用事件。如果由于某些事件的约束之间存在冲突或硬件事件的数量大于性能监控计数器的数量而无法同时调度所有指定的事件,则使用多路复用。来自每个 perf stat
命令的每个事件都需要专用的 PMC。
在现代 Intel 处理器上,如果禁用超线程(或者如果处理器型号不支持 HT),每个逻辑核心可以有 8 个通用 PMC 而不是只有 4 个。这可能有助于消除或减少多路复用。
除此之外,我认为这并不容易。