我有一台 Linux 服务器,其时间与附近的基于 GPS 的 NTP 设备同步。从服务器到设备的 ping 时间约为 1ms,抖动非常低:
--- xxxx ping 统计 --- 已发送 100 个数据包,已接收 100 个数据包,0% 数据包丢失,耗时 99001 毫秒 rtt 最小值/平均值/最大值/mdev = 0.874/0.957/1.052/0.051 毫秒
但是,NTP 客户端估计时间同步的准确度约为 5-6 毫秒,考虑到设置,这个精度似乎非常高:
已与 NTP 服务器 (xxxx) 同步至第 2 层 时间正确至之内5 毫秒 每 16 秒轮询一次服务器
ntpq -p 给出以下内容:
远程重新识别 st t 轮询到达延迟偏移抖动 ============================================================================== *xxxx .PPS. 1u 10 16 377 0.964 -0.019 0.036
两个问题:
- 什么原因导致 NTP 客户端对同步准确性的信心如此之低?
- 有什么方法可以测量同步的实际精度,精确到毫秒?
答案1
“时间校正到之内”之后显示的值为ntpstat
根色散+根延迟/2。而ntpq -p
不是显示“根色散”运行ntpq -c rl
。
尽管如此,很明显准确性不足的主要原因是分散而不是延迟(仅为 0.964)。
色散是“相对于主要参考源的标称误差”。我简要浏览了 NTPv4 RFC,它是这样说的:
离散度 (epsilon) 表示测量中固有的最大误差。它以等于最大规范系统时钟频率容差 (PHI) 的速率增加,通常为 15 PPM。1 PPM 等于 10^(-6) 秒/秒。
用 rrdtool 术语来说,分散度不是一个量规,而是一个计数器。看到较大的值可能并不表示有什么问题。
唉,我不太了解 ntp 算法,不知道如何让这个数字变小。我注意到这个值偶尔会被重置。我不知道为什么。
答案2
我之所以询问上述硬件,是因为许多 GPS 设备(层 0,“根”源)通过串行链路连接到计算机,然后计算机充当 NTP 服务器。
由于信号开销/中断等待,串行连接通常会在线路上出现 1-5ms 的抖动。因此,我猜您的 NTP 源正在从串行源读取。
您可以对串行连接进行一些调整以减少抖动。首先,禁用 FIFO 可能会获得不错的结果。
http://support.ntp.org/bin/view/Support/KnownHardwareIssues#Section_9.1.5。 http://www.febo.com/time-freq/ntp/jitter/index.html
答案3
5 毫秒内的时间准确度非常好!!!5 毫秒是 5/1000 秒。除了少数情况外,100 毫秒以下的任何时间都很容易接受,在少数情况下,您不会使用 GPS,而是使用本地原子钟和两个外部参考时钟。我们使用 ntp 池将时间准确度控制在 10 毫秒内。