时钟源的变化有什么影响?

The*_*eer 5 real-time acpi clock

的输出 cat /sys/devices/system/clocksource/clocksource0/available_clocksource列出了可用的硬件时钟。

我已经改变了时钟,没有任何明显的区别。 sudo /bin/sh -c 'echo acpi_pm > current_clocksource'

更改硬件时钟的实际含义是什么?有没有办法检查可用时钟的分辨率(或其他一些可见的变化)?

Jor*_*rín 8

好吧,首先,内核会自动选择最好的,如果可用,通常是TSC,因为它由cpu保存并且非常快(RDTSC和读取EDX:EAX)。

但情况并非总是如此,在 SMP 系统主要由几个独立的 CPU 构建的早期,CPU 尽可能“平等”是非常重要的(模型、速度和步进的完美匹配) ,但即便如此,有时也会发生一个比另一个更快的情况,因此两者之间的 TSC 计数器“不稳定”,这就是允许更改它的原因(或使用“notsc”内核参数禁用它)。即使有这些限制,TSC 仍然是最好的来源,但内核必须非常小心,在多核系统中只依赖一个 cpu 或积极尝试保持它们同步,还要考虑诸如挂起/恢复之类的事情(它重置计数器)和 cpu 频率缩放(影响某些 cpu 模型中的 TSC)。

SMP 早期的一些人甚至构建了具有不同速度的 CPU 的系统(类似于 arm 中的新 BIG.little 架构),这在计时领域造成了大问题。

至于检查分辨率的方法,您有clock_getres()并且您在此处有一个示例。

还有一些额外的链接:官方内核文档(此目录中还有其他有趣的文件)和chromebook 中的 TSC 重新同步以及不同时钟源的一些基准测试。

简而言之,更改时钟源时不应该有任何用户空间可见的更改,只有更慢的gettimeofday()

  • TSC 读取速度更快。想象一下,如果您有两个时钟,分辨率为一分钟,但阅读一个需要半秒,而阅读另一个则需要 20 秒。频率≠阅读速度。 (2认同)