本文描述linux系统如何支持IEEE1588 协议,又称 PTP( precise time protocol,精确时间协议),包含时间同步原理,ptpl4,linux ptp驱动等内容

ptp时钟同步原理

学习之前我们要了解几个概念

主时钟(master):时钟同步源,其他时钟将同步到该时钟

从时钟(slave):需要和主时钟同步的时钟

普通时钟(Ordinary Clock): 作为master或slave之一

边界时钟(Boundary Clock): 有多个端口连接到网络的时钟,一个slave端口连接到上游设备的PTP端口,其他的端口作为master连接到下游设备的slave端口。下游slave端口同构PTP协议直接同步于边界时钟,而不是直接和master通信。

透明时钟(Transparent Clock): 一种网络设备,比如交换机,不需要时间同步,但是能够转发并修改某些经过的PTP报文,记录ptp报文经过本设备时所用的时间(即转发时间)增加到PTP报文的correctonField(矫正域)。

直连同步

上图为ptp时钟同步协议报文交互流程,描述了主从时钟之间报文如何交互,

1.主时钟向从时钟发出 Sync 报文;

2.从时钟收到 Sync 报文,记录收到报文时戳t2

3.主时钟发送follow_up报文,携带时戳 t1;

4.从时钟向主时钟发送 Delay_Req 报文,记录发送时t3

5.主时钟收到 Delay_Req 报文,记录收到的时t4

6.主时钟向从时钟发送 Delay_Resp 报文,并携带时钟 t4

7、假设从时钟和主时钟两者之间的差值为偏移量 offset,主时钟到从时钟的传输时延为 delay1,从时钟到主时钟的传输时延为 delay2,则有下面两个等式:

t1+offset + delay1 = t2

t3 - offset + delay2 = t4

可推导出

t2 - t1= offset + delay1

t4 - t3= delay2 - offset

由于报文使用了同一个物理链路传输,物理链路的传播延时又是固定的,基本可以认为双向时延相同,即:delay = delay1= delay2,则可以算出如下结果:

offset = ((t2 - t1) - (t4 - t3))/2

delay = ((t2 - t1) + (t4 - t3))/2

有了上述计算结果,然后就可以根据偏移量 offset 来修正从时钟,就可以实现同步。

上述两个主/从节点直连的情况,没有穿越其他节点,如果穿越其他不支持tc的节点,那么他的精度无法保证。

非直连同步

非直连情况主从时钟不是直连,他们通过了中间一个节点互联,那么中间节点必须支持TC功能,TC在入端口和出端口处,分别对1588v2报文的CorrectionField(时延校正)字段进行修正,在入口时减去该时刻的时间戳,在出口时加上该时刻的时间戳。因此,最终效果上就是在CorrectionField增加了该报文在本设备内的转发时延。

假设双向链路时延delay相同,那么可以得到如下两个等式:

T2-t1 = delay1+ corr1 + offset

T4-t3 = delay2+ corr2 – offset

delay1和delay2相等,那么可以得到如下公式:

Offset = ((t2-(t1+corr1))-(t4-(t3+corr2)))/2

linux ptp 应用软件

linux 开源社区提供了一个ptp 协议栈软件,linuxptp,它实现了1588v2协议。是一个基于用户空间的ptp协议栈软件;该软件是根据IEEE 1588 Linux标准实现的精确时间协议(PTP)。并使用Linux内核提供的相关应用程序编程接口(API)。

Linuxptp主要包含两个软件,一个是ptp4l,一个是phc2sys。

ptp4l:遵循IEEE 1588-2008标准文档规范,实现了BC(Boundary Clock)、OC(Ordinary Clock)和TC(Transparent Clock)等功能,也就是它可以设置时钟作为master,slave等;

phc2sys:phc2sys是一个同步系统中两个或多个时钟的程序。一般,它用于将系统时钟与PTP硬件时钟(PHC)同步,硬件时钟一般由ptp4l进行同步;

安装步骤:

git clone git://git.code.sf.net/p/linuxptp/code linuxptp 
cd linuxptp 
make 
make install

使用:

usage: ptp4l [options]

 Delay Mechanism

 -A        Auto, starting with E2E
 -E        E2E, delay request-response (default)
 -P        P2P, peer delay mechanism

 Network Transport

 -2        IEEE 802.3
 -4        UDP IPV4 (default)
 -6        UDP IPV6

 Time Stamping

 -H        HARDWARE (default)
 -S        SOFTWARE
 -L        LEGACY HW

 Other Options

 -f [file] read configuration from 'file'
 -i [dev]  interface device to use, for example 'eth0'
           (may be specified multiple times)
 -p [dev]  Clock device to use, default auto
           (ignored for SOFTWARE/LEGACY HW time stamping)
 -s        client only synchronization mode (overrides configuration file)
 -l [num]  set the logging level to 'num'
 -m        print messages to stdout
 -q        do not print messages to the syslog
 -v        prints the software version and exits
 -h        prints this message and exits

master 命令:ptp4l -A -i ens33 -S,使用软件时钟,如果有支持硬件时钟的网卡可使用硬件时钟 使用-p ptp0

slave 命令:ptp4l -A -i ens33 -S -s

linux 硬件时钟

一般ptp同步都会使用硬件时钟,使用硬件时钟才能获得更高时间同步精度,有的同步精度可达100ns以内;

为什么使用软件时钟的同步精度不能达到硬件时钟呢

  1. 软件时钟只能记录ptp报文在driver中的时刻,就是说t1,t2,t3,t4,记录的是报文在网络驱动发送或者接收的时间,但是时间到达物理链路还需经过多个步骤,比如说PCIe总线传输,网卡报文调度,phy调制等,这些时间不是可控的,也就是delay1 不一定 等于delay2,但是硬件时钟记录的时间更接近物理链路开始传输的时刻,物理链路传输时间总是确定的,这个记录的时间越接近物理链路传输时间,delay1 和delay2就越近似,同步精度就越高;

  2. 硬件时钟采取的时钟晶振一般更好,而且不存在linux 获取时间时的调度误差等,获取时间更精准

linux ptp整体架构

linux 支持ptp时钟同步,整体软件框架入上图所示,由应用程序,软件驱动,网卡phc组成,其中应用程序为linux ptp应用软件套件(ptp4l,phc2sys等),软件时钟驱动为phc时钟驱动,网卡硬件主要负责记录时间戳等功能;

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐