【问题标题】:Questions on Measuring Time Using the CPU Clock使用 CPU 时钟测量时间的问题
【发布时间】:2013-12-25 06:21:48
【问题描述】:

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

以如下场景为例:

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

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

【问题讨论】:

  • 我不确定,但我认为大多数变速系统使用固定频率振荡器,但更改分频器以改变 CPU 速度。为时钟提供了一个单独的分频器/计数器。

标签: time timedelta time-measurement cpu-cycles


【解决方案1】:

看到这个wrong clock cycle measurements with rdtsc

有更多的方法来处理它

  1. 将 CPU 时钟设置为最大值

    阅读上面的链接,看看怎么做?

  2. 使用 PIT 代替 RDTSC

    PIT 是可编程的中断计时器(如果我没记错的话是 Intel 8253)它存在于自 x286 以来(甚至可能更早)的所有 PC 主板上,但分辨率仅为 ~119KHz,并非所有操作系统都提供你可以访问它。

  3. 结合 PIT 和 RDTSC

    只需在足够稳定的情况下通过PIT重复测量CPU时钟(并继续扫描CPU时钟变化)。如果 CPU 时钟在测量期间发生变化,则丢弃测量并重新开始

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多