Operating system 操作系统如何确定瞬时时钟速度?

Operating system 操作系统如何确定瞬时时钟速度?,operating-system,cpu,Operating System,Cpu,我已经翻了一番,但我只有在谷歌上搜索一下,才能得到时钟速度的定义。软件如何确定CPU的当前时钟速度?有具体的说明吗 编辑似乎这个问题已经有了答案,我只是看得不够深入。据我所知;对于所有现有的CPU,无法测量CPU的瞬时时钟速度 你能得到的最接近的结果(取决于它是哪个CPU)是在很短的时间内找到平均时钟速度。例如,对于现代80x86 CPU,您可以设置一个性能监视计数器来测量“未缓存(CPU)时钟周期”,然后使用TSC(以“标称”固定频率运行,与CPU周期无关)来计算“CPU周期/时间”。当然,这

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


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

据我所知;对于所有现有的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设计(请参阅),它们根本没有时钟可供启动。

可能会重复