我知道英特尔s PCM and perf are available, do they use the same hardware counters?? However perf
的原始硬件事件都不清楚,英特尔的 PCM 提供了更多的功能。我可以使用 PCM 以某种方式监控单个进程,如 perf 吗?我知道这可以在 VTune 上完成,但它是专有的。我目前正在开发 ubuntu 12.04。
2 回答
它们都使用相同的硬件,称为 PMU,性能监控单元。PMU 提供了许多硬件计数器,使用哪个硬件计数器取决于您给工具提供的参数。
perf userland 工具构建在一个内核系统调用之上perf_event_open
,英特尔 PCM 工具构建在msr
内核模块之上,允许访问特定于模型的寄存器。
我不确定,但我认为英特尔 PCM 不是命令行工具,而是您可以在程序中使用的 C++ API。
使用 wrmsr 对不同的 MSR 进行编程以选择特定事件并设置模式(例如核心级或逻辑处理器级/线程级),然后使用 rdpmc/rdmsr 读取代码前后的计数器更为轻量级你想监控。因为它不需要进入内核模式并从/到用户模式退出内核模式,这很昂贵,而且对时序事件监控尤其有害,但是如果您使用 wrmsr 指令对 MSR 进行编程,则需要 root 权限。如果您使用 perf_event_open,那么没关系。更重要的是,linux perf 子系统在支持每线程监控方面做了更多工作(例如,在某些模式下在上下文切换期间保存/恢复计数寄存器)。如果您想了解更多,我建议您阅读 Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3B 中的第 18 和 19 章:
据我所知,如果您打算使用 PCM 以某种方式监控像 perf 这样的单个进程,这取决于。它们实际上是相同的,都使用可能发生冲突的相同硬件 PMU。