現今時間同步上, 有許多校時相關 protocol 可使用.
以精確度來分級, IEEE 1588v2 最為準確, 但也須搭配較為複雜的相關設備以及相關應用程式.
而次準確的 IRIG-B 主要使用同軸電纜或者serial port 傳輸媒介.
所以除了一些工業應用有需求外, 一般環境下還是以 NTP 透過 Ethernet 來進行時間校正.
以時間精確度來分:
- Precision Time Protocol (PTP) – IEEE 1588-2008
- nanoseconds level
- Media: Ethernet
- IRIG-B
- microseconds level
- Media: Coaxial, Serial or Fiber-optic
- NTP
- milliseconds level
- Media: Ethernet
以往使用 NTP 更新時間都是使用 ntpdate <server IP> 指令來同步時間, 若要定時同步可搭配 cron table.
但 ntp.org 在 2012 年時開始, 表示將讓 ntpd & sntp 來取代 ntpdate [1], 主要原因如下:
- ntpd & sntp 可以 cover ntpdate 的功能
- ntpd 和 ntpdate 原本共用相同的程式碼, 後來 ntpd 優化了裡面的演算法, 但 ntpdate 並沒有更新
ntpdate & ntpd 差異點如下:
- ntpdate 機制是 one-shot 同步, 若要定時同步需搭配 cron
- ntpd 是 daemon, 可自動定期將系統時間和 NTP server 更新
若要使用 ntpd 達到 ntpdate 的功能, 可使用 ntpd -q <server IP> 指令
若執行 ntpd daemon function, 可使用 ntpq -p 來確認目前時間同步的狀況, 其中包含 delay, offset, jitter 的相關資訊.
由於看到官方描述 ntpd 和 ntpdate 使用的演算法有所差異, 所以我在 x86 機器上量測了一下 ntpdate & ntpd 的時間同步速度.
下圖可以看到 ntpdate 花的時間比 ntpd 硬生生多了 5 秒!! 難怪官方會強力推薦使用 ntpd
其他 ntpd, ntpq 相關功能可以在 [2], [3] 查詢到.
最後, 比較有趣的是: Debian 上還是可以使用 ntpdate 套件 [6].
之前 Debian bug system 中有人提出要將 ntpdate 套件下架 [4], 但討論結論是跟著 upstream 走 – 若 upstream 移除 ntpdate, ntpdate package 才會被移除.
目前 ntp upstream 尚有保留 ntpdate 的程式, 最近也有 commit log, 只是比起其他程式, 明顯看的出來比較沒有在維護. [5]
除此之外, ntpd 也可以搭配 gpsd 來進行校時. 這篇文章有詳細說明.
ref:
[1] http://support.ntp.org/bin/view/Dev/DeprecatingNtpdate
[2] https://wiki.debian.org/NTP
[3] https://help.ubuntu.com/lts/serverguide/NTP.html
[4] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=514318
使用 ntpd 來替換 ntpdate 以完成校時的工作 有 “ 1 則迴響 ”