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


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

如果没有,有什么替代方法?

谢谢,

马特


5
2018-03-18 18:44






答案:


您的第一个问题的答案是“是的,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调低至1ms,您还可以通过软件将该15.6毫秒时间片细分为更小的片段,以实现高性能应用。无论如何,NTP时间戳本身是一个64位无符号定点数,因此理论上的限制大约为232皮秒的精度,但Windows时间实现甚至没有接近。 Windows时间显示的NTP精度为-6,并且不支持某些最新和最好的NTP算法,因此实际上它可能永远不会产生比一个硬件时钟滴答或正负16毫秒更精确的精度。

通用操作系统不是非常好的时钟,特别是如果在用户模式下实现时间保持算法,其中执行线程不断被抢占。高精度时钟很贵。

clockres

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

所以回到NTP。

w32tm /stripchart /computer:10.0.1.8 是测试一台Windows机器与另一台机器之间的时间差异的完美有效方法。它确实考虑了网络延迟,正如我们上面讨论的那样,它与NTPv3兼容。但是不要相信我的话。您可以在Wireshark跟踪(w32tm.exe发送到Windows NTP服务器的客户端数据包)中查看自己的事务:

Wireshark NTP

微软没有 保证 使用Windows Time的亚秒精度,因为他们不需要支持它以使他们的任何产品工作。但是,这并不意味着w32tm.exe仍然不具备亚秒精度。

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

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


5
2018-03-18 20:17



谢谢瑞恩。感谢您发布文章,我认为该文章的重点是如何 Windows Time 服务不准确 w32tm.exe  stripchart 功能本身。我试图找出它的可行性 stripchart 在两台针对现场NTP服务器的独立PC上。这是因为我正在使用从中输出时间戳的应用程序 now() (本地机器时间),我需要比较两台机器上输出的日志条目以进行漂移。也许 NTP 还有另一种测量漂移的类似工具。 - mbrownnyc
是吗? stripchart 功能如果 w32tm.exe 正确处理数据包延迟? - mbrownnyc
你在哪里看到一个明确的说法,说明了 w32tm.exe 工具的功能 stripchart 考虑延迟?我明白了 Windows Time 服务:“[传递信息]到时钟规则算法,该算法使用收集的信息来纠正计算机的本地时钟,同时补偿由于网络延迟和计算机时钟不准确引起的错误。”我跑了 stripchart 使用rohitab的API监视器监视API调用,看起来不像任何延迟测量;但我不知道。 - mbrownnyc
我正在编辑我的问题,以避免在评论中进行扩展讨论。 - Ryan Ries
谢谢瑞恩!你已经回答了我的问题,交叉引用了RFC和数据包中的时间数据(我将用它来查看我和w32tm.exe的条形图的输出之间是否存在偏移)[我将在完成测试后回复这些结果]。感谢您添加关于偏移的技术细节以及不专用于计时的芯片的时间保持能力的其他信息。我不是在这里测量原子碰撞,所以我们主要关注毫秒漂移(可能是微秒后)。简单地说,本地CPU利用率对我们来说是最大的漂移。 - mbrownnyc


我找不到是否 w32tm.exestripchart 帐户(或帐户如何帐户)的延迟和抖动。相反,我找到了 ntp邮件列表中的一个帖子 那 指导用户 另外三个测量延迟和抖动的解决方案:


0