使用 w32tm /stripchart 来判断两个 Windows 主机彼此的时间差异是否可行?发现两个主机时间差异的更好方法?

mbr*_*nyc 6 ntp time w32time

使用w32tm.exe的选项stripchart来判断两台主机的时间差异是否可行(在很小的误差范围内)?请注意,w32tm.exestripchart功能与Windows Time服务本身使用的算法是分开的。

如果没有,有哪些替代方法?

谢谢,

马特

Rya*_*ies 6

第一个问题的答案是“是的,w32tm.exe(Windows 时间)能够在非常小的误差范围内(相对术语)测量两个网络主机的时间差异。”

你的第二个问题的答案是“是的,有更好的方法来测量两个主机之间的时间差异。微软在这里就这么说。他们把你指向NIST,它列出了一大堆其他软件(和硬件)可能比 w32tm.exe 更好。我相信其中很多都是,因为微软显然不支持 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 is a perfectly valid way to test the time delta between one Windows machine and another. It does account for network latency, which is implied by it being NTPv3 compliant as we discussed above. But don't take my word for it. You can see the transaction for yourself in a Wireshark trace (client packet sent by w32tm.exe to a Windows NTP server):

Wireshark NTP

Microsoft does not guarantee sub-second accuracies using Windows Time, because they do not need to support that in order for any of their products to work. However, that does not mean that w32tm.exe is not still capable of sub-second accuracy.

如果您确实需要比这更准确的时间,您可以使用另一种使用略有不同算法的 NTP 实现来获得额外的毫秒或 10 的精度。但如果你真的需要更准确的时间,我个人根本不建议使用 NTP。我会将铯钟直接连接到您的机器上,而不是使用抢占式操作系统。

2017年 5 月 2 日编辑:以上信息已过时,不一定适用于 Windows Server 2016 及更高版本。Microsoft 对后来的操作系统中 Windows 时间的准确性进行了一些重大改进。