PTP时延指的是一个设备的master port和另一个设备的slave port之间PTP报文传输路径时延。
PTP协议定义了两种时延的测量方法,通过测量时延,可以算出master 和slave之间时间偏差(time offset),有了时间偏差,就可以调整slave的时间了。
下面介绍下两种时延测量方法:
1) Delay request-response mechanism
平均时延:Mean Path Delay = [(t2 – t1) + (t4 – t3)]/2 = [(t2 – t3) + (t4 – t1)]/2
此处是假设了master到slave的时延 等于 slave到master的时延: t-ms = t-sm
t1是Sync报文从Master发出的时间点,携带在Sync报文中
t2是Slave收到Sync报文的时间点
t3是Delay_Req从Slave发出的时间点
t4是Master收到Delay_Req的时间点,携带在Delay_Resp报文发回给Slave。
注意:如果某些硬件性能不佳,无法在Sync报文中添加精确的t1,可以通过增加发送一个Follow_Up报文且携带精确的t1,而在Sync报文里携带t1的估计值或着0;
Slave有了t1/t2/t3/t4后,可以算出从master到slave的时延(Mean Path Delay)。
有了时延值后,可以算出master和slave之间时间偏差time offset:
Time Offset = t2-t1-Mean Path delay = [(t2 – t1) - (t4 – t3)]/2=[(t-ms) - (t-sm)]/2
Time Offset就是slave相对于master 的时间滞后值(可正可负),
因此,Slave的时间 = master时间+time Offset
2) Peer delay mechanism
此测量方法用于两个端口之间的链路时延测量;
- 对于边界时钟或普通时钟,如果在端口开启此测量方法的话,无论端口是master或着slave都需要进行测量。
- 对于透明时钟,只有PeertoPeer的透明时钟才可以进行此测量。
- 注意此测量方法只能用于两个时钟(边界时钟/普通时钟/PeertoPeer的透明时钟,这些时钟的任意组合)之间,也就最好是点到点的连接;如果存在多个NodeB,也就是NodeA连接到多个NodeB,那么就会出现一些严重问题,比如透明时钟无法将测量到的多个链路时延和经过的多个Sync报文一一关联;所以目前规范限制不用一对多的场景。
平均时延:Mean Path Delay = [(t2 – t1) + (t4 – t3)]/2 = [(t2 – t3) + (t4 – t1)]/2
此处是假设了NodeA到NodeB的时延 等于 NodeB到NodeA的时延
t1是Pdelay_Req报文从NodeA发出的时间点
t2是NodeB收到Pdelay_Req报文的时间点
t3是NodeB发送Pdelay_Resp的时间点,并在Pdelay_Resp携带t3和t2的信息(如:t3-t2)
t4是NodeA收到Pdelay_Resp的时间点
NodeA有了t1/t2/t3/t4后,可以算出从NodeA到NodeB的时延(Mean Path Delay)。
注意:如果某些硬件性能较低,可以在Pdelay_Resp_follow_up携带t3-t2,或者在Pdelay_Resp只携带t2,在Pdelay_Resp_follow_up携带t3;
有了时延,如何去计算time offset呢?
由于是peer to peer的时延,没有master和slave的概念,也就是上述测量过程中还没有包含主时钟的时间信息的Sync报文。因此并不能直接用NodeA的t1/t2去计算time offset;
还需要从Sync报文(或follow_up)交互去得到t1和t2值,然后用上面Delay request-response mechanism里介绍的公式计算time offset:
Time Offset = t2-t1-Mean Path delay
Time Offset就是slave相对于master 的时间滞后值(可正可负),
因此,Slave的时间 = master时间+time Offset
PeertoPeer的timeoffset的计算也可以参考下图:
总结:
一个设备的某个端口既可以支持Delay request-response mechanism,也可以支持Peer delay mechanism ,但是只能激活其中一种方式,不能两个都同时激活。