【问题标题】:How does the OS determine the instantaneous clock speed?操作系统如何确定瞬时时钟速度?
【发布时间】:2019-05-01 05:08:31
【问题描述】:

我已经浏览了一下,但如果我用谷歌搜索,我只能得到时钟速度的定义。软件如何确定 CPU 的当前时钟速度?有具体的说明吗?

编辑看来这个问题已经有了答案,只是我看的不够深入。

【问题讨论】:

标签: operating-system cpu


【解决方案1】:

据我所知;对于所有现有 CPU,无法测量 CPU 的瞬时时钟速度。

您可以获得的最接近(取决于它是哪个 CPU)是在很短的时间内找到平均时钟速度。例如,对于现代 80x86 CPU,您可以设置一个性能监控计数器来测量“未暂停 (CPU) 时钟周期”,然后使用 TSC(它以“标称”固定频率运行,与 CPU 周期无关)来计算“CPU周期/时间”。当然,这涉及到“准确性与持续时间”的折衷(较长的持续时间会更准确,而非常短的持续时间会不太准确)。

另一个问题是信息在您使用之前就会过时。例如,CPU 的速度可以在确定 CPU 速度之前立即改变,也可以在确定 CPU 速度之后立即再次改变;如果您可以知道某个时间点的确切 CPU 速度(在测量时),那么该信息将毫无价值,因为它不暗示任何其他时间点(在不测量时)。

为了防止这种情况,您真正需要的是 CPU 速度变化日志(例如,当 CPU 速度变化时,在日志中添加一个包含时间戳和新速度的条目),以便您可以使用日志来确定 CPU速度是在过去的任何时间点。在某些情况下,这可能是可能的(例如,如果软件本身改变 CPU 速度,或者如果本地 APIC 被配置为生成“热监视器 IRQ”,那么软件可以将相关条目添加到日志中)。遗憾的是,对于其他情况(“涡轮增压”),这是不可能的(软件不会通知速度变化)。

另一个问题是您假设 CPU 具有一个时钟速度。虽然这在过去是正确的,但它不再是真的,并且可以合理地预期它在未来会变得“更不正确”。例如;现代 80x86 CPU 通常有一个用于通用指令的时钟和一个用于 SIMD(例如 AVX)的不同时钟,其中(当不使用 AVX 指令时)CPU 可以/将减少“AVX 时钟”以降低功耗(然后它'当您开始使用 AVX 指令时,将需要数千个周期才能使“AVX 时钟”恢复全速)。理论上,一个 CPU 可以分成任意数量的域,每个域都有自己独立的时钟。

当然,也有异步 CPU 设计(请参阅 https://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU )根本没有时钟开始。

【讨论】:

    猜你喜欢
    • 2014-10-09
    • 2018-04-06
    • 1970-01-01
    • 2010-12-28
    • 2023-03-18
    • 1970-01-01
    • 2021-04-06
    • 2019-10-26
    • 2019-04-20
    相关资源
    最近更新 更多