关于套接字:在机器之间将时间同步到毫秒精度和精度的最佳方法是什么?

关于套接字:在机器之间将时间同步到毫秒精度和精度的最佳方法是什么?

What's the best way to synchronize times to millisecond accuracy AND precision between machines?

据我了解,PC的晶体因时钟偏斜而臭名昭著。 如果时钟总是歪斜,那么以毫秒为单位的精度和精度在机器之间同步时钟的最佳方法是什么? 根据我的发现,NTP和PTP是可能的解决方案,但是我想知道是否有人在stackoverflow.com上有任何经验!

我知道NTP是最受欢迎的选择,但我想知道是否有人对PTP(IEEE1588)有任何经验


只需运行标准的NTP守护程序。

它确实具有从多个GPS设备获取输入以及与网络服务器对话的选项。

编辑:我指的是http://www.ntp.org/,而不是Windows附带的那个。

对于什么NTP客户端最适合Windows,我没有任何建议,但是对于Unix计算机,没有真正的理由不运行NTP。


这是一些已有15年历史的软件,可以同步到百分之一毫秒以内。 (当NTP对于我们的实验室来说还不够好时,我的团队写了它。)

会议论文摘要中提到:"用于联网商用PC的分布式时钟。该时钟无需额外的硬件,即可将来自多台PC的传感器数据与延迟和抖动相关联,平均延迟为10微秒,最坏情况为100微秒。"

源代码:https://github.com/camilleg/clockkit
(直到2020年2月13日,它位于http://zx81.isl.uiuc.edu/clockkit/,现已离线。)


您无法通过交换数据将计算机同步到毫秒级,因为任何数据交换本身已经花费了至少毫秒的时间,因此破坏了您的结果!甚至尝试先测量数据传输需要多长时间然后发送时间信息(考虑到所测量的延迟)的协议也比平均值好一点,但是它们仍然不好,因为并不是每个数据传输都花费相同的时间(只需不断地对Internet上的服务器执行ping操作,然后查看每次ping操作都有不同的延迟)。

真正同步毫秒级范围内的两台计算机的唯一方法是,使它们都通过无未知或不断变化的延迟的传输方法从同一源获取时间。例如。如果两个都接收到卫星信号,则广播时间。信号将始终具有恒定的延迟(从卫星到地球),并且它们几乎都在同一纳秒内接收到该信号。

例如,德国有无线电时间。在该国的某个地方是原子钟(其正确的时间可以达到纳秒级的数百年),并且某些发送方以给定的频率在全国范围内永久广播当前时间。存在可以接收该时间并与之永久同步的闹钟,甚至手表,(不是真正永久性的,大多数型号每24小时才这样做一次,以节省电池运行时间)。此类接收器设备也存在于计算机中,并附带可以使您的计算机时钟与该时间信号永久同步的软件。

据我所知,GPS还发送时间信息(或者可以通过GPS信息以某种方式计算时间,我不太熟悉GPS协议)。因此,将GPS接收器连接到两台计算机上也可以使它们同步到毫秒。但是,如果您的同步是通过Internet完成的,那么不要比一台最多关闭20毫秒的计算机更好。

要更新评论者,
NTP不如人们喜欢在这里声称的那么准确:

NTP can usually maintain time to within tens of milliseconds over the
public Internet, and can achieve better than one millisecond accuracy
in local area networks under ideal conditions.

资料来源:维基百科

我宁愿保持它们之间的同步而不涉及任何网络,更要保持它们与官方GMT时间保持同步,在这里GPS可能是在所有机器上获得真正准确结果的唯一方法(而且不仅限于毫秒,实际上到微秒)。


我在公司的整个网络中都使用NTP,并且效果很好。关键是在本地网络上拥有一台权威服务器,并使网络上的每台计算机都与其同步。最好是在该服务器上安装一个无线电时钟。 NTP之所以出色,是因为它不仅可以不时地校正时钟,还可以计算并校正时钟频率,从而使其更加准确。

一旦我在网络上设置了NTP,就可以像打开五个VNC会话一样打开另一台服务器,坐在那里观看时钟。所有服务器上的时钟都以毫秒为单位同步,这是在设置后立即进行的。它运行时变得更加准确。


我最近对此主题进行了研究(已读过Googled),这是到目前为止我学到的东西:

  • 为了获得毫秒精度(或更高),您需要硬件支持。 PTP中的GPS源或硬件时间戳(以及良好的时间源)。

  • PTP中的硬件时间戳是通过受支持的NIC完成的-英特尔拥有它们。

  • 没有硬件时间戳,NTP和PTP之间的准确性是相似的。

  • (以前未使用过PTP)我读到NTP更容易设置。

  • 我对GPS时间源(通过串行方式)的有限经验会有所不同。 如果您可以使用它,它将很好用,但是数据中心中有一种我从未设法使其运行的设备...

  • 如果您的机器处于可乐状态,请询问您的DC他们可以提供什么-因此您不必决定。 :D

高温超导


基于NTP或SNTP的解决方案可以很好地工作,但是在很大程度上取决于客户端的实现方式。

当然,如果您想获得亚秒精度,则此问题的答案是不使用默认的Windows时间服务。众所周知,它很难在机器上保持稳定的时基,并且通常会超出校正范围,甚至不稳定,尤其是在机器开始时的时基非常不准确的情况下(这很常见)。假设Window的工具内置的标准可以在所有机器之间可靠地保持准确度,通常只有几秒钟,而且我通常会看到机器之间的波动幅度高达30秒-即使您调整了注册表设置。

免费软件工具Achron是一个不错的解决方案,可以降低到正负500毫秒的范围。要做到这一点,需要更多的工业强度解决方案,例如Greyware的解决方案


还请记住,仅在计算机启动时才读取硬件系统时钟(即不准确的时钟)-如果您在谈论服务器计算机,则不会因为它们而浪费时间。


正如您已经建议的那样,NTP是解决此问题的行业标准解决方案,但它要么需要Internet连接,要么需要第0层数据源(精确的硬件时钟,例如带有计算机接口的GPS接收器)。

如果使用Internet连接,请考虑使用NTP池。


NTP绝对是必经之路。只要您让它离开本地主机上的防火墙(通常是防火墙或路由器计算机),基本上就是一劳永逸。


推荐阅读