什麼是ptp
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功能。
創建設備成功:
網卡已經支持硬件時間戳:
測試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://blog.csdn.net/BUPTOctopus/article/details/86246335
https://linuxptp.sourceforge.net