在 CPU 节流系统中可靠的时间测量方法是什么?
现代 CPU 会逐个核心地改变 CPU 频率。我做了研究,发现很多人都在谈论时钟因此而倾斜。我还没有找到处理时钟偏差的好方法。正确的方法是什么(最好是在 Linux 中)?
附加问题:如果系统在虚拟机内运行,这些会发生什么变化?
Modern CPUs alter the CPU frequency on core-by-core basis. I have done my research and I found a lot of people talking about clocks being skewed because of this. What I have not found was a good method for dealing with the clock-skew. What is the proper method of doing it (preferably in Linux)?
Bonus question: how does any of this change if the system is running inside of a VM?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
带有
CLOCK_MONOTONIC
的clock_gettime()
不应出现时钟偏差。事实上,clock_gettime()
的 Linux 联机帮助页仅将CLOCK_PROCESS_CPUTIME_ID
和CLOCK_THREAD_CPUTIME_ID
记录为受时钟偏差的影响。clock_gettime()
withCLOCK_MONOTONIC
shouldn't see clock skew. Indeed, the Linux manpage forclock_gettime()
only documentsCLOCK_PROCESS_CPUTIME_ID
andCLOCK_THREAD_CPUTIME_ID
as being affected by clock skew.较新的芯片组采用了高精度事件计时器 (HPET),可解决此问题问题。如果您的操作系统支持 HPET(例如 Windows 7、Linux 2.6.27),则关键的内核模式计时功能不应存在偏差问题。
Newer chipsets incorporate a High Precision Event Timer (HPET) which addresses this issue. If your OS is HPET-aware (e.g. Windows 7, Linux 2.6.27) the critical kernel-mode timing functions should not have a skew problem.