在线时将时钟与NTP同步,而离线时与RTC同步?


11

是否存在现有的机制,该机制可在线上使Linux系统与NTP同步,而在离线时与可预测的RTC同步?


我们操作远程“收集器”:嵌入式Linux系统,用于收集传感器数据并为其添加时间戳。我们需要他们的时钟误差保持在较小的水平,例如小于5秒。通常,我们使用NTP来同步他们的时钟,并且只要系统在线,就可以正常工作。

问题在于某些收集器的上行链路非常糟糕,可能会中断数小时,数天甚至数周。这不会停止本地数据收集,但是如果没有NTP,Linux系统时钟就会严重漂移并且非常不可预测。

OTOH,硬件的RTC漂移也很大,但速率恒定。RTC漂移率因板而异,但每块板都是恒定的,可以测量。

我想我们需要的是一种可以执行以下操作的机制:

  • 部署前测量电路板的RTC漂移率
  • 尽可能通过NTP不断/定期调整系统时间
  • 当NTP不可用时,可以通过RTC定期调整系统时间。考虑已知的RTC漂移率。
  • 可选:在线测量并记录正在进行的RTC漂移率(1)

所谓“机制”,是指一些维护良好且有据可查的软件和/或配置,可以处理“在线”与“离线”两种状态,确保系统时钟与正确的时间源(ntp与ntp)同步。 rtc),检测状态变化并校正RTC漂移。是否将其实现为特殊的ntpd配置/插件,作为单独的守护程序,作为cron作业还是其他无关紧要。

我看过Chrony,但是根据它的文档,它试图预测系统时钟的漂移,在我们的情况下,它的漂移远比RTC不可预测。Chrony似乎仅使用RTC来保持重启后的时间。


(1)注意ntpd激活内核的“ 11分钟模式”(每11分钟从系统时钟更新一次rtc)。当前的内核和ntpd似乎无法阻止11分钟模式。因此,在ntpd运行时,任何rtc漂移信息都会丢失(thx @billthor)。


更新/编辑:

  • 我们正在考虑通过USB或串行接口为MSF或DCF77信号(我们位于欧洲)添加一个外部无线电时钟。但是我们宁愿保持硬件精益。
  • 我们的收藏家通常位于室内,通常在地下室。因此,添加GPS时钟将无济于事。
  • 我们使用Debian7。这意味着util-linux-2.20.1中的hwclock,ntpdate-4.2.6p5,ntp-4.2.6.p5中的ntpd,chrony-1.24(可能为1.30)。
  • 请注意,我们的问题不在于我们不知道如何使用ntpdate(8)hwclock(8)date(1)等,请参阅附加部分斜体什么,我与“机制”的意思。
  • 添加了有关“ 11分钟模式”的脚注
  • 是关于离线同步和RTC漂移的非常有趣的讨论

据我了解,ntpd和hwclock的组合已经允许您执行所有这些操作。
罗伊

@罗伊 问题是:如何将ntp(d)和RTC(hwclock)相结合以达到最大精度?
尼尔斯·托德曼2014年

我知道系统时钟的漂移比RTC大。我很好奇您对chrony系统漂移管理的方式/有效性不满意吗?历时如何为您失败?
dfc 2014年

@dfc chrony对我们没有失败。我们尚未尝试过,因为似乎不使用RTC保持离线期间的时间,我认为这会提高我们用例的准确性。如果没有其他更有前途的方法得到建议,我们将测试chrony。
尼尔斯·托德曼2014年

我认为您应该调查时间。恭喜,看来您是基于预感而放弃了一个不错的选择。在我看来,如果未找到RTC-ntpd,则对时间进行调查是落后的。似乎最简单的方法是查看chrony是否满足您的需求,如果不满足,则
顺便

Answers:


4

您的情况很不正常,如果有人提出ntpd基于标准的配置来执行您想要的操作,我会感到惊讶。就是说,我很惊讶,这种情况经常发生在这些部分周围。

但是,直到有人提出一个更好的主意之前,您是否考虑过crontab这样的条目?

*/5 * * * *   ntpdate 0.pool.ntp.org || ( hwclock --adjust; hwclock --hctosys )

IE,每五分钟尝试通过进行时钟同步ntpdate,如果(并且仅在失败的情况下),根据/etc/adjtime文件(格式详细说明了man hwclock,并根据您的知识正确填充了其第一行)调整硬件时钟以进行漂移。特定RTC的速率),然后从RTC设置系统时钟。

请注意,如果您寻求这样的解决方案,并且要部署大量这样的系统,则与池一起使用并根据使用情况按比例分配服务器被认为是礼貌的。您可以在http://www.pool.ntp.org/en/vendors.html上找到更多信息。


您已确定了基本思想:-),但尚未将其算作答案,因为它没有考虑(恒定但重要的)RTC漂移。我们可以改善它吗,例如利用/etc/adjtimehwclock --adjust
尼尔斯·托德曼2014年

是; 看上面。
MadHatter 2014年

这是我在写以前的评论时想到的一种解决方案。另外,如果系统时钟当前通过ntpd同步,则可以使用hwclock测量并为RTC设置相当精确的漂移率。
罗伊

不幸的是,请参阅有关ntpd和“ 11分钟模式”的评论
Nils Toedtmann 2014年

-1

NTP已经具有知道它是联机还是脱机的机制,并且它将根据需要切换到优先级较低的源。检查到达值以触发备用来源非常容易,但是我会坚持使用NTP。如下所述,监视和校正RTC漂移可能很困难。

在互联网时代之前,我使用了一个程序,该程序可以拨出数据源并同步时钟。仍然可能有可用的服务通过调制解调器提供时间源。这将需要访问电话线。

当地时钟存在已知问题,不适用于RTC。NTP已知操作系统问题列表中记录了一些问题。这些可能导致您的时钟漂移。解决它们可能会解决您的问题。在没有错过滴答声的情况下,我发现本地(系统)时间源可能非常稳定。

您可以将Dumb Clock驱动程序(33)与将适当的RTC时间写入/ dev / dumbclockX设备的程序一起使用。

还有许多其他基于无线电时钟的驱动程序。其中一些使用WWV和CHU之类的短波服务,这些服务可能在GPS信号不可用的环境中工作。对于欧洲,此列表将包括BBC,TDF,RBU和RMW。

Pavel Krejci也已经编写了RTC驱动程序,但是它似乎没有并入官方驱动程序。这可能与PPS类型同步一起使用。

在部署之前应该有可能测量RTC漂移。但是,您将需要确保不会自动更新RTC。当使用adjtimex功能更新系统时钟时,RTC可能每11分钟更新一次。

NTP连接后将更新时钟。通常,NTP将拒绝对系统时钟进行大的调整。有一些选项可以调整时钟可以调整的距离。

我已建议使用上述RTC的选项。无线电时钟可能比GPS时钟更合适。

在没有可靠时间来源的情况下测量漂移可能是徒劳的。如果当地时间不稳定,则不能使用它来监视RTC,反之亦然。如果内核每11分钟更新一次RTC,则在连接NTP时无法测量漂移。我使用的RTC具有一秒的分辨率,因此它们必须漂移很大才能可靠地进行测量。


我不明白这与我的问题有何关系。我认为我的问题不是缺少驾驶员……还是?
尼尔斯·托德曼2014年

@NilsToedtmann据我所知,没有RTC的官方驱动程序。我相信local驱动程序只使用服务器时钟,您报告漂移。我将更新我的回复。
BillThor

当您说“驱动程序”时,您是说Linux内核驱动程序(其中有很多)还是ntpd功能?谢谢您的提示,其中一些很有趣-尽管我认为应该将其发布为注释。特别感谢Thx提到“再过11分钟”,我已经忘记了。我更新了我的问题。
尼尔斯·托德曼2014年

@NilsToedtmann不,我是说NTP时钟驱动程序。根据我的经验,RTC通常会漂移,但如果击球效果良好,则漂移不会很高。错过的滴答声可能是系统时钟的问题。
BillThor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.