linux ptp时钟同步
本文描述linux系统如何支持IEEE1588 协议,又称 PTP( precise time protocol,精确时间协议),包含时间同步原理,ptpl4,linux ptp驱动等内容。
本文描述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以内;
为什么使用软件时钟的同步精度不能达到硬件时钟呢
-
软件时钟只能记录ptp报文在driver中的时刻,就是说t1,t2,t3,t4,记录的是报文在网络驱动发送或者接收的时间,但是时间到达物理链路还需经过多个步骤,比如说PCIe总线传输,网卡报文调度,phy调制等,这些时间不是可控的,也就是delay1 不一定 等于delay2,但是硬件时钟记录的时间更接近物理链路开始传输的时刻,物理链路传输时间总是确定的,这个记录的时间越接近物理链路传输时间,delay1 和delay2就越近似,同步精度就越高;
-
硬件时钟采取的时钟晶振一般更好,而且不存在linux 获取时间时的调度误差等,获取时间更精准
linux ptp整体架构
linux 支持ptp时钟同步,整体软件框架入上图所示,由应用程序,软件驱动,网卡phc组成,其中应用程序为linux ptp应用软件套件(ptp4l,phc2sys等),软件时钟驱动为phc时钟驱动,网卡硬件主要负责记录时间戳等功能;
更多推荐
所有评论(0)