Windows 中的逐步时间同步

Windows 中的逐步时间同步

我有一个第三方应用程序,如果检测到超时情况,它将无法正常工作。出于某种原因,我的计算机时钟似乎每天会慢大约 90 秒,因此当 Windows 进行每日 NTP 同步时,我会得到Event ID 50: Time Service detected a time difference of greater than 5000 milliseconds for 900 seconds。当发生这种情况时,时钟会改变一分钟以上,这有时足以破坏我的应用程序(在定期执行周期的某些特定时刻,超过 60 秒的变化将触发超时)。

我发现 HKLM\SYSYTM\CurrentControlSet\Services\W32Time\TimeProvider\NtpClient 中有一个名为 SpecialPollInterval 的注册表设置,它可以强制更频繁地同步时间,我希望这可以解决我的问题。(仍在测试过程中)。但是,我想知道是否有任何方法可以使时间同步更加渐进。例如,如果时钟注意到它落后了 90 秒,它是否可以每分钟增加 1 秒,以便在 90 分钟后重新同步,或者更好的是,它是否可以意识到(重新同步后)它慢了大约 0.1%,因此每个硬件秒都会发生 1.01 个真实秒,这样它就再也不需要时间跳跃了?

更新:我认为事件 ID 50 是因为时钟偏差了 5 秒多,但是我开始相信事实并非如此,也许 5 秒是指进行网络传输所需的时间,或者可能是远程时间服务器(在本例中是某个地方的公司计算机)的时钟发生了变化。

更新#2:看起来这里给出了有关 Windows 时间服务如何工作的参考:https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/windows-time-service-tools-and-settings

我认为 5000 毫秒实际上是 LargePhaseOffset ,其描述如下:

指定在 10-7 秒内大于或等于此值的时间偏移量被视为峰值。网络中断(例如大量流量)可能会导致峰值。除非峰值持续很长时间,否则将忽略该峰值。域成员的默认值为 50000000。独立客户端和服务器上的默认值为 50000000。

(注意 50000000 * 10e-7 秒 = 5 秒 = 5000 毫秒)

900 秒必须是 SpikeWatchPeriod,其描述如下:

指定可疑偏移量在被接受为正确偏移量之前必须持续的时间(以秒为单位)。域成员的默认值为 900。独立客户端和工作站的默认值为 900。

答案1

SpecialPollInterval以秒为单位,因此每 10 分钟同步一次需要十进制 600 或十六进制 258 的值。它本身是不够的,因此还需要SpecialInterval通过非零值来启用。

将以下文本粘贴到.reg文件中并双击执行:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient]
"SpecialPollInterval"=dword:00000258
"SpecialInterval"=dword:00000001

重新启动才能生效。

相关内容