关于使用CPU时钟测量时间的问题

时间:2013-12-08 01:04:15

标签: time timedelta time-measurement cpu-cycles

我知道在各种操作系统上使用CPU时钟计数器获取时间增量的标准方法。我的问题是,为节省电力,这些操作系统如何解决CPU频率的变化。我最初认为这可以基于以下事实来解释:操作系统使用特定的调用来测量频率,以根据正在使用的核心,当前设置的频率等来获得校正频率。但后来我意识到,不会那样如果CPU频率降低并在两个时钟查询之间恢复到原始值,则任何时间增量都不准确。

例如,采取以下方案:

查询CPU周期。操作系统降低CPU频率以节省电力。其他一些代码在这里运行。操作系统提高CPU频率以提高性能。查询CPU周期。计算delta作为周期差除以频率。

由于两个查询之间的CPU频率不恒定,因此会产生不准确的增量。如何通过使用CPU周期来处理时间增量的操作系统或程序来解决这个问题?

1 个答案:

答案 0 :(得分:0)

请参阅此wrong clock cycle measurements with rdtsc

如何处理它有更多方法

  1. 将CPU时钟设置为最大

    阅读上面的链接,了解如何操作?

  2. 使用PIT代替RDTSC

    PIT 是可编程中断计时器(Intel 8253,如果我没记错的话)它出现在所有PC主板上x286(甚至可能在之前),但分辨率只有~119KHz而且并非所有操作系统都给出你可以访问它。

  3. 结合PIT和RDTSC

    只要在稳定到足够稳定时重复测量 PIT PIT 时钟(并继续扫描 CPU 时钟更改)。如果 CPU 时钟在测量期间发生变化,则丢弃测量值并重新开始