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

使用w32tm.exe的选项stripchart来判断两个主机的时间变化是否可行(在很小的误差范围内)? 请注意, w32tm.exestripchartfunction与Windows Time服务本身使用的algorithm是分开的。

如果不是,有什么替代方法?

谢谢,

马特

您的第一个问题的答案是“是的,w32tm.exe(Windows时间)能够在非常小的误差范围(相对项)内测量两个networking主机的时间变化”

第二个问题的答案是“是的,有更好的方法来衡量两个主机之间的时间差异,微软这样说,他们指向你NIST ,它列出了一大堆其他软件(和硬件)可能比w32tm.exe更好,我相信其中很多都是,因为微软显然不支持w32tm.exe作为超高精度的工具。

Windows时间(和w32tm.exe)符合RFC 1305(NTPv3),其中包括补偿networking延迟。 来源和来源 。 补偿networking延迟是networking时间协议的基本特征之一。 (请参阅Marzullo的algorithm,这是NTPv3使用的algorithm。)

让我感到挫折的是你的问题是高精度对你来说非常重要,但是对于你需要的确切精度,你并没有提供任何提示。 1秒? 1毫秒? 1纳秒? 通用计算机的时钟分辨率必须与处理器接收的时钟中断频率相关,而处理器通常由运行频率为32.768 KHz(2的幂)的晶体振荡器控制,但对温度,电压等敏感。典型的Windows机器上的HAL默认configuration实时时钟每15.6毫秒或大约每秒64次触发。 但是,您仍然可以将RTC降低到1ms,并且您还可以通过软件将该15.6毫秒的时间片细分为更小的片以用于高性能应用。 无论如何,NTP时间戳本身是一个64位无符号定点数,所以理论极限约为232皮秒的精度,但Windows时间实现甚至没有达到这个目的。 Windows时间显示的NTP精度为-6,不支持一些最新和最好的NTPalgorithm,因此实际上它可能不会产生比一个硬件时钟节拍精确得多的精确度,或者是正负16毫秒。

通用操作系统并不是特别好的时钟,特别是如果时间保持algorithm是在用户模式下执行的,那么执行线程会不断被抢占。 高度精确的时钟是昂贵的。

clockres

上图是系统时钟中断的频率。 请注意,即使是时钟中断(32位Windows上的IRQL 28和64位Windows上的IRQL 13)也可以被更高的中断(例如处理器间中断)抢占,并且可能导致准确的时间记帐被延迟纳秒。

所以回到NTP。

w32tm /stripchart /computer:10.0.1.8是testing一台Windows机器与另一台Windows机器之间时间差异的完美方法。 它确实解释了networking延迟,正如我们上面讨论的那样,这是由NTPv3兼容所隐含的。 但不要听我的话。 您可以在Wireshark跟踪(由w32tm.exe发送到Windows NTP服务器的客户端数据包)中查看自己的事务:

Wireshark NTP

微软不保证使用Windows时间的亚秒级精度,因为他们不需要为了他们的任何产品而工作。 但是,这并不意味着w32tm.exe仍不具备亚秒级的准确性。

如果你真的需要比这更精确的时间,你可能需要额外的毫秒或10的精度与另一个NTP的实现,使用稍微不同的algorithm。 但如果你真的需要更准确的时间,我个人不会build议NTP。 我会直接把一个铯钟连接到你的机器,而不是使用抢先式的操作系统。

编辑5/2/2017 :上述信息已过时,不一定适用于Windows Server 2016及更高版本。 在以后的操作系统中,Microsoft已经对Windows Time的准确性做了一些严重的改进。

我无法findw32tm.exestripchart帐户(或如何帐户)的延迟和抖动。 相反,我在ntp邮件列表上find一个线索 , 指导用户使用另外三个解决延迟和抖动问题的解决scheme:

  • satsignal的NTP监视器 (由于轮询时间不合格,不less于60秒)
  • satsignal的NTP绘图仪 (从ntpd绘制历史loopstats文件)
  • meinberg的NTP时间服务器监视器 (需要本地ntpd服务)