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.

2番目の最後のブート(問題のあるブート)では、検出された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)

回答:


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は問題を回避しようとしていました。その場合は、カーネルが起動時に実際のクロック周波数を誤認したか、ブートの間違った部分に対してクロック自体が遅いという兆候です。残念ながら、この1つのイベントは、ハードウェアの問題の明確なシグナルではありません。

再び発生する場合は、ntp.driftファイルを確認してください。


問題のあるブートntpdが安定したPLLに到達したntpdc -c loopinfoことがないため、周波数ドリフト値を取得できませんでした。リブート後、すべてが安定したドリフト値で正常に表示されます...ところで、あなたの提案は正しいです、私はlog/loopstats異常な動作を監視しています。
ステファノM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.