快速业务通道

Linux 中的时钟准确度

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-31

本文来自戴尔软件开发高级工程师Stuart Hayes

一个关于计时的问题最近引起了我的关注. 有用户在 Dell 服务器上运行 Linux,并且发现时钟时间(Linux 所报告的)每天误差五秒以上,偏差比较明显.

我们想到的也许是运行 NTP,定期与真实世界同步操作系统的时钟.

但是这样的误差最初是如何产生的?

在Linux运行时,Linux 系统未使用实时时钟”(real time clock - RTC) 硬件来计时. Linux 通常在启动时从RTC 读取时间,然后从该点开始,Linux 使用另一个时钟来源(系统中的另一个计时器/计数器)来计时.

自第 2.6.18 版起,Linux 的内核就使用 CPU 时间戳计数器 (TSC) 作为首选的时钟来源(假设 TSC 以恒定频率运行,以新款的 英特尔 服务器 CPU为例). 但是,尽管读取速度很快且解析度很高,TSC 却不是一个已知的频率. 当内核使启动时,它需要使用频率已知的另一个计时器,对其进行校准. 这样的校准并非天衣无缝(即使用于校准的计时器也是如此),因此把 TSC 作为时钟来源会造成时间误差.

如果减少时间误差对您非常重要,而非若干微秒的调度延迟,则最好使用频率已知的计时器,如大多数 x86 服务器上提供的 HPET(高精度事件计时器). 借助新内核上的参数“clocksource=hpet”可实现这一目标. HPET 计时器以已知、固定的频率运行,Linux 内核可直接从计时器读取时间.

话说回来,尽管 HPET 的精度高于 TSC,运行 NTP 以在 Linux 中实现长期的时钟精度始终是很好的想法.

上述讨论仅适用于运行于裸机的 Linux. 在虚拟机中的问题略微复杂.

更多精彩文章请关注:

戴尔技术社区

本文出自 “Dell企业级技术社区” 博客,请务必保留此出处http://dellhome.blog.51cto.com/2924567/595434

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号