访问模型特定寄存器IA32_APERF / IA32_MPERF,以测量实际CPU频率

时间:2013-04-22 11:16:14

标签: timer cpu intel frequency privileges

据我了解测量实际操作CPU频率,我需要访问模型特定寄存器(MSR)IA32_APERF和IA32_MPERF(Assembly CPU frequency measuring algorithm)。

但是,对MSR寄存器的访问是特权(通过rdmsr指令)。还有另外一种方法吗?我的意思是,例如,通过我可以在我的代码中调用的设备驱动程序/库。我觉得读取寄存器是特权的,这似乎很奇怪。我认为只有写给他们才会有特权。

注意:rdtsc指令不考虑涡轮增压,因此无法报告实际工作频率

编辑: 我对Linux和/或Windows的解决方案很感兴趣。

1 个答案:

答案 0 :(得分:1)

  1. 你是对的,找到链接中第二个答案中描述的平均cpu频率的正确方法。

  2. 要在linux上阅读msrs,您可以使用工具RDMSR

  3. 在答案中唯一可能会误导的是 maxfrequency 。它应该不是maxfrequency,而是标称频率(最大非turbo频率),因为MPERF计数器以最大非turbo频率计数。您可以从MSR 0xCE位8:15(ref

  4. 获得此频率