我知道在各种操作系统上使用CPU时钟计数器获取时间增量的标准方法。我的问题是,为节省电力,这些操作系统如何解决CPU频率的变化。我最初认为这可以基于以下事实来解释:操作系统使用特定的调用来测量频率,以根据正在使用的核心,当前设置的频率等来获得校正频率。但后来我意识到,不会那样如果CPU频率降低并在两个时钟查询之间恢复到原始值,则任何时间增量都不准确。
例如,采取以下方案:
查询CPU周期。操作系统降低CPU频率以节省电力。其他一些代码在这里运行。操作系统提高CPU频率以提高性能。查询CPU周期。计算delta作为周期差除以频率。
由于两个查询之间的CPU频率不恒定,因此会产生不准确的增量。如何通过使用CPU周期来处理时间增量的操作系统或程序来解决这个问题?
答案 0 :(得分:0)
请参阅此wrong clock cycle measurements with rdtsc
如何处理它有更多方法
将CPU时钟设置为最大
阅读上面的链接,了解如何操作?
使用PIT代替RDTSC
PIT 是可编程中断计时器(Intel 8253,如果我没记错的话)它出现在所有PC主板上x286(甚至可能在之前),但分辨率只有~119KHz而且并非所有操作系统都给出你可以访问它。
结合PIT和RDTSC
只要在稳定到足够稳定时重复测量 PIT PIT 时钟(并继续扫描 CPU 时钟更改)。如果 CPU 时钟在测量期间发生变化,则丢弃测量值并重新开始