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

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 频率明显异常。没有异常值,检测到的频率相对于标称频率的误差和标准偏差为 +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)

答案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 文件。

相关内容