Ntp

本地網路上的 Ntpd - 防止時鐘漂移導致高偏移

  • March 5, 2019

我有一個帶有微控制器 ARM 作為 NTP 伺服器的本地網路,我有一台執行 ubuntu 16.04 LTS 作為 NTP 客戶端的台式電腦。

一旦我從ntpd -g -c /etc/ntp.conf以下 ntp 配置文件開始

server 192.168.0.11 minpoll 4 maxpoll 4

ntpd 設置時間後的第一個偏移量顯示了非常好的結果,即低於 1ms。我得到偏移值ntpq -p

然而,偏移量在大約 55ms 後緩慢上升。1000 秒。這種高偏移量對我的應用程序來說是不可接受的。但在偏移量達到 55 毫秒後,ntpd似乎再次設置時間,並且偏移量變得足夠小且穩定(< 1ms)。似乎ntpd讓時鐘漂移了一段時間,在(太)長的一段時間後,守護程序對 NTP 客戶端和 NTP 伺服器之間的時鐘漂移採取對策。

使用ntpd -g -c /etc/ntp.conf -f /etc/ntp.driftwhere ntp.driftwas generated by ntpd,偏移量將始終保持在 1ms 以下,即時鐘漂移不會導致偏移量線性上升;期望的行為。

現在到我的問題:在我的應用程序中,我們不能讓ntpd執行一段時間來計算長時間後的時鐘漂移,同步必須在啟動 NTP 客戶端幾秒鐘後進行,並且偏移量必須保持不變穩定的。

ntpd在不確切知道時鐘漂移的情況下,如何獲得穩定且小的偏移量?

Adriftfile記錄本地時鐘的頻率,並且必須準確地對其進行管理是一件好事。Ubuntu預設/etc/ntp.conf 有一個driftfile

附加iburst到伺服器線路會在初始同步時快速發送一些數據包。推薦,特別是如果您不想為前幾個數據包等待幾分鐘。

初始化腳本可以延遲啟動應用程序,直到 NTP 同步。ntp-wait通過對systemd 單元的依賴來執行此操作。或者ntpwait直接寫腳本。

您報告的偏移量增長然後自我糾正聽起來像是 ntpd 越過了其步長門檻值,然後設置時間而不是調整時間。

您的 NTP 伺服器的時鐘時間與現實世界的 UTC 時間之間缺乏關係可能是您問題的根源。如果您的 NTP 伺服器沒有多個真實世界的源(無論它們是在 Internet 上還是在您的本地網路上的 GPS、PPS 或原子源),那麼它將無法確定其頻率錯誤自己的時鐘,因此將無法有效地訓練其時鐘。

您可以通過打開伺服器和客戶端上的統計資訊記錄來確定這個理論是否正確,如下所示:

statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

然後將您的統計文件和配置發佈到 pastebin 或類似站點,我們可以根據您看到的行為對其進行分析。

引用自:https://serverfault.com/questions/936376