簡介
IEEE 802.1 TSN(Time-Sensitive Networking)工作組定義了一個基于802.x網(wǎng)絡(luò)架構(gòu)上提供同步時間低延遲服務(wù)能力的協(xié)議,其前身為IEEE AVB(Audio Video Bridgin)工作組,后于2012年重命名為TSN工作組以便于將相關(guān)協(xié)議標(biāo)準(zhǔn)更廣泛推廣;AVB/TSN包含多種具體協(xié)議標(biāo)準(zhǔn)(見如下表格),其中最重要的協(xié)議標(biāo)準(zhǔn)之一就是IEEE 802.1AS時鐘同步協(xié)議標(biāo)準(zhǔn),它基于IEEE 1588協(xié)議進(jìn)行精簡和修改,也稱為gPTP協(xié)議。
PTP協(xié)議是一種精確的時間同步協(xié)議,IEEE 1588標(biāo)準(zhǔn)為時鐘分配定義了一個主從式架構(gòu),由一個或多個網(wǎng)段及一個或多個時鐘組成。在局域網(wǎng)中能將時間同步精度控制在亞微秒級。PTP協(xié)議對時間戳在MAC層進(jìn)行加蓋, 消除了數(shù)據(jù)包在網(wǎng)絡(luò)協(xié)議棧中的處理時間延遲; 對時間戳的記錄和發(fā)送進(jìn)行確認(rèn), 得到數(shù)據(jù)包準(zhǔn)確的發(fā)送和接收時間。 相比于其它時間同步協(xié)議(如NTP),PTP協(xié)議的同步精度是最高的。
本文就基于NXP最新的i.MX8系列ARM處理器平臺進(jìn)行TSN時鐘同步的簡單測試。
本文所演示的平臺來自于ToradexVerdin iMX8M Plus和ApalisiMX8嵌入式平臺,這兩個平臺是基于近年發(fā)布的NXP iMX8系列ARM處理器,核心為Cortex-A53/A72。
2).硬件準(zhǔn)備
a).Verdin iMX8MP ARM核心版配合Dahlia Carrier Board載板,并連接調(diào)試串口,后續(xù)測試中作為TSN網(wǎng)絡(luò)中的Master Clock節(jié)點平臺。Verdin iMX8MP核心板板載PHY芯片的一路千兆網(wǎng)絡(luò)是完整支持包括TSN/AVB/IEEE1588等相關(guān)協(xié)議標(biāo)準(zhǔn)的網(wǎng)口,另外一路RGMII接口的MAC則支持AVB/IEEE1588。
b).Apalis iMX8 ARM核心版配合Apalis Eva Board載板,并連接調(diào)試串口,后續(xù)測試中作為TSN網(wǎng)絡(luò)中的Slave Clock節(jié)點平臺。Apalis iMX8核心板提供的兩路千兆網(wǎng)絡(luò)都是只支持AVB/IEEE1588,而不支持完整的TSN,不過由于本文僅測試時鐘同步因此也可以正常和Verdin iMX8MP搭配使用。
c).兩個平臺的千兆網(wǎng)口通過一根網(wǎng)線直通連接。
3).軟件準(zhǔn)備
a).如下圖,Toradex Verdin iMXMP模塊標(biāo)準(zhǔn)Ycoto Linux BSP中已經(jīng)包含了測試IEEE 802.1AS時鐘同步的Linuxptp工具,可以參考這里說明分別在Verdin iMX8MP模塊以及Apalis iMX8模塊上面安裝目前最新的LTS 5.7.2版本。
b).如果需要在本文基礎(chǔ)上進(jìn)一步測試IEEE 802.1Qav/Qbu/Qbv等隊列轉(zhuǎn)發(fā)協(xié)議,則需要如下方式在Ycoto編譯環(huán)境或者Linux BSP Runtime環(huán)境手動安裝ipoute2-tc工具軟件,并且可能需要對Linux Kernel/Device Tree做適當(dāng)?shù)男薷?,可以參考這里一個NXP Application Note文章說明。
---------------------------------------
### Ycoto Environment ###
# Add below to
IMAGE_INSTALL_append = " iproute2-tc"
### Linux BSP Runtime ###
$ opkg install iproute2-tc_5.5.0-r0_aarch64.ipk
---------------------------------------
3).具體測試流程
a).Toradex Ycoto Linux默認(rèn)使能了NTP時間同步協(xié)議,這是目前應(yīng)用最為廣泛的網(wǎng)絡(luò)時間同步協(xié)議,精度可以達(dá)到毫秒級別,在大多數(shù)對于時間同步精度要求沒有那么高的場景都可以應(yīng)用,本文為了測試gPTP高精度時間同步,具體測試過程中需要關(guān)閉NTP服務(wù),詳細(xì)步驟后續(xù)說明會提供。
b).實際的TSN網(wǎng)絡(luò)中,Master Clock節(jié)點通常會產(chǎn)生一個高精度時鐘,來源一般是GNSS(Global Navigation Satellite System) 結(jié)合PPS(Pulse?Per?Second)信號來進(jìn)行衛(wèi)星授時,本文重點不在于此,因此對于作為Master Clock節(jié)點的Verdin iMX8MP設(shè)備在安裝好Linux系統(tǒng)后,先僅只通過默認(rèn)開啟的NTP服務(wù)來進(jìn)行System Clock的同步校準(zhǔn),來簡單替代衛(wèi)星授時的功能。
./ NTP服務(wù)詳細(xì)配置方法可以參考這里,首先在Verdin iMX8MP Linux下完成NTP時間同步。
---------------------------------------
### NTP同步完成前的狀態(tài)信息###
root@verdin-imx8mp-07250979:~#timedatectl
Local time: Thu 2023-03-16 04:20:08 UTC
Universal time: Thu 2023-03-16 04:20:08 UTC
RTC time: Thu 2023-03-16 04:20:07
Time zone: Universal (UTC, +0000)
System clock synchronized: no
NTP service: active
RTC in local TZ: no
### NTP同步完成后的狀態(tài)信息###
root@verdin-imx8mp-07250979:~#timedatectl
Local time: Thu 2023-03-16 06:12:27 UTC
Universal time: Thu 2023-03-16 06:12:27 UTC
RTC time: Thu 2023-03-16 06:12:28
Time zone: Universal (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
---------------------------------------
./同步完成后關(guān)閉NTP服務(wù)
---------------------------------------
root@verdin-imx8mp-07250979:~# timedatectl set-ntp false
root@verdin-imx8mp-07250979:~# timedatectl
Local time: Thu 2023-03-16 06:17:49 UTC
Universal time: Thu 2023-03-16 06:17:49 UTC
RTC time: Thu 2023-03-16 06:17:50
Time zone: Universal (UTC, +0000)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: no
---------------------------------------
b). Verdin iMX8MP Master Clock節(jié)點上面通過linuxptp工具來配置gPTP服務(wù)
./主要使用的工具如下
ptp4l: daemon that synchronizes the PTP Hardware Clock (PHC) from the NIC
phc2sys: daemon that synchronizes the PHC and the System clock
pmc: utility tool to configure ptp4l in run-time
./首先后臺加載ptp4l daemon進(jìn)程,用于同步PHC
---------------------------------------
root@verdin-imx8mp-07250979:~# ptp4l -i eth0 -f ./gPTP.cfg --step_threshold=1 -m &
[1] 1092
ptp4l[1140.933]: selected /dev/ptp0 as PTP clock
root@verdin-imx8mp-07250979:~# ptp4l[1140.972]: port 1: INITIALIZING to LISTENING on INIT_COMPLE
TE
ptp4l[1140.972]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1144.641]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[1144.641]: selected local clock 00142d.fffe.6ea423 as best master
ptp4l[1144.641]: assuming the grand master role
---------------------------------------
//參數(shù)說明如下,更多參數(shù)選項以及詳細(xì)說明可以查看ptp4l manpage
-f選項指定gPTP.cfg配置文件,這個文件用于配置ptp4l工作于gPTP模式的設(shè)置參數(shù)
-i選項指定ptp4l所要控制的NIC網(wǎng)口界面
--step_threshold選項用于配置步進(jìn)時鐘的閾值,超過閾值,直接調(diào)整時鐘時間,單位秒
-m參數(shù)使能log信息打印輸出,這個可以視測試需要打開或者關(guān)閉
// Master所需的gPTP.cfg文件如下,更詳細(xì)的配置文件參考說明和模板可以參考這里。需要主要目前Linux系統(tǒng)里面的linuxptp軟件版本是2.0.1,請查看對應(yīng)branch的信息。
---------------------------------------
#
# 802.1AS example configuration containing those attributes which
# differ from the defaults. See the file, default.cfg, for the
# complete list of available options.
#
[global]
gmCapable 1
priority1 248
priority2 248
logAnnounceInterval 0
logSyncInterval -3
syncReceiptTimeout 3
neighborPropDelayThresh 800
min_neighbor_prop_delay -20000000
assume_two_step 1
path_trace_enabled 1
follow_up_info 1
transportSpecific 0x1
ptp_dst_mac 01:80:C2:00:00:0E
network_transport L2
delay_mechanism P2P
masterOnly 1
---------------------------------------
//默認(rèn)情況下,ptp4l通過BMCA(Best Master Clock Algorithm) 來判定當(dāng)前PHC是否可以被作為Grand Master職責(zé),也可以通過masterOnly或者slaveOnly參數(shù)來強(qiáng)制指定,本文使用后者。
---------------------------------------
ptp4l[1144.641]: selected local clock 00142d.fffe.6ea423 as best master
ptp4l[1144.641]: assuming the grand master role
---------------------------------------
./ PHC同步完成后,接下來進(jìn)行System Clock同步,這個步驟主要針對那些依賴于System clock工作的應(yīng)用,比如ALSA/GStreamer frameworks AVTP插件。
//由于PHC時間采用TAI(International Atomic Time) 標(biāo)準(zhǔn),而System Clock采用(Coordinated Universal Time) 標(biāo)準(zhǔn),需要通過pmc runtime工具配置相應(yīng)的轉(zhuǎn)換參數(shù)
---------------------------------------
root@verdin-imx8mp-07250979:~# pmc -u -b 0 -t 1 "SET GRANDMASTER_SETTINGS_NP clockClass 248 \
clockAccuracy 0xfe offsetScaledLogVariance 0xffff \
currentUtcOffset 37 leap61 0 leap59 0 currentUtcOffsetValid 1 \
ptpTimescale 1 timeTraceable 1 frequencyTraceable 0 \
timeSource 0xa0"
sending: SET GRANDMASTER_SETTINGS_NP
ptp4l[3021.662]: selected local clock 00142d.fffe.6ea423 as best master
00142d.fffe.6ea423-0 seq 0 RESPONSE MANAGEMENT GRANDMASTER_SETTINGS_NP
clockClass 248
clockAccuracy 0xfe
offsetScaledLogVariance 0xffff
currentUtcOffset 37
leap61 0
ptp4l[3021.662]: assuming the grand master role
leap59 0
currentUtcOffsetValid 1
ptpTimescale 1
timeTraceable 1
frequencyTraceable 0
timeSource 0xa0
---------------------------------------
//然后通過phc2sys工具來同步PHC和System Clock
---------------------------------------
root@verdin-imx8mp-07250979:~# phc2sys -s eth0 -c CLOCK_REALTIME --step_threshold=1 --transportSpecific=1 -w -m &
[2] 1058
phc2sys[600.436]: CLOCK_REALTIME phc offset 37000001087 s0 freq +0 delay 875
phc2sys[601.437]: CLOCK_REALTIME phc offset 37000001117 s1 freq +30 delay 875
phc2sys[602.437]: CLOCK_REALTIME phc offset -75 s2 freq -45 delay 875
phc2sys[603.437]: CLOCK_REALTIME phc offset 30 s2 freq +37 delay 875
phc2sys[604.437]: CLOCK_REALTIME phc offset -58 s2 freq -42 delay 875
---------------------------------------
//參數(shù)說明如下,更多參數(shù)選項以及詳細(xì)說明可以查看ptp4l manpage
-s選項指定來自于對應(yīng)NIC(eth0) 設(shè)備的PHC作為master clock
-c選項指定System Clock作為slave clock
--step_threshold選項用于配置步進(jìn)時鐘的閾值,超過閾值,直接調(diào)整時鐘時間,單位秒
--transportSpecific選項在基于gPTP domain運行是必要選項
-w參數(shù)使得phc2sys處于等待狀態(tài)直到ptp4l完成同步
-m參數(shù)使能log信息打印輸出,這個可以視測試需要打開或者關(guān)閉
//打印的log信息中,當(dāng)phc offset小于100ns即表示時鐘同步成功
c). Apalis iMX8 Slave Clock節(jié)點上面通過linuxptp工具來配置gPTP服務(wù),具體的流程和命令和Master一致,只是在gPTP.cfg配置文件中將masterOnly修改未slaveOnly。
./首先由于是Slave節(jié)點設(shè)備,保持Linux System Clock為系統(tǒng)安裝后的默認(rèn)時間設(shè)置,直接關(guān)閉NTP服務(wù)不進(jìn)行任何時間同步操作
---------------------------------------
root@apalis-imx8-07308034:~# timedatectl
Local time: Wed 2023-03-01 07:21:21 UTC
Universal time: Wed 2023-03-01 07:21:21 UTC
RTC time: Wed 2023-03-01 07:21:21
Time zone: Universal (UTC, +0000)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
---------------------------------------
./通過和Verdin iMX8MP設(shè)備的直連網(wǎng)絡(luò)和Master Clock同步PHC時間,由于gPTP協(xié)議都是基于MAC層的,因此網(wǎng)口無需設(shè)置IP地址也沒有問題。
---------------------------------------
root@apalis-imx8-07308034:~# ptp4l -i eth0 -f ./gPTP.cfg --step_threshold=1 -m &
[1] 28567
ptp4l[2838.949]: selected /dev/ptp0 as PTP clock
root@apalis-imx8-07308034:~# ptp4l[2838.996]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[2838.996]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[2842.064]: selected local clock 00142d.fffe.6f8302 as best master
ptp4l[2842.197]: port 1: new foreign master 00142d.fffe.6ea423-1
ptp4l[2844.197]: selected best master clock 00142d.fffe.6ea423
ptp4l[2844.197]: updating UTC offset to 37
ptp4l[2844.197]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[2845.348]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[2845.973]: rms 646417001599952 max 1292834003200590 freq +9621 +/- 3636 delay 668 +/- 0
ptp4l[2846.973]: rms 8 max 10 freq +10997 +/- 6 delay 668 +/- 0
ptp4l[2847.974]: rms 9 max 10 freq +11008 +/- 1 delay 668 +/- 0
ptp4l[2848.974]: rms 4 max 6 freq +11006 +/- 3 delay 668 +/- 0
......
---------------------------------------
//打印log信息中,rms為PHC和Grand Master clock之間offset的平方值,當(dāng)rms輸出持續(xù)小于100ns時候,表示同步成功。
//同時在Verdin iMX8MP的Master端,ptp4l也會打印如下信息,證明Slave以及連接Master 進(jìn)行精準(zhǔn)時間同步。
---------------------------------------
ptp4l[4137.874]: port 1: link up
ptp4l[4137.924]: port 1: FAULTY to LISTENING on INIT_COMPLETE
ptp4l[4141.728]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[4141.728]: selected local clock 00142d.fffe.6ea423 as best master
ptp4l[4141.728]: assuming the grand master role
---------------------------------------
//此時查看System Clock還是未同步的時間
---------------------------------------
### synchronous System clock on Verdin iMX8MP ###
root@verdin-imx8mp-07250979:~# date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-25
2023-03-16 08:01:22.94530
### non- synchronous System clock on Apalis iMX8 ###
root@apalis-imx8-07308034:~# date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-25
2023-03-01 08:02:46.75497
---------------------------------------
./通過phc2sys工具來同步PHC和System Clock
---------------------------------------
root@apalis-imx8-07308034:~# phc2sys -s eth0 -c CLOCK_REALTIME --step_threshold=1 --transportSpecific=1 -w -m &
[2] 15230
phc2sys[1487.465]: CLOCK_REALTIME phc offset -1295917493725168 s0 freq +0 delay 2625
phc2sys[1488.466]: CLOCK_REALTIME phc offset -1295917493714065 s1 freq +11096 delay 2625
phc2sys[1489.466]: CLOCK_REALTIME phc offset -64 s2 freq +11032 delay 2625
phc2sys[1490.467]: CLOCK_REALTIME phc offset -71 s2 freq +11006 delay 2624
phc2sys[1491.467]: CLOCK_REALTIME phc offset 34 s2 freq +11090 delay 2625
---------------------------------------
//打印log信息中phc offset小于100ns即表示時鐘同步成功
//此時查看System Clock則已經(jīng)和Grand Master同步
---------------------------------------
### synchronous System clock on Verdin iMX8MP ###
root@verdin-imx8mp-07250979:~# date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-25
2023-03-16 08:07:39.33336
### synchronous System clock on Apalis iMX8 ###
root@apalis-imx8-07308034:~# date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-25
2023-03-16 08:07:40.54055
---------------------------------------
d).另外為了更方便的測試PHC和System Clock是否同步成功,可以使用check_clocks工具,下載源碼后參考這里說明用如下命令進(jìn)行交叉編譯,生成可執(zhí)行文件在設(shè)備Linux下運行驗證時鐘同步情況
---------------------------------------
### compile binary on developing host ###
$ ${CROSS_COMPILE}gcc -o check_clocks check_clocks.c
### check on Verdin iMX8MP Master ###
root@verdin-imx8mp-07250979:~# ./check_clocks -v -d eth0
Dumping timestamps and deltas
rt tstamp: 1678954738288637418
tai tstamp: 1678954775288637543
phc tstamp: 1678954775288641175
rt latency: 125
tai latency: 125
phc latency: 1860
phc-rt delta: 37000003757
phc-tai delta: 3632
Clocks on this system are synchronized :)
### check on Apalis iMX8 Slave ###
root@apalis-imx8-07308034:~# ./check_clocks -v -d eth0
Dumping timestamps and deltas
rt tstamp: 1678954739151415597
tai tstamp: 1678954776151415847
phc tstamp: 1678954776151421106
rt latency: 125
tai latency: 250
phc latency: 3468
phc-rt delta: 37000005509
phc-tai delta: 5259
Clocks on this system are synchronized :)
---------------------------------------
5).總結(jié)
本文基于NXP iMX8系列處理器簡單演示了TSN通過gPTP協(xié)議進(jìn)行網(wǎng)絡(luò)時間同步的機(jī)制。
審核編輯:黃飛
-
處理器
+關(guān)注
關(guān)注
68文章
19313瀏覽量
230054 -
NXP
+關(guān)注
關(guān)注
60文章
1281瀏覽量
184418 -
Linux
+關(guān)注
關(guān)注
87文章
11312瀏覽量
209713 -
網(wǎng)絡(luò)時鐘
+關(guān)注
關(guān)注
0文章
10瀏覽量
6819 -
TSN
+關(guān)注
關(guān)注
3文章
241瀏覽量
16861
發(fā)布評論請先 登錄
相關(guān)推薦
評論