Hacker News 中文摘要

RSS订阅

Linux上NTP精度的限制 -- The Limits of NTP Accuracy on Linux

文章摘要

文章探讨了在Linux系统上通过NTP实现时间同步的精度极限,作者通过实验和配置Chrony与本地GPS(GNSS)系统,试图将网络中的多个Linux系统时钟同步到微秒级别,以确保分布式追踪记录的时间戳准确性。作者的目标是使时钟同步误差小于网络往返时间(20-30微秒),理想情况下达到1微秒,但10微秒也可接受。

文章总结

Linux系统上NTP精度的限制

最近,我一直在探索Linux系统之间时间同步的极限。具体来说,我想了解时间同步的精度能达到多高,需要哪些条件,以及哪些因素会显著增加时间误差。

经过一个月的实验,我逐渐有了一些理解。我的目标是将网络中的多个Linux系统的时钟尽可能同步,以确保在不同系统上生成的分布式追踪记录的时间戳是可信的。我的本地网络往返时间(RTT)在20到30微秒(μS)之间,我希望时钟之间的误差小于1个RTT,理想情况下在1微秒以内,10微秒也是可以接受的。

虽然使用Chrony与本地GPS时间源同步时,Chrony会声称其精度在X纳秒内,但要验证这一说法并不容易,尤其是当Chrony声称的精度超过网络RTT(约20微秒)时。我花了很多时间研究Linux、Chrony和GPS在时间同步中的极限,以下是我得出的一些结论:

  1. GPS时间源的误差:即使是最好的GPS模块,其数据手册上也会列出约5纳秒的抖动。在我的实验中,三个GPS接收器之间的时间差异通常在200纳秒左右,且每秒钟都在变化。即使通过精心管理天线电缆长度等,也很难让多个GPS接收器在50纳秒内达成一致。

  2. 网络复杂性带来的误差:即使网络复杂度较低,也可能引入200到300纳秒的系统性误差。不同的网卡及其驱动程序在亚微秒级时间同步中的表现差异很大。例如,Intel E810网卡表现优异,而Realtek网卡则表现不佳。

  3. Linux系统的低延迟问题:许多Linux系统在处理低延迟任务时表现不佳,主要原因是系统管理BIOS(SMBIOS)在处理电源管理或其他活动时会导致随机“停顿”,导致系统暂停数百微秒甚至更长时间。廉价系统的表现尤其不稳定,有些系统的同步误差高达1300到2000纳秒,而有些则表现良好,误差在20到50纳秒之间。

  4. 时间同步的总体精度:在我的网络中,大部分系统的时钟同步误差在500纳秒左右。虽然这已经满足了我的需求,但比我预期的要差一些。在某些特定情况下,可以通过精心设计将误差控制在100纳秒以内,但在实际网络中,很难将误差稳定控制在200纳秒以下。

实验设置:我使用了8台相同的服务器作为时间客户端,以及5个本地GPS时间源进行测试。网络核心由两台Arista 7050QX-32S交换机组成,支持PTP(精确时间协议)。所有服务器通过OSPF和ECMP实现冗余连接。

误差来源: - GPS误差:即使是最好的GPS接收器,其时间输出也会有约5纳秒的抖动。通过示波器观察,不同GPS接收器之间的时间差异通常在200纳秒左右。 - 网络误差:Chrony假设网络延迟是对称的,但在我的网络中,这一假设并不成立。不同服务器对同一时间源的同步误差存在显著差异,部分原因是网络路径的不对称性。 - 服务器间同步误差:在8台服务器之间进行时间同步时,误差在207纳秒以内,但不同服务器之间的同步并不一致。

总结:在我的网络中,时间同步的总体误差在200到500纳秒之间。GPS时间源本身有时会有150纳秒的差异,网络则额外引入了200到300纳秒的噪声。虽然理想情况下希望达到10纳秒的精度,但在现有硬件条件下,这是不可能的。不过,我的系统已经能够将误差控制在1微秒以内,远低于最初的10微秒目标。

评论总结

评论主要围绕GPS时间同步的准确性和相关技术展开,观点多样且各有侧重。以下是总结:

  1. GPS模块的锯齿校正:评论1提出GPS定时模块应具备锯齿校正值,以减少PPS脉冲与GPS时间之间的误差,从而消除抖动的主要来源。

    • "GPS timing modules should have a sawtooth correction value..."
    • "Using that will remove the main source of jitter."
  2. 多时间源的不可靠性:评论2引用Segal定律,指出拥有多个时间源可能导致不确定性。

    • "A man with a watch knows what time it is. A man with two watches is never sure."
  3. 实时Linux系统的时间准确性:评论3认为实时Linux系统在放弃多任务微睡眠架构后,能够非常准确地保持时间,但多路径路由可能影响准确性。

    • "rt Linux can be exceptionally good at keeping time..."
    • "the multipath routing isn’t helping either."
  4. 技术细节的准确性:评论4对技术细节的准确性提出质疑,认为存在许多不准确之处。

    • "There are so many inaccurate technical details here..."
  5. PTP协议的推荐:评论5和评论7建议使用PTP(精确时间协议)进行网络时间同步,认为其能达到亚100纳秒的精度。

    • "If you want accurate time synchronisation in a network just use the correct tool..."
    • "Linux PTP and hardware timestamping in the network card will get you in the sub 100ns range."
  6. 硬件与软件的选择:评论9强调专用IC或MCU在实时性保证上优于通用操作系统,认为后者存在更多潜在问题。

    • "bare metal code on a dedicated IC or MCU is by definition better than anything running on a general purpose OS..."
  7. GPS模块的校准:评论10指出GPS模块需要进入特殊静止模式并进行位置校准,才能获得高精度时间。

    • "GPS modules need to be put in a special stationary mode..."
    • "I’m consistently achieving ca. 10ns of jitter."

总结:评论中既有对GPS模块和PTP协议的技术讨论,也有对多时间源和硬件选择的哲学思考,整体呈现出对时间同步技术细节的关注与争议。