Sinkronisasi jam dengan NTP saat online, dan dengan RTC saat offline?

11

Apakah ada mekanisme yang ada yang menyinkronkan sistem linux dengan NTP saat online, dan dengan RTC yang diprediksi melayang saat offline?


Kami mengoperasikan "kolektor" jarak jauh: sistem Linux tertanam yang mengumpulkan dan stempel waktu data sensor. Kami membutuhkan kesalahan jam mereka untuk tetap cukup kecil, katakanlah di bawah 5 detik. Biasanya kami menggunakan NTP untuk menyinkronkan jam mereka, dan itu berfungsi dengan baik - selama sistem online.

Masalahnya adalah beberapa kolektor memiliki uplink yang sangat buruk yang dapat turun selama berjam-jam, berhari-hari atau bahkan berminggu-minggu. Itu tidak menghentikan pengumpulan data lokal, tetapi tanpa NTP, jam sistem Linux melayang dengan buruk dan sangat tidak terduga.

OTOH, RTC perangkat keras melayang juga, tetapi pada tingkat yang konstan. Tingkat drift RTC bervariasi dari satu papan ke papan, tetapi konstan per papan dan dapat diukur.

Saya kira yang kita butuhkan adalah mekanisme yang melakukan hal berikut:

  • Ukur tingkat drift RTC dari papan sebelum penempatannya
  • Sesuaikan waktu sistem yang sedang berlangsung / secara teratur melalui NTP bila memungkinkan
  • Sesuaikan waktu sistem secara teratur dari RTC ketika NTP tidak dapat dihindari. Mempertimbangkan laju penyimpangan RTC yang diketahui.
  • Opsional: Ukur dan catat laju drift RTC yang sedang berlangsung saat online (1)

Dengan 'mekanisme' yang saya maksudkan adalah beberapa perangkat lunak dan / atau konfigurasi terpelihara dengan baik yang didokumentasikan yang dapat menangani dua status "online" vs. "offline", memastikan bahwa jam sistem disinkronkan dengan sumber waktu yang benar (ntp vs. rtc), mendeteksi perubahan status, dan memperbaiki drift RTC. Tidak masalah apakah itu diterapkan sebagai konfigurasi / plugin ntpd khusus, sebagai daemon terpisah, sebagai tugas cron, atau yang lain.

Saya telah melihat Chrony , tetapi menurut dokumentasinya ia mencoba untuk memprediksi penyimpangan jam sistem , yang dalam kasus kami melayang jauh lebih tak terduga daripada RTC. Chrony tampaknya menggunakan RTC hanya untuk menjaga waktu di reboot.


(1) Catatan ntpd mengaktifkan '11-menit mode 'kernel (perbarui rtc dari jam sistem setiap 11 menit). Sepertinya tidak ada cara dengan kernel saat ini dan ntpd untuk mencegah mode 11 menit. Oleh karena itu, setiap informasi rtc drift hilang saat ntpd berjalan (thx @billthor).


Pembaruan / pengeditan:

  • Kami sedang mempertimbangkan untuk menambahkan jam radio eksternal untuk sinyal MSF atau DCF77 (kami berbasis di Eropa) melalui USB atau Serial. Tapi kami lebih memilih perangkat keras tetap ramping.
  • Kolektor kami berada di dalam ruangan, sering di ruang bawah tanah. Jadi menambahkan jam GPS tidak akan membantu.
  • Kami menggunakan Debian 7. Itu berarti hwclock dari util-linux-2.20.1, ntpdate-4.2.6p5, ntpd dari ntp-4.2.6.p5, chrony-1.24 (berpotensi 1.30).
  • Perhatikan bahwa masalah kita bukanlah bahwa kita tidak tahu bagaimana menggunakan ntpdate(8), hwclock(8), date(1), dll Silakan lihat bagian ditambahkan dalam huruf miring tentang apa yang saya maksud dengan 'mekanisme'.
  • Menambahkan catatan kaki tentang '11-menit mode '
  • Berikut ini diskusi yang sangat menarik tentang penyinkronan offline dan penyimpangan RTC
Nils Toedtmann
sumber
Seperti yang saya mengerti, kombinasi ntpd dan hwclock sudah memungkinkan Anda untuk melakukan semua hal ini.
Roy
@ Roy Tentu. Pertanyaannya adalah: Bagaimana cara menggabungkan ntp (d) dan RTC (hwclock) secara koheren untuk mencapai akurasi maksimal?
Nils Toedtmann
Saya mengerti bahwa sys clock lebih dari RTC. Saya ingin tahu apa yang Anda temukan tidak dapat diterima mengenai cara / efektivitas manajemen penyimpangan sistem kroni? Bagaimana kroni gagal untuk Anda?
dfc
@ chrony PDF tidak gagal pada kami. Kami belum mencobanya karena sepertinya tidak menggunakan RTC untuk menjaga waktu selama periode offline, yang saya pikir akan meningkatkan akurasi dalam use case kami. Kami akan menguji chrony jika tidak ada metode lain yang lebih menjanjikan yang disarankan.
Nils Toedtmann
Saya pikir Anda harus melihat ke chrony. Dengan penuh hormat tampaknya Anda menolak opsi yang baik berdasarkan firasat. Menurut pendapat saya itu adalah ke belakang untuk menyelidiki chrony iff tidak ditemukan RTC-ntpd Tampaknya hal yang termudah adalah untuk melihat apakah kroni memenuhi kebutuhan Anda dan jika tidak maka turunlah ke lubang kelinci ini
dfc

Jawaban:

4

Situasi Anda tidak biasa, dan saya akan terkejut jika ada yang datang dengan ntpdkonfigurasi berbasis standar untuk melakukan apa yang Anda inginkan. Yang mengatakan, saya suka terkejut, dan itu cukup sering terjadi di sekitar bagian ini.

Tetapi sampai seseorang datang dengan ide yang lebih baik, sudahkah Anda mempertimbangkan crontabentri seperti ini?

*/5 * * * *   ntpdate 0.pool.ntp.org || ( hwclock --adjust; hwclock --hctosys )

Yaitu, setiap lima menit mencoba untuk menyinkronkan jam melalui ntpdate, dan jika (dan hanya jika) yang gagal, sesuaikan jam perangkat keras untuk penyimpangan sesuai dengan /etc/adjtimefile (yang formatnya dirinci man hwclock, dan yang baris pertamanya telah Anda isi dengan tepat menggunakan pengetahuan Anda. dari tingkat RTC tertentu), lalu atur jam sistem dari RTC.

Perhatikan bahwa jika Anda mencari solusi seperti ini, dan Anda sedang mengerahkan sejumlah besar sistem ini, dianggap sopan untuk bekerja dengan kumpulan, dan berkontribusi server kembali sesuai dengan penggunaan Anda. Anda dapat menemukan informasi lebih lanjut di http://www.pool.ntp.org/en/vendors.html .

MadHatter
sumber
Anda memakukan ide dasar :-) Tapi itu tidak dihitung sebagai jawaban (belum) karena tidak memperhitungkan penyimpangan RTC (konstan, tetapi signifikan). Bisakah kita memperbaikinya, misalnya memanfaatkan /etc/adjtimedan hwclock --adjust?
Nils Toedtmann
Iya; Lihat di atas.
MadHatter
Ini adalah solusi yang saya pikirkan ketika saya menulis komentar saya sebelumnya. Juga, jika jam sistem saat ini sedang disinkronkan melalui ntpd, Anda dapat menggunakan hwclock untuk mengukur dan mengatur laju penyimpangan yang cukup tepat untuk RTC.
Roy
Sayangnya tidak, lihat komentar tentang ntpd & '11 -minute mode '
Nils Toedtmann
-1

NTP sudah memiliki mekanisme untuk mengetahui apakah itu online atau offline, dan itu akan beralih ke sumber prioritas yang lebih rendah seperti yang diperlukan. Sangat mudah untuk memeriksa nilai jangkauan untuk memicu sumber alternatif, tapi saya akan tetap menggunakan NTP. Seperti yang dibahas di bawah ini, pemantauan dan koreksi untuk penyimpangan RTC kemungkinan akan sulit.

Pada masa pra-Internet saya menggunakan program yang akan menelepon ke sumber data dan menyinkronkan jam. Mungkin masih ada layanan yang menyediakan sumber waktu melalui modem. Ini akan membutuhkan akses ke saluran telepon.

Ada masalah yang diketahui dengan jam lokal, yang tidak berlaku untuk RTC. Beberapa masalah didokumentasikan dalam daftar Masalah OS yang Dikenal NTP . Ini mungkin menjelaskan pergeseran jam Anda. Mengatasinya dapat menyelesaikan masalah Anda. Dengan tidak adanya kutu yang terlewat, saya telah menemukan sumber waktu (sistem) lokal mungkin sangat stabil.

Anda mungkin dapat menggunakan driver Jam bisu (33) dengan program yang menulis waktu RTC yang sesuai untuk perangkat / dev / dumbclockX.

Ada sejumlah driver lain berdasarkan jam Radio. Beberapa di antaranya menggunakan layanan gelombang pendek seperti WWV dan CHU, yang dapat bekerja di lingkungan di mana sinyal GPS tidak tersedia. Untuk Eropa daftar ini akan mencakup BBC, TDF, RBU, dan RMW.

Pavel Krejci telah menulis driver RTC juga, tetapi tampaknya tidak dimasukkan ke dalam driver resmi. Ini dapat bekerja dengan sinkronisasi jenis PPS.

Seharusnya dimungkinkan untuk mengukur penyimpangan RTC sebelum penyebaran. Namun, Anda perlu memastikan bahwa RTC tidak diperbarui secara otomatis. Ketika jam sistem diperbarui dengan fungsi adjtimex, RTC dapat diperbarui setiap 11 menit.

NTP akan memperbarui jam ketika terhubung. Biasanya NTP akan menolak untuk melakukan penyesuaian besar pada jam sistem. Ada opsi untuk menyesuaikan seberapa jauh jam dapat disesuaikan.

Saya telah menyarankan opsi untuk menggunakan RTC di atas. Jam radio mungkin lebih cocok daripada jam GPS.

Mengukur arus tanpa adanya sumber waktu yang dapat diandalkan untuk membandingkannya kemungkinan merupakan upaya yang sia-sia. Jika waktu lokal tidak stabil, Anda tidak dapat menggunakannya untuk memantau RTC dan sebaliknya. Mengukur drift ketika NTP terhubung tidak akan berfungsi jika kernel memperbarui RTC setiap 11 menit. RTC yang saya gunakan memiliki resolusi satu detik, sehingga mereka harus melayang secara signifikan agar dapat diukur dengan andal.

BillThor
sumber
Saya tidak mengerti bagaimana ini berhubungan dengan pertanyaan saya. Saya tidak berpikir masalah saya adalah kurangnya driver ... atau bukan?
Nils Toedtmann
@NilsToedtmann Sejauh yang saya dapat temukan tidak ada driver resmi untuk RTC. Saya percaya localpengemudi hanya menggunakan jam server, yang Anda laporkan melayang. Saya akan memperbarui tanggapan saya.
BillThor
Ketika Anda mengatakan 'driver', apakah maksud Anda driver kernel Linux (yang ada banyak), atau fitur ntpd? Terima kasih untuk tips Anda, beberapa dari mereka menarik - meskipun saya pikir mereka seharusnya diposting bukan sebagai komentar. Terima kasih khusus untuk menyebutkan '11 -minute more ', saya sudah lupa tentang itu. Saya memperbarui pertanyaan saya.
Nils Toedtmann
@NilsToedtmann Tidak, maksud saya driver jam NTP. Sudah pengalaman saya bahwa RTC biasanya melayang, tetapi tidak pada tingkat tinggi jika adonan baik. Kutu yang terlewat dapat menjadi masalah dengan jam sistem.
BillThor