如何准确测量两台Linux机器之间的时间差?我听说“Ping”会根据操作系统的影响给出 RTT,因此精度不达纳秒级?如果是这样,那么在基于 Linux 的系统或 Raspi 中,还有什么可以测量两台机器之间的时间差(偏移量)?
答案1
这是我尝试如何在没有参考时钟的情况下测量时钟的准确性。
我选择了一个服务器 - 并说这是我的参考 - 我做了一些相当小的努力来减少或测量“参考时钟”的变化 - 这些变化最终是为了使其成为一个参考时钟并记录抖动。
然后,我测量了所有其他时钟与我指定的参考时钟的偏移,我使用 NTP 来执行此操作,因为它试图修复数据包穿过网络的时间测量误差,并且我相信,修复了由于两端的处理时间而导致的误差。
我可能应该对所有偏移进行最小二乘分析,或者甚至看看参考被校正了多少,或者它运行的频率 - 相反,我只是绘制了它的图表,你可能想改进它
因此,我在 Linux 机器(以及 Windows、路由器)上安装了多个 NTP 守护进程,它们都同步到相同或不同的时间源,我想看看错误是什么
为了测量差异,我有一个额外的盒子,里面有一个 NTP 守护进程,它被设置为查询其他每个盒子,但从不选择它们作为时间源。我还将它设置为记录统计信息,因此它会定期将自身与每个服务器的偏移量记录下来
我选择了一个 NTP 服务器作为该服务器的实际 NTP 服务器时钟源,以稳定其时钟频率
这生成的图表至少向我展示了 Windows 在计时方面非常差,而另一台服务器确实规范了时钟并且随着时间的推移变得更加稳定。
除了窗口之外,这只能精确到几十毫秒,窗口的差异为 200 毫秒
我的监控机上的 NTP 配置文件如下
restrict default noquery nopeer nomodify notrap
restrict -6 default noquery nopeer nomodify notrap
restrict 127.0.0.1
restrict -6 ::1
driftfile "C:\Program Files (x86)\NTP\etc\ntp.drift"
server time.windows.com
enable stats
statsdir "C:\Program Files (x86)\NTP\etc\"
statistics loopstats peerstats
server 1.2.3.4 noselect minpoll 6 maxpoll 6
server 1.2.3.5 noselect minpoll 6 maxpoll 6
server 1.2.3.6 noselect minpoll 6 maxpoll 6
然后我最终在 C:\Program Files (x86)\NTP\etc\ 中得到了每日的“peerstats”文件,其中包含服务器和与本地机器的偏移量 - 然后我将其插入到 SQL 和图形中
答案2
延迟将根据链路特性而有所不同 - 例如,更高的延迟可能由高度利用的链路造成。
我认为可以定期进行 ping 并将其导出/系统日志到可以为您绘制当前延迟以及过去值的系统。