我已设置 ntpd(Windows 7 客户端上的 Meinberg ntp-4.2.6p5@london 版 Windows 版),并选择了一组附近的服务器,以获得较低的 ping 时间(通常为 10-20ms ping)。然而,我的时钟似乎只能精确到 100ms 或更短,而且随着时间的推移并没有变得更好。我原本以为它可以得到很多更多的比 ping 时间更精确,这令人失望。如何让它更好地工作?
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
+pool-test.ntp.o 216.218.254.202 2 u 259 1024 17 12.920 -106.39 111.972
+palpatine.steve 208.201.242.2 3 u 239 1024 17 16.959 -102.84 112.056
+grom.polpo.org 127.67.113.92 2 u 259 1024 17 17.362 -184.43 74.468
+paladin.latt.ne 204.123.2.72 2 u 378 1024 3 24.211 -106.97 61.825
+public-ntp1.iso 204.13.164.164 3 u 259 1024 17 33.080 -100.17 65.970
+nist1.symmetric .ACTS. 1 u 214 1024 17 17.548 -108.30 111.951
*nist1-sj.ustimi .ACTS. 1 u 245 1024 17 21.826 -111.02 63.313
抖动和偏移量怎么会比延迟大这么多?ping 时间为 12 毫秒,而偏移量却有 100 毫秒,这看起来太荒谬了,我理解错了吗?
事实上,我不确定 ntp 是否会改变我的时钟 - 它似乎得到有时间但不一定放什么都没有。我该如何检查?
更多信息:
ntpdc> sysinfo
system peer: nist1-sj.ustiming.org
system peer mode: client
leap indicator: 00
stratum: 2
precision: -11
root distance: 0.02182 s
root dispersion: 0.15431 s
reference ID: [216.171.124.36]
reference time: d4dae2b5.3c32ce54 Fri, Mar 1 2013 0:17:57.235
system flags: auth monitor ntp kernel stats
jitter: 0.045776 s
stability: 0.000 ppm
broadcastdelay: 0.000000 s
authdelay: 0.000000 s
more "c:\Program Files (x86)\NTP\etc\ntp.drift"
192.049
more "c:\Program Files (x86)\NTP\etc\ntp.conf"
driftfile "C:\Program Files (x86)\NTP\etc\ntp.drift"
server nist1.symmetricom.com iburst
server nist1-sj.ustiming.org iburst
server 149.20.68.17 iburst
server 173.230.144.109 iburst
server 65.19.178.219 iburst
server 204.2.134.162 iburst
server 173.230.144.109 iburst
server 207.115.64.229 iburst
理想情况下,我希望时间与配置服务器的中值之间的差值不超过 50ms,如果差值过大,我希望它能够逐步增加。是否有任何配置选项可以设置,让 ntp 做到这一点?
答案1
抖动(旧版 NTP 中也称为分散)会随时间发生很大变化。特别是当您与 NTP 服务器之间的连接拥塞时。您需要频繁运行“ntpq -p”(大约每“轮询”秒一次)来监控抖动,或者打开性能文件(ntp.conf 文件中的“statsdir”和“statistics”行)。
http://www.ntp.org/ntpfaq/NTP-s-sw-clocks-quality.htm http://www.ntp.org/ntpfaq/NTP-s-trouble.htm
理想情况下,我希望时间与配置服务器的中值之间的差值不超过 50ms,如果差值过大,我希望它能够逐步增加。是否有任何配置选项可以设置,让 ntp 做到这一点?
NTP 并非如此。它从列表中挑选一台服务器,在“ntpq -p”输出的第一列中用“*”(星号,又称参考时间源)标记它,并尝试跟踪它。如果参考时间源无法访问,它将回退到跟踪“+”(合格候选)服务器之一。
我建议:
- 没有在每一台服务器上使用 iburst
- 选择最佳服务器,在该服务器上使用 iburst 并将其标记为首选,即“server tick.example.com iburst prefer”。
- 仅手工挑选 3 个距离较近的服务器。
- 其余部分更多地使用区域池 DNS 名称(例如 [0-3].us.poo.ntp.org)。
- 总共至少要有 4 个参考服务器,但不要超过 9 个。
- 切勿配置“服务器 127.127.1.0”(又名本地时钟)或“fudge”行。
默认情况下,“slew”与“step”的选择是 128ms。如果时间偏移 > 128ms,它将步进而不是slew。请参阅“ntpd”的“-x”参数(除非您的软件在时钟步进时会失灵,否则永远不要使用)。
除了“ntpq -p”之外,您可能还想查看“ntpdc -c loopinfo”。
答案2
NTP 的设计目标是在几乎所有网络上获得 1 秒内的准确时间。因此,在这方面 100 毫秒是正常运行的。在当今的实际使用中,NTP 通常可以在几乎所有硬件上将时间保持在 20 毫秒以内,在具有稳定 RTC 的硬件上将时间保持在 5-10 毫秒以内。
如果您的服务器持续偏离一致的数字(与对等服务器相比),那么它的 RTC 可能存在很大的抖动。NTP 可以通过不断敲打对等服务器以不断获得“正确”时间来弥补这一点。但是,我们不建议这样做,而且这对您与之对等的服务器来说也不是很礼貌。
NTP 不会“设置”时钟(默认情况下)。它会“调整”时钟,使其运行得更快或更慢,直到时钟达到目标时间。然后重新调整调整率以补偿“漂移”(NTP 计算出的 RTC 与对等点相比快或慢的量)。
此外,我同意 tgharold 的答案中的所有建议。