Ste*_*o M 15 hardware ntp time linux-kernel
在 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.
Run Code Online (Sandbox Code Playgroud)
请注意,在第二次启动(有问题的启动)中,检测到的 CPU 频率是一个明显的异常值。在没有异常值的情况下,检测到的频率相对于标称频率的误差和标准偏差为 +0.15 MHz ± 0.25 MHz。对于有问题的启动,我的错误为 -16.4 Mhz,比预期大 100 倍。
我的问题:
这种类型的错误会使ntp
时间规则不稳定/无法使用吗?这是我的时钟问题的原因吗?
这种类型的行为是硬件不稳定的症状吗?服务器是否应该进行硬件维护?
更新
一些有用的数据:
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)
Run Code Online (Sandbox Code Playgroud)
我说服自己问题是错误识别的时间戳计数器(TSC) 频率。
显然,内核正在根据可编程间隔计时器(PIT)校准 TSC 。通常识别的CPU频率为2400.204±0.134MHz,对应约56ppm的精度。在有问题的启动之后,CPU 频率估计为 2383.579 MHz,这对应于大约 6900 ppm 的误差,这ntpd
是无法补偿的。事实上,在运行的第一个 10h30m 期间,系统时钟增加了大约 4m30s,即大约 7000 ppm。
由于 TSC 频率的误差对应于系统时钟的漂移,我可以得出结论,异常时钟行为是由错误的 TSC 校准引起的。
但是我从未见过这么大的问题:我仍然想知道这种错误校准的可能原因(硬件,软件?)。
这种行为是非典型的。一个好的检查方法是监视文件的值,ntp.drift
以查看行为出现时是否发生重大变化。如果它持续发生显着变化,则 NTP 正试图回避某个问题。如果是这种情况,则表明内核在启动时错误地识别了真实的时钟频率,或者时钟本身对于启动的错误部分来说很慢。不幸的是,这一事件并不是硬件问题的明确信号。
如果再次发生这种情况,请查看 ntp.drift 文件。