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


15

在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)

Answers:


5

我使自己确信问题出在时间戳计数器(TSC)频率错误。

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

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

但是,我从来没有见过这么大的问题:我仍然想知道这种错误校准的可能原因(hw,sw?)。


3

这种行为是非典型的。一个很好的检查是监视ntp.drift文件的值,以查看行为出现时是否发生了重大更改。如果它保持显着变化,则NTP试图解决问题。如果真是这样,这表明内核在启动时错误地标识了真实的时钟频率,或者时钟本身对于启动错误的部分而言速度很慢。不幸的是,这一事件并不是硬件问题的明确信号。

如果再次发生,请观看该ntp.drift文件。


有问题的启动后,ntpd从未到达稳定的PLL,因此ntpdc -c loopinfo从未给我频率漂移值。现在,重新启动后,一切似乎都井井有条,漂移值保持稳定...顺便说一句,您的建议是正确的,我正在监视log/loopstats异常行为。
Stefano M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.