使用w32tm.exe
的选项stripchart
来判断两个主机的时间差异是否可行(在很小的误差范围内)?请注意,w32tm.exe
的功能与服务本身stripchart
使用的算法是分开的。Windows Time
如果没有,有哪些替代方法?
谢谢,
马特
使用w32tm.exe
的选项stripchart
来判断两个主机的时间差异是否可行(在很小的误差范围内)?请注意,w32tm.exe
的功能与服务本身stripchart
使用的算法是分开的。Windows Time
如果没有,有哪些替代方法?
谢谢,
马特
您的第一个问题的答案是“是的,w32tm.exe(Windows 时间)能够在非常小的误差范围内(相对术语)测量两个网络主机的时间差异。”
你的第二个问题的答案是“是的,有更好的方法来测量两台主机之间的时间差异。微软在这里这么说。他们将你指向NIST,它列出了一大堆其他软件(和硬件)是可能比 w32tm.exe 更好。我敢肯定其中有很多,因为 Microsoft 显然不支持将 w32tm.exe 作为超高精度工具。”
Windows Time(和 w32tm.exe)符合 RFC 1305 (NTPv3),其中包括网络延迟补偿。来源和来源。补偿网络延迟是网络时间协议的最基本特征之一。(请参阅 NTPv3 使用的 Marzullo 算法。)
让我对你的问题感到沮丧的是,高精度对你来说非常重要,但你没有给出任何关于你需要什么精确度的提示。1秒?1毫秒?1纳秒?通用计算机的时钟分辨率受处理器接收的时钟中断频率的限制,处理器通常由运行频率为 32.768 KHz(2 的幂)的晶体振荡器控制,但对温度、电压等敏感. 典型 Windows 机器上的 HAL 默认将实时时钟配置为每 15.6 毫秒触发一次,或每秒约 64 次。但是,您仍然可以将 RTC 调低至 1 毫秒,并且您还可以通过软件将 15.6 毫秒的时间片细分为更小的时间片,以用于高性能应用程序。不管,NTP 时间戳本身是一个 64 位无符号定点数,因此具有大约 232 皮秒精度的理论限制,但 Windows Time 实现甚至没有接近这一点。Windows Time 显示的 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 及更高版本。在后来的操作系统中,Microsoft 对 Windows 时间的准确性进行了一些重大改进。
我无法找到 是否考虑(或如何解释)延迟和抖动
w32tm.exe
。stripchart
相反,我在 ntp 邮件列表上找到了一个线程,该线程将用户引导到三个额外的解决方案来测量延迟和抖动: