Linux内核检测错误的处理器频率

在6.0.8 Debian服务器(HP ProLiant)的冷启动之后, ntpd对系统时间造成了严重的影响:相对于通常可靠的参考时间服务器而言,偏移量和抖动增长不受限制。 (请注意,一个双胞胎相同的服务器没有任何问题。)经过许多不成功的尝试解决ntpd方面的问题,我决定尝试重新启动,一切正常。

为了调查这个问题,我发现这个差异,这可以解释我的时钟问题:

 root@n1:~# zgrep Detected /var/log/dmesg* /var/log/dmesg:[ 0.004000] Detected 2400.110 MHz processor. /var/log/dmesg.0:[ 0.004000] Detected 2383.579 MHz processor. /var/log/dmesg.1.gz:[ 0.004000] Detected 2400.036 MHz processor. /var/log/dmesg.2.gz:[ 0.004000] Detected 2400.298 MHz processor. /var/log/dmesg.3.gz:[ 0.004000] Detected 2400.165 MHz processor. /var/log/dmesg.4.gz:[ 0.004000] Detected 2400.410 MHz processor. 

请注意,在第二次启动(有问题的启动)中,检测到的CPU频率是明显的exception值。 没有exception值时,检测到的频率相对于标称值的误差和标准偏差为+ 0.15MHz±0.25MHz。 对于有问题的启动,我有一个-16.4 Mhz的错误,这比预期的大约100倍。

我的问题:

  1. 这种types的错误可以使ntp时间不稳定/不可用? 这是我的时钟问题的原因?

  2. 这种types的行为是硬件硬件的症状吗? 服务器应该进入维护?

更新

一些有用的数据:

  • 内核是2.6.32-5-amd64(Debian 2.6.32-48squeeze4)
  • current_clocksourcetsc
  • lpj错误(当然)与CPU频率错误一致

上述grep一些上下文行

 [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.004000] Detected 2400.110 MHz processor. [ 0.000008] Calibrating delay loop (skipped), value calculated using timer frequency.. 4800.22 BogoMIPS (lpj=9600440) 

我相信自己这个问题是错误的时间戳计数器 (TSC)频率。

显然,内核正在根据可编程间隔定时器 (PIT)校准TSC。 通常识别的CPU频率是2400.204±0.134MHz,这相当于约56ppm的精度。 在有问题的启动后,CPU频率估计为2383.579 MHz,这相当于大约6900 ppm的误差, ntpd无法弥补。 事实上,在第一个10点30分钟的时间内,系统时钟增加了大约4分30秒,大约是7000 ppm。

由于TSC频率中的误差对应于系统时钟中的漂移,我会得出结论:exception时钟行为是由错误的TSC校准引起的。

但是我从来没有看到过这样一个大问题:我还在想这个错误校准的可能原因(hw,sw?)。

这种行为是非典型的。 一个好的检查就是监视ntp.drift文件的值,以查看行为出现时是否发生了重大变化。 如果这个问题一直在变化,那么NTP就会试图绕过一个问题。 如果是这样的话,这是一个迹象表明,内核在启动时错误地识别了真正的时钟频率,或者时钟本身在引导的错误部分上是慢的。 不幸的是,这个事件并不是硬件问题的明确信号。

如果再次发生,请注意ntp.drift文件。