IEEE1588 Precision Time Protocol(PTP)

什麼是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網絡圖:

PTP grandmaster, boundary, and slave Clocks

解決什麼問題

在多個節點設備>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://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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章