PTP 是一种高精度时间同步协议,可以到达亚微秒级精度,有资料说可达到30纳秒左右的偏差精度,但需要网络的节点(交换机)支持PTP协议,才能实现纳秒量级的同步。
一般在实际使用中,现有的NTP可以达到5ms以内的精度,对一般的应用都是满足的;非超高精度设备,不建议使用PTP设备。
与NTP主要区别:PTP是在硬件级实现的,NTP是在应用层级别实现的.
PTP 是主从同步系统,一般采用硬件时间戳,并配合一些对NTP更高精度的延时测量算法。
PTP 最常用的是直接在 MAC 层进行 PTP 协议包分析 , 这样可以不经过UDP 协议栈 , 减少PTP 在协议栈中驻留时间 , 提高同步的精确度。
PTP 也可以承载在 UDP 上时 , 软件可以采用 SOCKET 进行收发 UDP包 , 事件消息的 UDP 端口号 319 , 普通消息的组播端口号为 320 ,但其精度就大大降低。
在物理硬件要求主从端都是PTP设备,且网络不能太大,其中间经过的交换机设备也必须支持PTP协议,并且主从时间网络链路唯一,不存在交替的PTP通道。
PTPv2 采用相对时间同步机制。一个参与者被选作主时间钟,其将发送同步信息到从站。主站将发送同步报文到网络。所有的从站计算时间延迟。
PTP网络图:
在多个节点设备>2的情况,需要同步各个设备的时间,以保证一些事件(发生在任何设备上)发生顺序是正确的(每个设备的时间戳尽量和真实的时间是一样的),所以时钟同步很重要,ptp 1588协议就是解决这个问题。
PTP需要硬件mac或者PHY的支持,调试amba cv22 mac已经支持了ptp。有些PHy也是支持ptp的,需要驱动支持。
修改ambarella_cv22_defconfig
CONFIG_PTP_1588_CLOCK=y
配置make menucofig,支持Linuxptp工具,用于测试ptp功能。
创建设备成功:
网卡已经支持硬件时间戳:
测试工具:ptp4l
Enter the following command as root on your HOST:
$ ptp4l -i enp0s3 -m
Slave only mode on your board side:
# ptp4l -i eth0 -s -m
root@#/home/default/ptp4l -i eth0 -s -m
ptp4l[124.718]: selected /dev/ptp0 as PTP clock
[ 125.157591] SIOCSHWTSTAMP: f.0 t.1 f.c
ptp4l[124.755]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[124.755]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[126.126]: port 1: new foreign master 8cec4b.fffe.958140-1
ptp4l[130.127]: selected best master clock 8cec4b.fffe.958140
ptp4l[130.127]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[131.136]: master offset -1545626055960412635 s0 freq -4819 path delay 9262
ptp4l[132.136]: master offset -1545626055960417360 s1 freq -9543 path delay 9262
ptp4l[133.136]: master offset 4850 s2 freq -4693 path delay 9262
ptp4l[133.145]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[134.137]: master offset 6450 s2 freq -1638 path delay 7637
ptp4l[135.137]: master offset 3350 s2 freq -2803 path delay 7637
ptp4l[136.137]: master offset 1300 s2 freq -3848 path delay 7687
ptp4l[137.138]: master offset 325 s2 freq -4433 path delay 7737
ptp4l[138.138]: master offset 100 s2 freq -4560 path delay 7687
ptp4l[139.138]: master offset -175 s2 freq -4805 path delay 7687
ptp4l[140.138]: master offset -25 s2 freq -4708 path delay 7637
ptp4l[141.139]: master offset 31 s2 freq -4659 path delay 7631
ptp4l[142.139]: master offset -187 s2 freq -4868 path delay 7649
ptp4l[143.139]: master offset -62 s2 freq -4799 path delay 7649
ptp4l[144.139]: master offset 6 s2 freq -4750 path delay 7631
修改主机的时间date,从机也会相应的修改。master offset就是主从机的Offset between Master and Slave(PHC)。
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/ch-configuring_ptp_using_ptp4l#s2-Advantages_of_PTP
https://blog.csdn.net/BUPTOctopus/article/details/86246335
https://linuxptp.sourceforge.net