Linux çekirdeği yanlış işlemci frekansını tespit ediyor


15

6.0.8 Debian sunucusunun (HP ProLiant) soğuk önyüklemesinden sonra ntpd, sistem zamanı ile tahrip oldu: sınırsız büyüyen normal ve güvenilir referans zaman sunucularına göre ofset ve titreşim. (İkiz özdeş bir sunucunun hiç bir problemi olmadığını unutmayın.) Birçok başarısız denemeyi denedikten sonra ntpd, bir yeniden başlatmayı denemeye karar verdim ve her şey yolunda gitti.

Sorunu araştırmak için saat problemlerimi açıklayabilecek bu tutarsızlığı buldum:

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.

İkinci son önyüklemede (sorunlu olan) algılanan CPU frekansının açık bir aykırı olduğunu unutmayın. Aykırı değer olmadan, tespit edilen frekansın nominal frekansa göre hatası ve standart sapması +0.15 MHz ± 0.25 MHz'dir. Sorunlu önyükleme için -16.4 Mhz hatası var, bu da beklenenden yaklaşık 100 kat daha büyük.

Sorularım:

  1. Bu tür bir hata ntpzaman disiplinini kararsız / kullanılamaz hale getirebilir mi? Saat problemlerimin nedeni bu mu?

  2. Bu tür davranışlar, zayıf bir donanım belirtisi midir? Sunucu hw bakımına girmeli mi?

Güncelleme

Bazı yararlı veriler:

  • çekirdek 2.6.32-5-amd64'tür (Debian 2.6.32-48squeeze4)
  • current_clocksource dır-dir tsc
  • hatası lpj(elbette) CPU frekansındaki hata ile tutarlıdır

Yukarıdakiler için bazı bağlam çizgileri 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)

Yanıtlar:


5

Sorunun yanlış tanımlanmış bir zaman damgası sayacı (TSC) sıklığı olduğuna kendimi ikna ettim .

Görünüşe göre çekirdek TSC'yi programlanabilir aralık zamanlayıcısına (PIT) göre kalibre ediyor . Genellikle tanımlanan CPU frekansı 2400.204 ± 0.134 MHz'dir, bu da yaklaşık 56 ppm doğruluğa karşılık gelir. Sorunlu önyüklemeden sonra CPU frekansı 2383.579 MHz olarak tahmin edildi, bu da yaklaşık 6900 ppm'lik bir hataya karşılık geliyor ntpdve telafi edemedi. Aslında, çalışmanın ilk 10h30m'si sırasında sistem saati yaklaşık 4m30 kazanmıştır, bu da yaklaşık 7000 ppm'dir.

TSC frekansındaki hata, sistem saatindeki sapmaya karşılık geldiğinden, anormal saat davranışının yanlış bir TSC kalibrasyonundan kaynaklandığı sonucuna varabilirim.

Ancak bu kadar büyük bir sorun görmedim: Hala bu yanlış kalibrasyonun olası nedenlerini (hw, sw?) Merak ediyorum.


3

Bu tür davranış atipiktir. ntp.driftDavranış ortaya çıktığında önemli değişikliklerin olup olmadığını görmek için dosyanın değerlerini izlemek iyi bir kontrol olacaktır . Eğer önemli ölçüde değişmeye devam ederse, NTP bir problemin etrafında eğilmeye çalışıyordu. Eğer durum buysa, çekirdeğin başlangıçtaki gerçek saat frekansını yanlış tanımladığının ya da saatin kendisinin önyüklemenin yanlış kısımları için yavaş olduğunun bir işaretidir. Ne yazık ki, bu olay donanım sorunlarının açık bir işareti değildir.

Tekrar olursa, ntp.drift dosyasını izleyin.


Sorunlu önyükleme ntpd hiçbir zaman sabit bir PLL geldi sonra, ntpdc -c loopinfoasla bana bir frekans sürüklenme değeri vermedi. Şimdi yeniden başlattıktan sonra her şey istikrarlı bir sapma değeri ile sırayla görünüyor ... BTW öneriniz doğru, ben log/loopstatsanormal davranış için izliyorum.
Stefano M
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.