在机器之间同步时间与毫秒精度和精度的最佳方法是什么?

时间:2008-09-18 23:05:35

标签: sockets synchronization gps time-management

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

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

9 个答案:

答案 0 :(得分:15)

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

它可以选择从多个GPS设备获取输入以及与网络服务器通信。

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

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

答案 1 :(得分:12)

您无法通过交换数据将计算机同步到毫秒级别,因为任何数据交换本身至少需要几毫秒才能完成,从而破坏您的结果!即使试图首先测量数据传输所需时间然后发送时间信息(将测量的延迟考虑在内)的协议也比平均值好一点,但它们仍然不好,因为并非每次数据传输都需要相同的时间(只是不断ping Internet上的服务器,看看每个ping有不同的延迟。)

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

例如,德国有一个无线电控制时间。在该国的某个地方是一个原子钟(几百年来有一个正确的纳秒时间),一些发送者永久地在全国各地的特定频率上播放当前时间。存在闹钟甚至手表,可以接收这个时间并与之永久同步(好吧,不是真的永久,大多数型号每24小时只做一次以节省电池运行时间)。此类接收器设备也适用于计算机,并带有可以永久性地将计算机时钟与该时间信号同步的软件。

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

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

  

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

来源:Wikipedia

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

答案 2 :(得分:9)

这是一款已有10年历史的软件,可以在<百分之一秒

从摘要:“用于联网商用PC的分布式时钟。没有额外的硬件,这个时钟将多个PC的传感器数据与平均10微秒的延迟和抖动相关联,最差情况下为100微秒。”

说明:http://scholar.google.com/citations?view_op=view_citation&citation_for_view=QmbeOvsAAAAJ:5nxA0vEk-isC

源代码:http://zx81.isl.uiuc.edu/clockkit/

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

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

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

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

的解决方案

答案 5 :(得分:1)

NTP绝对是最佳选择。基本上是一劳永逸,只要你把它放在本地主机(通常是防火墙或路由器机器)的防火墙上。

答案 6 :(得分:1)

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

如果您使用的是互联网连接,请考虑使用NTP Pool

答案 7 :(得分:1)

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

答案 8 :(得分:1)

我最近在这个主题上研究过(阅读Googled),这是我到目前为止所学到的:

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

  • PTP中的硬件时间戳由支持的NIC完成 - 英特尔有它们。

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

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

  • 我对GPS时间源(过度连续)的经验有所不同。它可以很好地运行,但是我们在数据中心有一个设备,我从来没有设法让它工作......

  • 如果您的机器在colo中,请向DC询问他们可以提供的内容 - 因此您无需做出决定。 :d

HTH