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


2020年3月,我们宣布正在将数据中心的服务器(以及我们的消费产品)切换到一种基于网络时间协议(NTP)的新型计时服务。这项新服务是内部构建的,后来是开源的,可扩展性更强,并将Facebook基础设施中的计时精度从10毫秒提高到了100微秒。更准确的计时使我们的数据中心能够进行更高级的基础设施管理,并提高分布式数据库的性能。


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


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-1-v1

<img data-lazy-fallback="1" decoding="async" width="1921" height="1081" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-1-v1.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-1-v1" class="wp-image-4470604" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-1-v1.jpg 1921w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-1-v1.jpg?resize=300,169 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-1-v1.jpg?resize=768,432 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-1-v1.jpg?resize=1024,576 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-1-v1.jpg?resize=1536,864 1536w" sizes="(max-width: 1921px) 100vw, 1921px">

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


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


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


现成的时间设备有其自身的好处。它们开箱即用,因为其中许多设备已经在市场上销售了几十年,它们经过了战斗测试,通常足够稳定,可以在没有监督的情况下长时间工作。


然而,这些解决方案也有取舍:


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


时间设备原型


以下是我们设想的框图:


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-03-v3

<img data-lazy-fallback="1" decoding="async" loading="lazy" width="1921" height="1081" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-03-v3.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-03-v3" class="wp-image-4470605" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-03-v3.jpg 1921w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-03-v3.jpg?resize=300,169 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-03-v3.jpg?resize=768,432 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-03-v3.jpg?resize=1024,576 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-03-v3.jpg?resize=1536,864 1536w" sizes="(max-width: 1921px) 100vw, 1921px">

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


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


ts2phc tool output

<img data-lazy-fallback="1" decoding="async" loading="lazy" src="https://uploads.9icnet.com/images/aritcle/20230424/ts2phc-tool-output.jpg" alt="ts2phc tool output" class="wp-image-4470606" width="514" height="371" srcset="https://uploads.9icnet.com/images/aritcle/20230424/ts2phc-tool-output.jpg 514w, https://uploads.9icnet.com/images/aritcle/20230424/ts2phc-tool-output.jpg?resize=300,217 300w" sizes="(max-width: 514px) 100vw, 514px">

我们的原型让我们相信制造这样的设备是可能的。然而,还有很大的改进空间。


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


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-06-v3

<img data-lazy-fallback="1" decoding="async" loading="lazy" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-06-v3.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-06-v3" class="wp-image-4470607" width="640" height="360" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-06-v3.jpg 1921w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-06-v3.jpg?resize=300,169 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-06-v3.jpg?resize=768,432 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-06-v3.jpg?resize=1024,576 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-06-v3.jpg?resize=1536,864 1536w" sizes="(max-width: 640px) 100vw, 640px">

这是我们最初在餐巾纸上设想的时间表草图:


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-7-v3

<img data-lazy-fallback="1" decoding="async" loading="lazy" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-7-v3.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-7-v3" class="wp-image-4470608" width="640" height="334" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-7-v3.jpg 1912w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-7-v3.jpg?resize=300,157 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-7-v3.jpg?resize=768,401 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-7-v3.jpg?resize=1024,534 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-7-v3.jpg?resize=1536,802 1536w" sizes="(max-width: 640px) 100vw, 640px">

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


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


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


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


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-8-v3

<img data-lazy-fallback="1" decoding="async" loading="lazy" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-8-v3.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-8-v3" class="wp-image-4470609" width="640" height="446" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-8-v3.jpg 1738w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-8-v3.jpg?resize=300,209 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-8-v3.jpg?resize=768,536 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-8-v3.jpg?resize=1024,714 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-8-v3.jpg?resize=1536,1071 1536w" sizes="(max-width: 640px) 100vw, 640px">

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


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-9-v3

<img data-lazy-fallback="1" decoding="async" loading="lazy" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-9-v3.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-9-v3" class="wp-image-4470610" width="640" height="339" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-9-v3.jpg 1804w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-9-v3.jpg?resize=300,159 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-9-v3.jpg?resize=768,407 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-9-v3.jpg?resize=1024,542 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-9-v3.jpg?resize=1536,813 1536w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-9-v3.jpg?resize=720,380 720w" sizes="(max-width: 640px) 100vw, 640px">

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


另一方面,来自GNSS的滤波后的PPS信号用于快照增量的结果。如果125MHz是准确的,那么累积的增量应该正好产生1秒的间隔。然而,在现实中,累积值和理论1秒间隔之间总是不匹配的。


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-10-v3

<img data-lazy-fallback="1" decoding="async" loading="lazy" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-10-v3.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-10-v3" class="wp-image-4470611" width="640" height="248" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-10-v3.jpg 1721w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-10-v3.jpg?resize=300,116 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-10-v3.jpg?resize=768,298 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-10-v3.jpg?resize=1024,397 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-10-v3.jpg?resize=1536,595 1536w" sizes="(max-width: 640px) 100vw, 640px">



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


全球导航卫星系统不可用的时间越长,丢失的时间精度就越高。时间精度下降的速率被称为保持率。通常,保持时间被描述为准确性的时间框架以及超过它所需的时间。例如,MAC的保持时间在1微秒以内,持续24小时。这意味着24小时后,时间精度是不确定的,但在1微秒内是准确的。


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


一般来说,调谐越准确,可以实现的保持性能就越好。在传输方面,使用具有精确定时的NIC可以确保网络数据包接收到非常准确的时间戳,这对于在网络上与其他服务器共享时间时保持时间的准确性至关重要。这样的NIC也可以直接从时间卡接收PPS信号。


在概念化了这个想法和各种实现迭代之后,我们能够构建一个原型。


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-11-v1

<img data-lazy-fallback="1" decoding="async" loading="lazy" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-11-v1.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-11-v1" class="wp-image-4470612" width="640" height="433" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-11-v1.jpg 1741w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-11-v1.jpg?resize=300,203 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-11-v1.jpg?resize=768,520 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-11-v1.jpg?resize=1024,693 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-11-v1.jpg?resize=1536,1040 1536w" sizes="(max-width: 640px) 100vw, 640px">

运行中的时间设备


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


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-12-v1

<img data-lazy-fallback="1" decoding="async" loading="lazy" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-12-v1.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-12-v1" class="wp-image-4470613" width="640" height="232" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-12-v1.jpg 1851w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-12-v1.jpg?resize=300,109 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-12-v1.jpg?resize=768,279 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-12-v1.jpg?resize=1024,372 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-12-v1.jpg?resize=1536,558 1536w" sizes="(max-width: 640px) 100vw, 640px">

使用PCIe卡的美妙之处在于,只要有足够的PCIe插槽可用,即使在家用电脑上也可以组装。


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


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


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


长宽x宽x宽。1根0 8月3日19:49设备->../..//0000:04:00.0/


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


长宽x宽x宽。1根0 8月3日19:49 i2c->..//第十二条第二款第1024条第二项第2款/


长宽x宽x宽。1根0 8月3日19:49 pps->../../..//虚拟/pps/pps1/


长宽x宽x宽。1根0 8月3日19:49 ptp->..//ptp/ptp2/


长宽x宽x宽。1根0 8月3日19:49 ttyGNSS->..//tty/ttyS7/


长宽x宽x宽。1根0 8月3日19:49 ttyMAC->..//tty/ttyS8/


该驱动程序还允许我们监控时间卡、全球导航卫星系统接收器和原子钟状态,并使用devlink cli闪存新的FPGA位流。


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


$grep参考时钟/etc/chrony.conf

refclock PHC/dev/ptp2 tai轮询0信任


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


$chronyc来源

210来源数量=1

MS名称/IP地址Stratum Poll Reach LastRx上次采样

===============================================================================

#*PHC0 0 377 1+4ns[+4ns]+/-36ns

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


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


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


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


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-14-v4

<img data-lazy-fallback="1" decoding="async" loading="lazy" width="1921" height="1081" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-14-v4.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-14-v4" class="wp-image-4470614" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-14-v4.jpg 1921w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-14-v4.jpg?resize=300,169 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-14-v4.jpg?resize=768,432 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-14-v4.jpg?resize=1024,576 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-14-v4.jpg?resize=1536,864 1536w" sizes="(max-width: 1921px) 100vw, 1921px">

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


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


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


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-16-v4

<img data-lazy-fallback="1" decoding="async" loading="lazy" width="1921" height="1081" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-16-v4.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-16-v4" class="wp-image-4470615" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-16-v4.jpg 1921w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-16-v4.jpg?resize=300,169 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-16-v4.jpg?resize=768,432 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-16-v4.jpg?resize=1024,576 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-16-v4.jpg?resize=1536,864 1536w" sizes="(max-width: 1921px) 100vw, 1921px">

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


在全球导航卫星系统信号丢失的情况下,我们需要确保原子支持的时间卡的时间漂移(也称为保持)保持在每24小时1微秒以内。这是一张图表,显示了原子钟(SA.53s)在24小时内的保持时间。正如你所看到的,PPS漂移保持在300纳秒以内,这在原子钟规范范围内。


CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-15-v8

<img data-lazy-fallback="1" decoding="async" loading="lazy" src="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-15-v8.jpg?w=640" alt="CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-15-v8" class="wp-image-4470621" width="640" height="343" srcset="https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-15-v8.jpg 1912w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-15-v8.jpg?resize=300,161 300w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-15-v8.jpg?resize=768,411 768w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-15-v8.jpg?resize=1024,548 1024w, https://uploads.9icnet.com/images/aritcle/20230424/CD21_391-Eng-Blog-Facebook-Time-Appliances-diagram-15-v8.jpg?resize=1536,823 1536w" sizes="(max-width: 640px) 100vw, 640px">

时间卡的模块化设计允许将原子钟与炉控晶体振荡器(OCXO)或温度补偿晶体振荡器(TCXO)交换,以获得在保留能力上有所折衷的预算解决方案。


时间设备的开源设计


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


这就是为什么我们参与了开放计算项目(OCP),以创建一个全新的时代家电项目(点击)。在OCP的保护伞下,我们在Time Appliance项目中开源GitHub存储库,包括规格、原理图、机械、BOM和源代码。现在,只要打印PCB和焊接微小的组件听起来不可怕,任何人都可以用普通时间设备的一小部分成本制作自己的时间卡。我们还与几家供应商合作,如奥罗利亚谁将制造和销售计时卡,以及英伟达谁正在销售具有精确计时功能的ConnectX-6 Dx(和具有精确计时能力的BlueField-2 DPU)。


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


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


艾哈迈德·拜亚戈维是Facebook的网络硬件工程师,也是开放计算项目基金会Time Appliance项目的项目负责人。


奥列格Obleukhov是Facebook的一名生产工程师,同时也在Time Appliance项目工作.