网路

DOCA Firefly 时间服务

Network Time Protocol(NTP)是一种在数据中心被广泛部署的时间同步协议,它能提供毫秒级别的同步。但是对于电信,金融,流媒体,科学计算,或者一些互联网分布式业务,如分布式数据库,分布式渲染等,一个高精度,并且可靠的时间是很关键的。

IEEE 1588 Precision Time Protocol (PTP) 是另一种时间同步标准,它的目标是达到纳秒甚至皮秒级别的时间同步精度。

DOCA Firefly是一个基于PTP时间同步的DOCA服务,使用PTP来校准DPU(网卡本身)的时钟,然后同步到宿主机。依靠网卡的高精度时钟,客户可以重新设计实现自己的各种应用。

同时,使用硬件来得到更高的时间精度成为趋势。本文将从IEEE 1588 Precision Time Protocol (PTP)开始,描述PTP基本原理,及其软件协议栈,它与DOCA Firefly的关系,部署时间网络的基本硬件要求,如何部署DOCA Firefly,最后分享了几个从PTP中得到收益的业务示例。

IEEE 1588 Precision Time Protocol (PTP)原理简析

IEEE 1588全称是网络测量和控制系统的精密时钟同步协议标准,基本功能是网络中所有时钟都与最精确的时钟保持同步。每个从时钟通过与主时钟交换同步报文而与主时钟达到同步,最终整个网络同步到同一个时钟源。

它使用端到端的UDP报文交互来确认彼此状态,计算环路时延然后进行同步。1588的时间同步过程如下图所示:

对于端到端的双方Master和Slave,首先需要计算两个路径延迟,Master-to-Slave和Slave-to-Master。

首先计算Master-to-Slave:

  • t1时刻,Master发送Sync Message
  • t2时刻,Slave接收到Sync Message
  • tms,Master到Slave的时间差为t2 – t1

计算Slave-to-Master:

  • t3时刻,Slave发送Delay Request Message
  • t4时刻,Master接收到Delay Request Message
  • tsm,Slave到Master的时间差为t2 – t1

假设双向延迟是对称的,那么单向延迟(RTT/2)为:

那么最终的时间偏移offset可以如下计算,这个offset可用来纠正Slave的时钟:

Linux PTP

Linux社区通过Linux PTP项目PTP4L提供了一套软件来支持IEEE 1588,该软件是根据IEEE 1588的Linux精确时间协议(PTP)实现的。Linux PTP实现了IEEE 1588中定义的Boundary Clock (BC), Ordinary Clock (OC) 和Transparent Clock (TC)。

Linux PTP传输层基于UDP/IPv4, UDP/IPv6, 或者raw Ethernet (Layer 2),其分层模型如下图所示:

PTP通过Linux SO_TIMESTAMPING选项支持基于硬件和软件的时间戳,如果PTP消息由操作系统网络协议栈处理,则会增加很多的延迟与抖动,从而导致系统时钟精度不高。

支持PTP硬件的DPU则可以bypass内核软件处理流程,在发送出PTP交互消息的时刻,由硬件打上实时的时间戳,从而达到纳秒级别的精度。

系统时钟如果要同步到Master,DPU的PTP硬件时钟必须通过PTP4L锁定到PTP网络,并且通过PHC2SYS把硬件时钟同步到系统。使用BlueField-2部署Linux PTP时,PTP4L和PHC2SYS都属于DOCA Firefly时间服务,并且都打包进Firefly容器,部署到DPU的ARM系统上。

DOCA Firefly的原理和架构分析

DOCA Firefly是一个时间服务解决方案,通过一个服务支持所有关于时间的需求。它对Linux PTP做了很多的增强,对其做了很多的功能和性能的增强,并且可以支持Linux和Windows,无论是裸金属还是虚拟化云环境。

在DPU、NIC和交换机上都可以轻松的使用容器部署Firefly,各行业和应用都可以使用同一个服务,本质上,Firefly提供了所有需要的时间服务功能功能,如配置、监视,备份,编排。

DOCA Firefly为数据中心提供了端到端的硬件加软件的解决方案,使高精度的时钟网络不在复杂和昂贵,其结构框图如下图所示:

DOCA Firefly可以运行在DPU或者ConnectX系列网卡上。当运行在DPU上时,有额外的优势:

  • PTP4L运行在DPU ARM cores上,将时间进程与其它服务器软件隔离开来
  • 可以持续的验证该服务器时间的准确性,并不断的计算跨数据中心的最大时间误差
  • 可以支持Windows系统

典型时间网络拓扑

一个典型的时间网络拓扑如下图所示:

它由以下三种元素构成:

  • Grandmaster(GM)在PTP网络中,只有一个节点可以被选择做为参考时钟(Grandmaster),其余所有节点做为PTP Follower。GM应该是整个网络中最精确的时钟。
  • Boundary Clock (BC)交换机中的所有端口共享一个本地时钟,而不是维护各自的时间基础。在BC上,只有一个端口会切换到PTP从随者状态,收集外部GM提供的时间信息,以便相应地调整BC的本地时钟。

所有其他端口承担PTP领导者的角色,访问时间信息,并将其传输到连接到它们端口上的追随者。

  • PTP Followers系统中所有非GM或BC的服务器实体都充当PTP追随者。服务器连接到交换机,运行PTP守护进程客户端,监听PTP消息并同步本地时钟。

DOCA Firefly在DPU上的部署过程

登录到DPU的Linux shell,执行下面的步骤在DPU上部署时间服务。

  1. 创建配置文件/etc/ptp4l/ptp4l.conf,并添加以下内容:
[global]

domainNumber 127

priority1 128

priority2 127

use_syslog 1

logging_level 6

tx_timestamp_timeout 30

hybrid_e2e 1

dscp_event 46

dscp_general 46

[p0]

logAnnounceInterval -2

announceReceiptTimeout 3

logSyncInterval -3

logMinDelayReqInterval -3

delay_mechanism E2E

network_transport UDPv4

创建并启动Firefly时间服务的容器:
#Logout to NGC

docker logout nvcr.io

#Login to NGC

docker login nvcr.io

# Create container

docker create \

      –privileged \

      –network host \

      –name ptp-service-container \

        –restart unless-stopped \

      –restart unless-stopped \

      -v /var/log/:/var/log/ \

      -v /etc/ptp4l/:/etc/ptp4l/ \

      nvcr.io/ea-rivermax/dpu-ptp-service/dpu-ptp-service:21.03-v1

# Start container

docker start ptp-service-container
  • 使用docker ps确认容器正常启动
  • 查看日志文件/var/log/ptp4l.log,检查时钟的状态
# tail -f /var/log/ptp4l.log

DOCA Firefly的时间精度结果

不同的硬件支持不同的时间服务功能,并且精度也有差别,如下表所示:

使用IEEE 1588时间同步后,对分布式数据库的具有明显的加速,比如Google Spanner, CockroachDB,最终性能提升3-4倍。因为在分布式数据库应用中,所有的节点和事务需要对时间达成一致,时间不确定性限制了分布式、同步复制的数据库性能。使用PTP之后,降低了时间不确定性,提高了计时精度。详细参考https://www.cockroachlabs.com/blog/living-without-atomic-clocks,和论文Sundial: Fault-tolerant Clock Synchronization for Datacenters

在专业的流媒体处理中,所有的媒体节点需要锁定同一个时钟,精度要求us级别。SMPTE ST 2059/2110要求设备支持硬件时间戳。并且大多数的媒体处理使用基于Windows的工作站,目前并没有PTP能够支持Windows。通过在DPU上部署DOCA Firefly,则Windows系统也可以享受PTP带来的优势。

在更多的对时间精度有要求的场景中,越来越多的应用能从PTP收益。比如分布式事件检测,拥塞控制等。在电信设备中,IEEE 1588也是必须的功能。

终上所述,在使用Firefly之后,因为所有节点间以纳秒级别同步时钟,数据中心可以重新考虑如何设计自己的应用程序。

Tags