Pada beberapa platform produksi kami telah mengamati gejala yang tampaknya menunjukkan bahwa waktu siang hari secara berkala melompat maju atau mundur. Lompatan biasanya sekitar 1 detik, biasanya dibatalkan (lompat ke depan lalu mundur segera setelah itu) dan terjadi sekitar 50 kali per hari. Penyimpangan ini paling terlihat selama waktu penggunaan aplikasi puncak, dan selama periode operasi I / O disk tinggi seperti cadangan harian. Drift ini memengaruhi aplikasi sensitif real-time lunak kami.
Sistemnya adalah server Oracle Netra X4250 dan Netra X4270 yang menjalankan SLES 11SP2 dengan kernel default 3.0.58-0.6.6.
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
Kami telah menonaktifkan NTP , tetapi itu tidak berpengaruh pada drift. Apakah ada alat yang mengukur waktu jam siang hari melayang? Bagaimana kita bisa menghindari ini?
Ini adalah platform produksi, dan kami tidak dapat membuat ulang masalah di lab kami, jadi kemampuan saya untuk bereksperimen terbatas. Jika dibiarkan sendiri, saya akan menulis alat untuk mengukur drift, dan mungkin bereksperimen dengan sumber daya jam HPET .
ntpdate(8)
atauntpd(8)
).Jawaban:
Satu-satunya alat yang saya ketahui adalah alat NTP yang cukup. Anda tidak harus benar-benar mengkonfigurasi ntpd untuk menyinkronkan dengan sumber clock yang diberikan, Anda cukup menggunakan
-d
opsintpdate
untuk mengambil offset yang dihitung.Contoh:
-d
adalah opsi debug yang berfungsi NTP tanpa benar-benar menyentuh jam sistem.Saya tidak terlalu terkejut bahwa Anda tidak dapat mereproduksi ini di lingkungan dev / test karena mungkin hanya karena jam perangkat keras. Jika Anda memiliki dukungan perangkat keras dengan seseorang, saya akan mencoba untuk memperbaiki mesin Anda. Salah satu kemungkinan adalah menukar salah satu mesin dev untuk mesin produksi ini, memperbaiki sistem PROD sebelumnya dan memperkenalkannya kembali sebagai mesin dev untuk menggantikan yang ada di PROD sekarang.
Singkatnya, mengganti sumber jam perangkat keras adalah tentang semua yang dapat Anda lakukan. Jika Anda tidak atau tidak dapat melakukan swap, saya sarankan Anda pergi ke rute yang sulit. Anda dapat menguji apakah perubahan sumber jam mengacaukan layanan sistem dan kemudian menyebarkannya ke dalam produksi sebagai hujan es.
sumber
tsc
Berbasis di CPU sehingga masuk akal bahwa aktivitas CPU yang lebih tinggi akan memicu masalah dengan jam hardware. Jika hpet cukup cepat untuk Anda, maka Anda mungkin hanya perlu mencobanya, dilayani, atau melakukan pertukaran. Itulah satu-satunya opsi yang bisa saya lihat untuk Anda.Salah satu solusinya adalah menggunakan
HPET
Lihat juga Timer Acara Presisi Tinggi
Untuk mengaturnya sebagai penggunaan parameter boot
Pada perangkat keras yang lebih lama
TSC
sering tidak stabil dan dinonaktifkan oleh kernel.sumber
Saya menulis alat yang lebih terperinci untuk menghubungkan pengukuran jam dengan gejala latensi yang ditunjukkan oleh aplikasi kita. Alat ini tampaknya mengesampingkan apa yang sebelumnya saya duga sebagai jitter di waktu Linux siang hari.
Singkat cerita, hipotesis awal saya tidak valid. Tetapi saya belajar banyak tentang jam Linux dari jawaban dan tautan, jadi terima kasih kepada semua yang menjawab!
sumber
Bukankah jam seharusnya monoton kecuali seseorang mengubahnya? Melompat mundur seharusnya tidak mungkin. Pasti ada sesuatu yang mengatur jam - tugas cron atau daemon lain (misalnya panggilan ke
hwclock --adjust
). Saya ingat bahwa ntp sendiri memperbarui statistik untuk penyimpangan dan mengkompensasi untuk itu secara rutin dan jika Anda gagal menjalankan ntp untuk waktu yang lama dan mendapatkan offset besar, itu mengacaukan waktu selama berhari-hari setelahnya jika Anda tidak mengatur ulang/etc/adjtime
. Anda mungkin memiliki pengaturan seperti itu - sesuatu yang menyesuaikan waktu melayang secara berkala (dan menyebabkan lompatan).ntp
sebenarnya dimaksudkan untuk mengatasi masalah ini.sumber