The*_*eer 5 real-time acpi clock
的输出 cat /sys/devices/system/clocksource/clocksource0/available_clocksource
列出了可用的硬件时钟。
我已经改变了时钟,没有任何明显的区别。
sudo /bin/sh -c 'echo acpi_pm > current_clocksource'
更改硬件时钟的实际含义是什么?有没有办法检查可用时钟的分辨率(或其他一些可见的变化)?
好吧,首先,内核会自动选择最好的,如果可用,通常是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()。
归档时间: |
|
查看次数: |
5332 次 |
最近记录: |