在冷启动 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 频率明显异常。没有异常值,检测到的频率相对于标称频率的误差和标准偏差为 +0.15 MHz ± 0.25 MHz。对于有问题的启动,我的误差为 -16.4 Mhz,比预期高出约 100 倍。
我的问题:
这种类型的错误会导致
ntp
时间规则不稳定/不可用吗?这是我的时钟出现问题的原因吗?这种行为是硬件不稳定的表现吗?服务器是否应该进行硬件维护?
更新
一些有用的数据:
- 内核是 2.6.32-5-amd64 (Debian 2.6.32-48squeeze4)
current_clocksource
是tsc
- 错误
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)
答案1
我确信这个问题是被错误识别的时间戳计数器(TSC)频率。
显然内核正在校准 TSC可编程间隔定时器(PIT)。通常识别出的 CPU 频率为 2400.204 ± 0.134 MHz,相当于约 56 ppm 的精度。在出现问题的启动后,CPU 频率估计为 2383.579 MHz,相当于约 6900 ppm 的误差,无法ntpd
补偿。事实上,在运行的前 10 小时 30 分钟内,系统时钟增益约为 4 分 30 秒,约为 7000 ppm。
由于 TSC 频率中的错误与系统时钟中的漂移相对应,因此我得出结论,异常时钟行为是由错误的 TSC 校准引起的。
但是我从未见过这么大的问题:我仍然想知道这种错误校准的可能原因(hw,sw?)。
答案2
这种行为是不典型的。一个很好的检查方法是监视ntp.drift
文件的值,看看当行为出现时是否发生了重大变化。如果它持续发生重大变化,则 NTP 试图绕过问题。如果是这种情况,则表明内核在启动时错误识别了真正的时钟频率,或者时钟本身在错误的启动部分运行缓慢。不幸的是,这一事件并不是硬件问题的明确信号。
如果再次发生,请查看 ntp.drift 文件。