回答

2

性能监视器计数器(PMC)不需要初始化,当软件需要使用该功能时,需要对其进行编程(或设置)。

CPU在复位后不会对PMC做任何事情,至少在架构上不可见(即对程序员可见)。

引导加载程序不处理这种事情。

它是一个处理PMC的内核模块,因为它们是模型特定寄存器(MSR),只能通过特权(例如rdmsr,wrmsr)访问指令(即它们需要代码在内核空间中运行) 。 然后,内核模块可以通过操作系统接口或通过允许指令rdpmc由非特权代码执行(尽管它只允许读取已经设置的计数器)来向用户空间程序公开功能。


要了解更多关于PMC的信息,请参见Intel Manual 3B, Chapter 18

+0

IIRC,内核可以启用对perf性能计数器的直接用户空间访问。 (也就是说,设置这样的[RDPMC指令](http://www.felixcloutier.com/x86/RDPMC.html)在用户空间中工作) –

+0

@PeterCordes如果我没有错,用户空间程序只能使用'rdpmc'进行阅读。但值得一提的是,谢谢! –

+0

我还没有手动使用RDPMC,但是我认为它只是用于读取实际的计数器。要选择你想让他们算什么,我认为你需要WRMSR。尽管如此,这对于非常低的开销测量就足够了,甚至比RDTSC还要低。 (你可以对核心时钟周期进行计数,而不是挂钟参考周期。) –