鮑中,鮑廣建,劉嬌
(中科芯集成電路有限公司,江蘇無(wú)錫,214072)
在現(xiàn)代通信網(wǎng)絡(luò)中,無(wú)論是汽車電子還是電信行業(yè)中的通信終端設(shè)備之間頻率、時(shí)間差異都要求保持在嚴(yán)格要求的范圍內(nèi),甚至達(dá)到ns級(jí)別,即時(shí)鐘同步。精確時(shí)間協(xié)議PTP(Precision Time Protocol)是一種對(duì)標(biāo)準(zhǔn)以太網(wǎng)終端設(shè)備進(jìn)行時(shí)間和頻率同步的成熟協(xié)議,行業(yè)內(nèi)也稱IEEE 1588 協(xié)議。
通信網(wǎng)絡(luò)中如果需要實(shí)現(xiàn)時(shí)鐘同步,一定需要支持精確時(shí)鐘同步協(xié)議的分布式(DSA)交換機(jī)。在linux驅(qū)動(dòng)體系中,分布式交換機(jī)驅(qū)動(dòng)是linux內(nèi)核的一個(gè)子系統(tǒng),主要用于支持使用Linux系統(tǒng)的特定供應(yīng)商的交換機(jī)。分布式交換機(jī)設(shè)計(jì)的理念就是能夠使用不需要經(jīng)修改的常用Linux網(wǎng)絡(luò)工具,如bridge、ifconfig等。
時(shí)鐘同步網(wǎng)網(wǎng)絡(luò)架構(gòu)由GM(Grand master)、BC(Boundary Clock)和OC(Ordinary Clock)組成,至少需要分為2級(jí),2級(jí)節(jié)點(diǎn)以下被分為端節(jié)點(diǎn),網(wǎng)絡(luò)架構(gòu)示意圖如圖1所示。
圖1 分級(jí)時(shí)鐘同步網(wǎng)絡(luò)架構(gòu)圖
在時(shí)間同步協(xié)議網(wǎng)絡(luò)中,所有節(jié)點(diǎn)按照主從關(guān)系進(jìn)行劃分,下一級(jí)的節(jié)點(diǎn)為上一級(jí)節(jié)點(diǎn)地從,上一級(jí)節(jié)點(diǎn)為下一級(jí)節(jié)點(diǎn)的主,最高等級(jí)的節(jié)點(diǎn)為Grandmaster,即所有節(jié)點(diǎn)的主時(shí)鐘,整個(gè)同步網(wǎng)絡(luò)中所有節(jié)點(diǎn)都參照Grandmaster的時(shí)鐘。時(shí)間同步網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)之間主從關(guān)系要么人為設(shè)置,要么采用 BMC(Best Master Clock)算法進(jìn)行實(shí)時(shí)的選舉。
OC(Ordinary Clock)普通時(shí)鐘一般為端節(jié)點(diǎn),即需要同步的各個(gè)終端設(shè)備;BC(Boundary Clock)一般為網(wǎng)絡(luò)中的交換設(shè)備,負(fù)責(zé)網(wǎng)絡(luò)Grandmaster時(shí)鐘的下發(fā)。Grandmaster時(shí)鐘主要通過(guò)PTP報(bào)文進(jìn)行下發(fā)數(shù)據(jù)。IEEE 1588 v2定義了PTP報(bào)文基于IPv4 和 Ethernet的報(bào)文格式,具體格式見(jiàn)圖2和圖3。
圖2 基于 IPv4 的 PTP 報(bào)文
圖3 基于Ethernet的PTP報(bào)文
精確時(shí)間同步協(xié)議網(wǎng)絡(luò)通過(guò)端口收發(fā)Announce(通告)報(bào)文,實(shí)現(xiàn)了端口數(shù)據(jù)集與端口狀態(tài)機(jī)之間的信息交互。為了在不增加系統(tǒng)開銷的情況下提高協(xié)議處理能力,需要對(duì)端口狀態(tài)進(jìn)行控制。BMC(Best Master Clock)算法將端口數(shù)據(jù)集與端口狀態(tài)機(jī)進(jìn)行對(duì)比,實(shí)現(xiàn)時(shí)鐘的主從關(guān)系。主從關(guān)系通常按照如下步驟實(shí)現(xiàn)主從關(guān)系的建立:
1)接收和解析來(lái)自網(wǎng)絡(luò)設(shè)備中的Announce報(bào)文;
2)利用BMC(最佳主時(shí)鐘)算法,對(duì)最優(yōu)時(shí)鐘和端口的推薦狀態(tài)進(jìn)行決策,包括Master(主), Slave(從)或者是Passive(被動(dòng))狀態(tài) ;
3)基于端口協(xié)商后的狀態(tài)對(duì)端口數(shù)據(jù)集合進(jìn)行更新;
4)根據(jù)所述推薦狀態(tài)及所述狀態(tài)進(jìn)行事件決策,基于所述端口狀態(tài)機(jī),確定端口的真實(shí)狀態(tài),實(shí)現(xiàn)了時(shí)鐘同步網(wǎng)絡(luò)。狀態(tài)判定事件包括Announce(通告)報(bào)文的接收事件和接收Announce(通告)報(bào)文的超時(shí)結(jié)束事件,接口收到Announce(通告)消息的間隔時(shí)間大于超時(shí)時(shí)間間隔時(shí),將此精確時(shí)間同步協(xié)議接口的狀態(tài)設(shè)置為Master。
當(dāng)主從關(guān)系建立后,即可以進(jìn)行頻率同步和時(shí)間同步。PTP本來(lái)只是用戶設(shè)備之間的高精度時(shí)間同步,但也可以被用來(lái)進(jìn)行設(shè)備之間的頻率同步。
精確時(shí)間同步協(xié)議記錄了主從設(shè)備間在事件報(bào)文交換過(guò)程中生成的時(shí)間戳,對(duì)主從設(shè)備間路徑延遲及時(shí)間偏移進(jìn)行計(jì)算,實(shí)現(xiàn)了主從設(shè)備在時(shí)間與頻率上的同步,設(shè)備需要支持2種模式搭載時(shí)間戳,分別是單步(One step)時(shí)鐘模式和兩步(Two step)時(shí)鐘模式。
PTP根據(jù)計(jì)算路徑延時(shí)機(jī)制劃分可以分為兩種方式:Delay以及Pdelay方式
1)E2E(End to End)延時(shí)請(qǐng)求 - 請(qǐng)求響應(yīng) :基于主從時(shí)鐘之間的總體路徑延時(shí)時(shí)間,計(jì)算時(shí)間差;
2)P2P(Peer to Peer)對(duì)端延時(shí) :根據(jù)主從時(shí)鐘之間的整條鏈路延時(shí)時(shí)間計(jì)算時(shí)間差。
以太網(wǎng)交換機(jī)一般由多個(gè)前置面板接口,一個(gè)CPU管理接口。DSA子系統(tǒng)在硬件上依賴于管理接口。管理接口從交換機(jī)中接收以太網(wǎng)幀,經(jīng)過(guò)Linux網(wǎng)絡(luò)協(xié)議棧的分析處理。對(duì)于每個(gè)前面板端口,DSA子系統(tǒng)創(chuàng)建專門的以太網(wǎng)節(jié)點(diǎn)(可設(shè)置IP地址),使用Linux網(wǎng)絡(luò)協(xié)議??刂贫斯?jié)點(diǎn),這些虛擬出來(lái)的網(wǎng)絡(luò)節(jié)點(diǎn)被稱為“從屬”節(jié)點(diǎn)。
分布式交換機(jī)硬件需要支持“交換機(jī)標(biāo)簽”,這些標(biāo)簽的插入位置由交換機(jī)芯片廠商決定。這些標(biāo)簽是為了讓CPU管理接口獲取信息:
(1)幀來(lái)自的物理端口
(2)幀轉(zhuǎn)發(fā)原因
(3)CPU發(fā)起的流量轉(zhuǎn)發(fā)到特定端口
DSA實(shí)現(xiàn)的軟硬件拓?fù)淙鐖D4所示。
圖4 Linux DSA 拓?fù)鋱D
交換機(jī)會(huì)把圖5中的以太網(wǎng)PTP報(bào)文發(fā)到管理端口上,其中標(biāo)簽協(xié)議的確切格式是特定于交換機(jī)提供商,但是一般Tag包含以太網(wǎng)幀來(lái)自/應(yīng)該發(fā)送到哪個(gè)端口等信息。
圖5 switch on PTP over Ethernet
在Linux DSA分布式子系統(tǒng)中,所有的標(biāo)記協(xié)議都在net/dsa/tag_*.c文件中。為了處理包含Tag的網(wǎng)絡(luò)幀需要在協(xié)議棧中添加Hook函數(shù),Hook對(duì)于接收到的網(wǎng)絡(luò)數(shù)據(jù)幀處理如圖6所示。
圖6 Hook 處理流程圖
在應(yīng)用層進(jìn)行ptp測(cè)試的軟件主要采用開源的ptpd、ptp4l或者gptp軟件,三者在ubuntu下都可以方便地通過(guò)apt安裝。數(shù)據(jù)幀在Linux下的數(shù)據(jù)幀流向如圖7所示。
圖7 DSA子系統(tǒng)驅(qū)動(dòng)原理圖
目前支持PTP協(xié)議的標(biāo)準(zhǔn)協(xié)議棧有3種:gptp, ptp4l和ptpd,三者主要工作在linux系統(tǒng)下,其中ptpd較早也容易移植到裸機(jī)下,此次采用ptpd進(jìn)行測(cè)試驗(yàn)證:
圖8 實(shí)驗(yàn)網(wǎng)絡(luò)架構(gòu)圖
圖9 實(shí)驗(yàn)記錄
在linux 系統(tǒng)下,使用PTPd協(xié)議棧進(jìn)行時(shí)鐘同步驗(yàn)證,同步10秒后,時(shí)鐘端節(jié)點(diǎn)和主時(shí)鐘節(jié)點(diǎn)實(shí)現(xiàn)了時(shí)鐘同步,同步精度可達(dá)到35ns,小于MAC層規(guī)定的100ns,實(shí)驗(yàn)取得了預(yù)期的效果。
本文對(duì)現(xiàn)代通信網(wǎng)絡(luò)中常用的PTP(Precision Time Protocol)協(xié)議進(jìn)行了綜合分析,分別對(duì)基本的時(shí)鐘同步原理及主從關(guān)系建立的步驟進(jìn)行了分析。接著對(duì)時(shí)鐘同步網(wǎng)絡(luò)中的關(guān)鍵節(jié)點(diǎn)交換機(jī)在Linux下的驅(qū)動(dòng)程序進(jìn)行了分析,包括數(shù)據(jù)幀的格式和數(shù)據(jù)幀的流向,最后運(yùn)用PTPd協(xié)議棧對(duì)PTP協(xié)議進(jìn)行了時(shí)鐘同步驗(yàn)證,通過(guò)主時(shí)鐘向在交換機(jī)的作用下向從節(jié)點(diǎn)發(fā)送同步消息,成功進(jìn)行了網(wǎng)絡(luò)時(shí)鐘同步。