亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial Internet of Things >> 嵌入式

开源更精确的时间设备

Facebook 工程师已经构建并开源了一个开放的计算时间设备,这是现代计时基础设施的重要组成部分。为了实现这一点,我们想出了时间卡——一种 PCI Express (PCIe) 卡,可以将几乎任何商品服务器变成时间设备。在 OCP 社区的帮助下,我们建立了 Open Compute Time Appliance 项目并开源了 Open Time Server 的各个方面。本文概述了考勤卡的发展。

2020 年 3 月,我们宣布我们正在将数据中心的服务器(连同我们的消费产品)转换为基于网络时间协议 (NTP) 的新计时服务。这项由内部构建并随后开源的新服务更具可扩展性,并将 Facebook 基础设施中的计时精度从 10 毫秒提高到 100 微秒。更准确的计时可在我们的数据中心实现更先进的基础设施管理,以及更快的分布式数据库性能。

新的基于 NTP 的时间架构使用 Stratum 1——一个直接链接到权威时间源的重要组件,例如全球导航卫星系统 (GNSS) 或铯钟,如下所示:

许多公司依靠诸如 time.facebook.com 之类的公共 NTP 池作为他们的 Stratum 1。但是,这种方法有其缺点。这些池增加了对互联网连接的依赖,并可能影响系统的整体安全性和可靠性。例如,如果连接丢失或外部服务关闭,则可能导致依赖系统的中断或时间偏移。

为了消除这些依赖性,我们构建了一个新的专用硬件,称为时间设备,它由一个 GNSS 接收器和一个微型原子钟 (MAC) 组成。即使在 GNSS 连接丢失的情况下,时间设备的用户也可以保持准确的时间。在构建我们的时间设备的同时,我们还发明了一种时间卡,一种可以将任何商品服务器变成时间设备的 PCIe 卡。

为什么需要新的时间设备?

现成的时间设备有其自身的优势。它们开箱即用,并且由于其中许多设备已经上市数十年,它们经过实战测试并且通常足够稳定,可以在没有监督的情况下长时间工作。

但是,这些解决方案也需要权衡:

到目前为止,公司不得不接受这些权衡并在上述限制条件下工作。我们决定是时候尝试一些不同的东西了,所以我们认真研究了构建一个新的时间设备需要什么——特别是一个使用 x86 架构的时间设备。

时间设备原型

这是我们设想的框图:

这一切都始于提供时间 (ToD) 以及每秒一个脉冲 (PPS) 的 GNSS 接收器。当接收器由高稳定性振荡器(例如,原子钟或恒温晶体振荡器)提供支持时,它可以提供纳秒级精度的时间。时间通过支持 PPS 输入/输出和数据包硬件时间戳的现成网卡通过网络传输,例如我们初始设备中使用的 NVIDIA Mellanox ConnectX-6 Dx。

GPSDO 的输出被输入到 ConnectX-6 Dx 网卡的 EXT 时间戳中。此外,GNSS 接收器通过串行端口和称为 NMEA 的流行 GPS 报告协议提供 ToD。使用 ts2phc 工具可以让我们将 NIC 的物理硬件时钟同步到几十纳秒,如下所示:

我们的原型让我们相信构建这样的设备是可能的。但是,还有很大的改进空间。

为了提高系统的可靠性,我们将其分为两个主要部分:有效载荷和交付。有效载荷是精确时间,它本质上是一个由本地振荡器驱动的插值系统,用于在 GNSS 接收器接收的连续 PPS 信号之间创建纳秒级的时间测量。我们考虑将 GNSS 接收器、高稳定性本地振荡器和必要的处理逻辑放入 PCIe 外形中,我们称之为时间卡(见下文)。

这是我们最初设想在餐巾纸上的考勤卡草图:

我们使用板载 MAC、多频段 GNSS 接收器和 FPGA 来实现时间引擎。时间引擎的工作是以纳秒为单位插入连续 PPS 信号之间所需的粒度。除了 1 PPS 信号外,GNSS 接收器还提供 ToD。在 GNSS 接收丢失的情况下,时间引擎依赖于基于连续 PPS 脉冲的平均集合的原子钟正在进行的同步。

时间引擎由一组在时间卡的 FPGA 上实现的处理块组成。这些处理模块包括各种过滤、同步、错误检查、时间戳和 PCIe 相关子系统,以允许时间卡作为系统外设运行,为开放时间服务器提供精确时间。

应该注意的是,GNSS 接收器的精度在几十纳秒以内,而 MAC 所需的持续同步(校准)在 10 皮秒以内(精度高 1000 倍)。

起初,这听起来不可能。然而,GNSS 系统提供基于与标准时间的连续通信的计时。这种能力允许 GNSS 机载时钟与提供给其星座的时间源不断同步,使其几乎没有长期漂移误差。因此,MAC 的校准是通过比较 MAC 驱动的计数器和 GNSS 提供的 PPS 脉冲来执行的。花更多的时间进行比较使我们能够实现更高的 MAC 校准精度。当然,这是考虑到MAC是一个线性时不变系统。

在此框图中,您可以看到来自铷时钟的 10 MHz 信号进入时间引擎。该时钟信号可由 10 MHz SMA 输入代替。时钟信号馈入数字时钟模块和数字 PLL(12.5x 由 25 向上并除以 2),从而产生 125 MHz 的频率。 125 MHz(8 纳秒周期)馈入 ToD 单元。

由于 LSB(最低有效位)与 250 皮秒相关联(由 gPTP 上的 32 位亚秒精度驱动),因此 ToD 单元将数字值 0b000001 中的 8 纳秒增量相关联。

另一方面,从 GNSS 过滤而来的 PPS 信号用于对增量结果进行快照。如果 125 MHz 是准确的,则累积的增量应产生恰好 1 秒的间隔。但实际中,累计值与理论上的1秒间隔总是不匹配的。


这些值可以使用内部 PI(比例和积分)控制回路进行调整。可以通过以 250 皮秒为步长更改 0b000001 值或微调 12.5x PPL 来完成调整。此外,还可以通过控制铷振荡器进行进一步(更精细的调整)调整。

GNSS 不可用的时间越长,时间精度损失就越大。时间精度恶化的速度称为保持。通常,保持时间被描述为准确度的时间范围以及超过它需要多长时间。例如,MAC 的保持时间在 1 微秒内,持续 24 小时。这意味着在 24 小时后,时间精度是不确定的,但精确到 1 微秒。

作为替代方法,我们指望新一代芯片级和小型化原子钟具有接收 PPS 输入的能力。这允许计时卡的时间引擎将高稳定性振荡器的超精密谐振交给组件,而不是使用数字资源来达到目标​​。

作为一般原则,调谐越准确,可实现的保持性能越好。在交付方面,使用具有精确计时的 NIC 可确保网络数据包收到非常准确的时间戳,这对于保持时间精确至关重要,因为它与网络中的其他服务器共享。这样的 NIC 也可以直接从考勤卡接收 PPS 信号。

在概念化想法和各种实现迭代后,我们能够组装一个原型。

运行中的时间设备

时间卡允许任何带有具有硬件时间戳功能的 NIC 的 x86 机器变成时间设备。该系统不知道它是否为 NTP、PTP、SyncE 或任何其他时间同步协议运行,因为时间卡提供的准确性和稳定性几乎适用于任何系统。

使用 PCIe 卡的好处在于,即使在家用 PC 上也可以组装设置,只要它有足够的可用 PCIe 插槽。

下一步是安装 Linux。时间卡驱动程序包含在 Linux 内核 5.15 或更新版本中。或者,它可以从内核 5.12 或更高版本上的 OCP GitHub 存储库构建。

驱动程序将暴露多个设备,包括 PHC 时钟、GNSS、PPS 和原子钟串行:

$ ls -l /sys/class/timecard/ocp0/

lrwxrwxrwx。 1 根 0 八月 3 日 19:49 设备 -> ../../../0000:04:00.0/

-r-r-r-。 1 根 4096 八月 3 日 19:49 gnss_sync

lrwxrwxrwx。 1 根 0 八月 3 日 19:49 i2c -> ../../xiic-i2c.1024/i2c-2/

lrwxrwxrwx。 1 根 0 八月 3 日 19:49 pps -> ../../../../../virtual/pps/pps1/

lrwxrwxrwx。 1 根 0 八月 3 日 19:49 ptp -> ../../ptp/ptp2/

lrwxrwxrwx。 1 根 0 八月 3 日 19:49 ttyGNSS -> ../../tty/ttyS7/

lrwxrwxrwx。 1 根 0 八月 3 日 19:49 ttyMAC -> ../../tty/ttyS8/

该驱动程序还允许我们监控时间卡、GNSS 接收器和原子钟状态,并使用 devlink cli 刷新新的 FPGA 比特流。

剩下要做的就是配置 NTP 和/或 PTP 服务器以使用时间卡作为参考时钟。要配置chrony,只需指定refclock 属性:

$ grep refclock /etc/chrony.conf
refclock PHC /dev/ptp2 tai poll 0 trust

并享受非常精确和稳定的NTP Stratum 1服务器:

$ chronyc 来源
210 来源数量 =1
MS 名称/IP 地址 Stratum Poll Reach LastRx Last sample
================================================================================
#* PHC0 0 0 377 1 +4ns[ +4ns] +/- 36ns

对于 PTP 服务器(例如 ptp4u),首先需要将考勤卡 PHC 与 NIC PHC 同步。这可以通过使用 phc2sys 工具轻松完成,该工具将以高精度同步时钟值,通常保持在几纳秒内:

$ phc2sys -s /dev/ptp2 -c eth0 -O 0 -m

为了获得更高的精度,建议将时间卡和网卡连接到同一 CPU PCIe 通道。为了获得更高的精度,可以将考勤卡的 PPS 输出连接到 NIC 的 PPS 输入。

为了验证和确认精度,我们使用了一个名为 Calnex Sentinel 的外部验证设备,该设备通过多个开关和一个独立的 GNSS 天线连接到同一网络。它可以执行 PPS 测试以及 NTP 和/或 PTP 协议:

蓝线代表 NTP 测量结果。在整个 48 小时的测量间隔内,精度保持在 ±40 微秒以内。

橙色线代表 PTP 测量结果。偏移量实际上是 0,在纳秒范围内。

事实上,当我们比较计时卡输出和 Calnex Sentinel 内部参考之间的 1 PPS 时,我们看到组合误差范围在 ±200 纳秒内:

但更重要的是,这些测量结果证明了时间设备输出的稳定性。

在 GNSS 信号丢失的情况下,我们需要确保原子支持的时间卡的时间漂移​​(又名保持)保持在每 24 小时 1 微秒以内。下图显示了原子钟 (SA.53s) 在 24 小时间隔内的保持时间。如您所见,PPS 漂移保持在 300 纳秒以内,符合原子钟规范。

计时卡的模块化设计允许将原子钟与恒温晶体振荡器 (OCXO) 或温度补偿晶体振荡器 (TCXO) 进行交换,以获得在保持能力上妥协的预算解决方案。

开源时间设备的设计

构建非常精确、廉价且不受供应商锁定的设备本身就是一项成就。但我们希望对行业产生更大的影响。我们希望真正免费提供它,让每个人都可以负担得起,从研究科学家到大型云数据中心。

这就是我们与开放计算项目 (OCP) 合作创建全新时间设备项目 (TAP) 的原因。在 OCP 保护伞下,我们在 Time Appliance 项目 GitHub 存储库中开源,包括规格、原理图、机制、BOM 和源代码。现在,只要打印 PCB 和焊接微小的组件听起来并不可怕,任何人都可以以常规时间设备成本的一小部分来制作自己的考勤卡。我们还与几家供应商合作,例如将构建和销售考勤卡的 Orolia,以及销售具有精确计时功能的 ConnectX-6 Dx(以及具有精确计时功能的 BlueField-2 DPU)的 Nvidia。

我们在 www.opentimeserver.com 上发布了 Open Time Server 规范,其中详细解释了如何结合硬件(时间卡、网卡和商品服务器)和软件(操作系统驱动程序、NTP 和/或 PTP 服务器) ) 来构建时间设备。根据此规范构建设备将使维护设备的工程师拥有完全控制权,从而改进监控、配置、管理和安全性。

时间设备是为每个人改进计时基础设施的重要一步,但还有更多工作要做。我们将继续致力于其他元素,包括提高我们自己服务器同步的精度和准确性,我们打算继续与开放计算社区共享这项工作。


嵌入式

  1. 时间常数方程
  2. 单稳态多谐振荡器
  3. 沙漏
  4. Python 睡眠()
  5. 时间就是金钱:使用维护软件节省时间并更有效地花费的技巧
  6. 制造商应该抛弃有关库存管理的旧想法
  7. 供应链领导者,是时候发起进攻了
  8. 数字孪生:帮助西海岸火车准点运行?
  9. Python - 日期和时间
  10. 什么是 HMI?
  11. Crescent Crown 通过实施自动化提高成本和时间效率
  12. 如何使您的制造和运输更加简化