使用 w32tm /stripchart 來判斷兩個 Windows 主機的時間差異是否可行?發現兩個主機時間差異的更好方法?
使用
w32tm.exe
’ 選項stripchart
來判斷兩台主機的時間差異是否可行(在非常小的誤差範圍內)?請注意,w32tm.exe
的功能與服務本身stripchart
使用的算法是分開的。Windows Time
如果沒有,有哪些替代方法?
謝謝,
馬特
您的第一個問題的答案是“是的,w32tm.exe(Windows 時間)能夠在非常小的誤差範圍內(相對術語)測量兩個網路主機的時間差異。”
你的第二個問題的答案是“是的,有更好的方法來測量兩台主機之間的時間差異。微軟在這裡這麼說。他們將你指向NIST,它列出了一大堆其他軟體(和硬體)可能比 w32tm.exe 更好。我相信其中很多都是,因為 Microsoft 顯然不支持 w32tm.exe 作為超高精度工具。”
Windows 時間(和 w32tm.exe)符合 RFC 1305 (NTPv3),其中包括補償網路延遲。來源和來源。補償網路延遲是網路時間協議非常基本的功能之一。(參見 Marzullo 的算法,這是 NTPv3 使用的。)
你的問題讓我感到沮喪的是,高精度對你來說非常重要,但你沒有給出任何關於你需要什麼精確度的提示。1秒?1毫秒?1納秒?通用電腦的時鐘解析度與處理器接收到的時鐘中斷頻率有關,該頻率通常由執行在 32.768 KHz(2 的冪)的晶體振盪器控制,但它對溫度、電壓等敏感. 典型 Windows 機器上的 HAL 預設將實時時鐘配置為每 15.6 毫秒觸發一次,或大約每秒 64 次。但是,您仍然可以將 RTC 調低至 1 毫秒,還可以通過軟體將 15.6 毫秒的時間片細分為更小的片,用於高性能應用。不管,NTP 時間戳本身是一個 64 位無符號定點數,因此理論上的精度限制約為 232 皮秒,但 Windows 時間實現甚至沒有達到這一點。Windows 時間顯示的 NTP 精度為 -6,並且不支持一些最新最好的 NTP 算法,因此實際上它可能永遠不會可靠地產生比一個硬體時鐘滴答或正負 16 毫秒更嚴格的精度。
通用作業系統並不是特別好的時鐘,特別是如果計時算法是在執行執行緒不斷被搶占的使用者模式下實現的。高精度時鐘價格昂貴。
上圖是系統時鐘中斷的頻率。請注意,即使是時鐘中斷(32 位 Windows 上的 IRQL 28 和 64 位 Windows 上的 IRQL 13)也可以被更高的中斷(例如處理器間中斷)搶占,並且可能導致準確的時間記帳被推遲,即使是納秒。
所以回到NTP。
w32tm /stripchart /computer:10.0.1.8
是測試一台 Windows 機器與另一台機器之間的時間增量的一種完全有效的方法。它確實考慮了網路延遲,正如我們上面討論的那樣,它與 NTPv3 兼容暗示了這一點。但不要相信我的話。您可以在 Wireshark 跟踪中看到自己的事務(由 w32tm.exe 發送到 Windows NTP 伺服器的客戶端數據包):Microsoft 不保證使用 Windows 時間的亞秒級精度,因為他們不需要支持它以使其任何產品工作。但是,這並不意味著 w32tm.exe 仍然不能達到亞秒級的精度。
如果您確實需要比這更準確的時間,您可能會使用另一種使用稍微不同的算法的 NTP 實現來獲得額外的毫秒或 10 的精度。但如果你真的需要更準確的時間,我個人根本不建議使用 NTP。我會將銫鐘直接連接到您的機器上,而不是使用搶占式作業系統。
編輯 5/2/2017:上述資訊已過時,不一定適用於 Windows Server 2016 及更高版本。微軟在後來的作業系統中對 Windows 時間的準確性做了一些重大改進。