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

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 倍。

我的问题:

  1. 这种类型的错误会使ntp时间规则不稳定/无法使用吗?这是我的时钟问题的原因吗?

  2. 这种类型的行为是硬件不稳定的症状吗?服务器是否应该进行硬件维护?

更新

一些有用的数据:

  • 内核是 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)
Run Code Online (Sandbox Code Playgroud)

Ste*_*o M 5

我说服自己问题是错误识别的时间戳计数器(TSC) 频率。

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

由于 TSC 频率的误差对应于系统时钟的漂移,我可以得出结论,异常时钟行为是由错误的 TSC 校准引起的。

但是我从未见过这么大的问题:我仍然想知道这种错误校准的可能原因(硬件,软件?)。


sys*_*138 3

这种行为是非典型的。一个好的检查方法是监视文件的值,ntp.drift以查看行为出现时是否发生重大变化。如果它持续发生显着变化,则 NTP 正试图回避某个问题。如果是这种情况,则表明内核在启动时错误地识别了真实的时钟频率,或者时钟本身对于启动的错误部分来说很慢。不幸的是,这一事件并不是硬件问题的明确信号。

如果再次发生这种情况,请查看 ntp.drift 文件。