【问题标题】:What's the best way to synchronize times to millisecond accuracy AND precision between machines?将时间与机器之间的毫秒精度和精度同步的最佳方法是什么?
【发布时间】:2010-09-11 00:04:18
【问题描述】:

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

我知道 NTP 是流行的选择,但我想知道是否有人对 PTP (IEEE1588) 有任何经验

【问题讨论】:

    标签: sockets synchronization gps time-management


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      这里有一些 15 年前的软件,可以在 百分之一 毫秒内同步。 (当 NTP 对我们的实验室来说不够好时,我的团队编写了它。)

      来自会议论文的abstract:“用于联网商品 PC 的分布式时钟。在没有额外硬件的情况下,该时钟将来自多台 PC 的传感器数据与平均延迟和抖动相关联,延迟和抖动低于 10 微秒,最坏情况下为 100 微秒。”

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

      【讨论】:

      • 我真的很想关注这些链接,但 zx81.isl.uiuc.edu 链接已失效,因此指向 zx81.isl.uiuc.edu/camilleg/dsceu04.pdf 的 Academic.google.com 链接也已失效:(
      • @gazarsgo 试试这个:webcache.googleusercontent.com/…
      • Neato,@AddingColor,即使图表在转换为 HTML 后无法幸免。无论如何,zx81 的链接已经保持了几年。
      • @CamilleGoudeseune 这可以在开放的互联网上使用吗?如果有,准确度如何? (微/纳秒)
      • @CamilleGoudeseune 如何与常见的 c++ 链接,因为我使用 apt(ubuntu 16)安装了 libcommoncpp2-dev 并正常导入了标头,但链接不起作用:未定义对 `ost::IPV4Address:: 的引用~IPV4Address()'
      【解决方案3】:

      您无法通过交换数据将机器同步到毫秒级别,因为任何数据交换本身已经至少需要毫秒才能发生,因此会破坏您的结果!即使是尝试首先测量数据传输需要多长时间然后发送时间信息(考虑到测量的延迟)的协议也比平均水平好一点,但它们仍然不好,因为并非每次数据传输都需要相同的时间(只是不断地 ping 互联网上的服务器,看看每次 ping 有不同的延迟)。

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

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

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

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

      NTP 通常可以将时间保持在在几十毫秒内 公共互联网,并且可以达到优于一毫秒的精度 在理想条件下的局域网中。

      来源:Wikipedia

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

      【讨论】:

      • 虽然这个答案指出了良好协议的一些挑战,但结论是完全错误的。使用 NTP,您可以轻松地将本地 LAN 上的机器控制在亚毫秒级精度。即使在 Internet 上,您也可以期望使用 NTP 将时间保持在 10 毫秒范围内
      • NTP(协议)能够并且可以轻松地在同一 LAN 上的机器之间保持优于 1 毫秒的精度。我投了你一票,因为你描述的不准确。
      • Mecki,您引用了一个自相矛盾的链接,因为它说“有几篇关于 NTP 准确性的文章。其中最好的似乎是 Dave Mills(NTP 的主要调查员)的一篇。NTP v4 带有内核模块来支持它,能够比 1ms 精度好得多,可能和 1ns 一样好。”我认为要走的路是 xsaero00 所说的,那个权威服务器有一个 GPS 同步卡......
      • “根据他的文章,NTP v3 在 LAN 中精确到 1-2ms,在 WAN 网络中精确到 10s。”说到米尔斯的文章。对我来说听起来不比 1ms 好。为了获得更好的引用结果,您需要“带有内核模块的 NTP v4 来支持它”。除非链接的文章没有正确总结米尔斯的文章。
      • 您似乎假设它是 WAN 用例。但是问题并没有说-只是“机器之间”,我认为这很可能在局域网内。所以在我看来,1-2ms 很可能在“毫秒”精度内(我不认为要求在毫秒内准确)
      【解决方案4】:

      我在公司的整个网络中都使用 NTP,它运行良好。关键是在本地网络上有一个权威服务器,并让网络上的每台机器都与之同步。最好的办法是在该服务器上安装一个无线电时钟。 NTP 很棒,因为它不仅偶尔校正时钟,而且实际上计算和校正时钟频率,使其更准确。

      一旦我在网络上设置了 NTP,我就打开了五个 VNC 会话到不同的服务器并坐在那里看时钟。所有服务器上的时钟都与毫秒同步,这是在设置之后。它会随着运行而变得更加准确。

      【讨论】:

        【解决方案5】:

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

        当然,这个问题的答案是如果您想要亚秒级精度,则使用默认的 Windows 时间服务。众所周知,它在机器上保持稳定的时基方面很差,并且通常会超调校正,甚至几乎是不稳定的,尤其是当机器开始时的时基相当不准确时——这很常见。假设 Window 工具中内置的标准可以在所有机器之间可靠地保持准确度,通常只有几秒钟,我通常看到机器之间的波动高达 30 秒 - 即使您调整注册表设置。

        免费软件工具Achron 是一个很好的解决方案,可以降低到正负 500 毫秒的范围。做得更好将需要更工业化的解决方案,例如来自Greyware

        【讨论】:

        • 相对于良好的时间来源,NTP 池是一个很好的起点。见 www.pool.ntp.org
        • NTP 不精确到毫秒,您没有遵循提问者的限制。
        • NTP(协议)完全能够将 LAN 上的机器之间的精度保持在 1 毫秒以上。
        • 我在windows下寻找好的NTP解决方案时使用:meinberg.de/english/sw/ntp.htm
        【解决方案6】:

        我最近对这个主题进行了研究(在 Google 上搜索),这是我迄今为止所学到的:

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

        • PTP 中的硬件时间戳是使用受支持的 NIC 完成的 - Intel 拥有它们。

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

        • (以前没有使用过 PTP)我听说 NTP 更容易设置。

        • 我对 GPS 时间源(通过串行)的有限经验各不相同。如果你能让它工作,那就太好了,但是我们在数据中心有一个设备,我从来没有设法让它工作......

        • 如果您的机器在科罗拉多州,请询问您的 DC 他们可以提供什么 - 这样您就不必做出决定。 :D

        HTH

        【讨论】:

          【解决方案7】:

          NTP 绝对是要走的路。基本上一劳永逸,只要你让它离开本地主机(通常是防火墙或路由器机器)上的防火墙。

          【讨论】:

            【解决方案8】:

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

            如果您使用 Internet 连接,请考虑使用 NTP Pool

            【讨论】:

              【解决方案9】:

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

              【讨论】:

              • 你确定吗?请您添加一些证明或解释吗?谢谢。
              • 我没有具体的参考资料,但我相信关于阅读一次的说法是正确的。虽然,在许多机器上,软件实时时钟可能比硬件时钟的时基更不精确。因此需要外部(比如 NTP)源。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-09-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多