性能差异和英特尔PCM

3

我知道Intel的PCM和perf都可用,它们是否使用相同的硬件计数器?但是,perf的原始硬件事件不够清晰,而Intel的PCM提供了更多功能。我能否像perf一样使用PCM来监视单个进程?我知道VTune可以做到这一点,但它是专有软件。我目前正在使用Ubuntu 12.04。

2个回答

3
他们都使用同一块被称为PMU的硬件,即性能监控单元。 PMU提供许多硬件计数器,使用哪个硬件计数器取决于您向工具提供的参数。 perf用户空间工具是建立在一个名为perf_event_open的内核系统调用之上的,而Intel PCM工具是建立在允许访问特定于模型寄存器的msr内核模块之上的。
我不确定,但我认为Intel PCM不是命令行工具,而是您可以在程序中使用的C ++ API。

有没有任何研究来比较它们的开销?你知道这些工具中是否有哪一个更轻量级和/或更精确? - igon

1
使用wrmsr来编程不同的MSR以选择特定事件并设置模式(例如核级或逻辑处理器级/线程级),然后使用rdpmc / rdmsr在要监视的代码之前和之后读取计数器更加轻量级。由于它不需要进入内核模式并从/到用户模式退出内核模式,这对于时间事件监视来说是昂贵且特别有害的,但如果您使用wrmsr指令来编程MSR,则需要root权限。如果您使用perf_event_open,则无关紧要。此外,Linux perf子系统在支持每个线程监视方面做了更多工作(例如,在某些模式下保存/恢复计数寄存器)。 如果您想了解更多信息,建议阅读Intel® 64和IA-32体系结构软件开发人员手册第3B卷:系统编程指南第18章和第19章,或者访问Intel开发人员论坛,并查看有关perf_event_open的man页面。
据我所知,如果您打算像perf一样使用PCM以某种方式监视单个进程,则取决于情况。它们实际上相同,都利用相同的硬件PMU,可能会发生冲突。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接