Chinaunix首页 | 论坛 | 博客
  • 博客访问: 650236
  • 博文数量: 171
  • 博客积分: 2389
  • 博客等级: 大尉
  • 技术积分: 1516
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-24 14:18
文章分类

全部博文(171)

文章存档

2014年(20)

2013年(51)

2012年(40)

2011年(59)

1970年(1)

我的朋友

分类: LINUX

2011-06-22 10:32:45

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

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

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

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

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

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

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

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

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

文章来源于DELL官网,更多精彩内容请访问DELL官方社区或DELL解决方案专区

阅读(951) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~