PTP的一些名词
PTP域中的节点称为时钟节点,PTP协议定义了以下三种类型的基本时钟节点:
OC(Ordinary Clock,普通时钟):只有一个PTP通信端口的时钟是普通时钟。
BC(Boundary Clock,边界时钟):有一个以上PTP通信端口的时钟。
TC(Transparentclock,透明时钟):与BC/OC相比,BC/OC需要与其它时钟节点保持时间同步,而TC则不与其它时钟节点保持时间同步。TC有多个PTP端口,但它只在这些端口间转发PTP协议报文并对其进行转发延时校正,而不会通过任何一个端口同步时间。TC包括以下两种类型:
E2ETC(End-to-End TransparentClock,端到端透明时钟):直接转发网络中非P2P(Peer-to-Peer,点到点)类型的协议报文,并参与计算整条链路的延时。
P2PTC(Peer-to-PeerTransparent Clock,点到点透明时钟):只直接转发Sync报文、Follow_Up报文和Announce报文,而终结其它PTP协议报文,并参与计算整条链路上每一段链路的延时。
一般链式的P2P网络选择E2E-TC,而从钟节点较多的网络考虑P2P-TC。因在 P2P 延时测量机制中,延时报文交互是在每条链路的两个端口间进行的,主钟只与直接相连的网络交换设备有延时报文交互,因此在 P2P TC 的延时测量机制中,没有对从钟数量的限制。
主时钟:一个PTP通信子网中只能有一个主时钟。
2、硬件支持
查看网卡是否支持软硬件时间戳:sudo ethtool -T eno1
软件时间戳需要包括参数
SOF_TIMESTAMPING_SOFTWARE
SOF_TIMESTAMPING_TX_SOFTWARE
SOF_TIMESTAMPING_RX_SOFTWARE
硬件时间戳需要包括参数
SOF_TIMESTAMPING_RAW_HARDWARE
SOF_TIMESTAMPING_TX_HARDWARE
SOF_TIMESTAMPING_RX_HARDWARE
3、LinuxPTP源码下载
-
sudo git
clone git://git.code.sf.net/p/linuxptp/code linuxptp
-
cd linuxptp
-
sudo make
-
sudo make install
查看Usage:ptp4l -h
4、run linuxptp
-
4.1 软件时间戳,主从模式测试
服务端(主钟):sudo ptp4l -i enp0s31f6 -m -S (网卡名按照对应连接的实际网卡名进行修改)
客户端(从钟):sudo ptp4l -i eno1 -m -S -s (网卡名按照对应连接的实际网卡名进行修改)
运行结果:
主钟:
从钟:
运行一会儿以后:
log中的内容为:
master offset : 即PTP协议中定义的主从端时间差,单位:ns
s0,s1,s2 : 表示时钟伺服器的不同状态,s0表示未锁定,s1表示正在同步,s2表示锁定,锁定状态表示不会再发生阶跃行同步,只是缓慢调整
freq:
port 0:INITIALIZING to LISTENING on INIT_COMPLET : 本地PTP管理的Unix域socket;
port 1:new foreign … : eno1上的端口,实际主从同步端口;
从钟端口状态由UNCALIBRATED 变为SLAVE时,则从钟已经成功地与best master同步。若将主时钟端服务退出,则从时钟端会选择本地时钟作为best master。
-
4.2 硬件时间戳测试
服务端(主钟):sudo ptp4l -i enp0s31f6 -m -H
客户端(从钟):sudo ptp4l -i eno1 -m -H -s
运行结果:
从钟:
显然用硬件时间戳同步的精度高得多。
-
4.3 透明时钟(TC)模式测试(有问题)
TC和BC都需要及其至少有两个interface;
执行命令:sudo ptp4l -i eno1 -m -H -t
提示无效的选项:
usage里分明写着 -t 是transparent clock 啊sudo vim ptp4l.8
嗯,-f -i -m -p -l -i -A -E -P -2 -4 -6 -H -S -L -q -v -h
??就是没有-t,不懂了
- 强行TC/BC:需要设备有俩网卡,一个卡绑从钟一个卡绑定主钟,来实现TC/BC。
- 最近开发时遇到的USRP的U L O问题:
转自:https://blog.youkuaiyun.com/BUPTOctopus/article/details/86246335