一種基于PTP 協(xié)議的局域網(wǎng)高精度時鐘同步方法
1 引言
在分布式系統(tǒng)中, 常常需要一個全局時間, 用來確定系統(tǒng)中各種事件發(fā)生的先后、協(xié)調(diào)各種消息的傳輸?shù)?以控制和監(jiān)視系統(tǒng)的狀態(tài)。這就需要將系統(tǒng)中各個部件的局部時間統(tǒng)一,進(jìn)行時鐘同步。隨著分布式仿真系統(tǒng)和試驗系統(tǒng)在網(wǎng)絡(luò)上的廣泛應(yīng)用,如何在網(wǎng)絡(luò)上提供可靠的時鐘服務(wù)成為一項重要課題。并且由于系統(tǒng)速度上的要求,同步的精度也成為一項重要指標(biāo)。
PTP(PrecisiON Time Protocol)協(xié)議是IEEE-1588中定義的一種精密時鐘同步協(xié)議,PTP 協(xié)議主要針對于相對本地化、網(wǎng)絡(luò)化的系統(tǒng), 子網(wǎng)較好, 內(nèi)部組件相對穩(wěn)定的環(huán)境設(shè)計的。由于PTP 協(xié)議實現(xiàn)簡單,占用的網(wǎng)絡(luò)和計算資源少等優(yōu)點(diǎn)使其廣泛應(yīng)用于分布式系統(tǒng)中。
PTP 協(xié)議可以采用硬件實現(xiàn),也可以采用軟件實現(xiàn)。當(dāng)采用硬件實現(xiàn)時可以達(dá)到ns 級的精度,采用軟件實現(xiàn)時通常可以達(dá)到ms 級的精度。當(dāng)在網(wǎng)絡(luò)中采用軟件實現(xiàn)亞毫秒的精度時,存在多種因素的影響造成了時間同步的不可靠。包括網(wǎng)絡(luò)的不平穩(wěn)性、網(wǎng)卡對信息包的緩存效應(yīng)以及操作系統(tǒng)進(jìn)程調(diào)度的影響,這些因素通常不可預(yù)測并且無法控制, 造成時鐘同步最終的失效。
本文中結(jié)合計算機(jī)自身的特點(diǎn)和PTP 協(xié)議時鐘同步機(jī)制,提出了一種純軟件實現(xiàn)的局域網(wǎng)內(nèi)高精度時鐘同步方法, 通過構(gòu)造高精度時鐘, 采取握手機(jī)制以及對測量結(jié)果進(jìn)行處理,實現(xiàn)了局域網(wǎng)內(nèi)亞毫秒精度的時間同步, 有效解決了各種因素對時鐘同步的影響
。
2 PTP 協(xié)議時鐘同步原埋與分析
一個簡單的基于PTP 協(xié)議時鐘同步機(jī):制的系統(tǒng)包含一個主時鐘和多個從時鐘,時間同步主要通過分別在發(fā)送方和接收方對包含時間的信息打時戳, 并在接收方根據(jù)時戳計算出主從時鐘的時間偏差和時間信息在網(wǎng)絡(luò)中傳輸?shù)难訒r來實現(xiàn)。為了管理這些時間信息,PTP 協(xié)議定義了四種信息類型,包括Sync(同步信息)、FollowUp(Sync 之后的跟隨信息)、DelayReq(延時校正申請信息)和DelayResp(對延時校正申請信息的響應(yīng))。
主從時鐘的差異主要由時鐘偏差和信息包在網(wǎng)絡(luò)傳輸中的延遲構(gòu)成,PTP 協(xié)議時鐘同步機(jī)制中, 主從時鐘的同步主要分為兩個階段, 偏移校正和延時校正階段。具體流程如圖1 所示。
圖1 PTP 協(xié)議時鐘同步原理
在偏移校正階段, 即圖中的A 階段, 首先由主時鐘在1 TM 時刻發(fā)出Sync 信息到從時鐘,在Sync 信息中包含了一個時間戳, 描述了數(shù)據(jù)發(fā)出的預(yù)計時間。由于信息包含的是預(yù)計的發(fā)出時間而不是真實的發(fā)出時間, 所以Sync 信息真實的發(fā)出時間被測量后在隨后的FollowUp信息中發(fā)出。在從時鐘一方,記錄下Sync 信息真實的接收時間TS1 , 由TM1 和TS1 可以計算出從時鐘相對于主時鐘的時間偏差offset :
可由該時間偏差來校正從時鐘。但由此計算出來的結(jié)果仍然包含有時間信息在網(wǎng)絡(luò)中傳輸造成的延時,因此還需要進(jìn)行延時校正。
在延時校正階段, 即圖中的B 階段, 首先由從時鐘發(fā)出Del ayReq 信息到主時鐘,從時鐘記錄下發(fā)送的準(zhǔn)確時間TS2 ,主時鐘記錄下接收的準(zhǔn)確時間2 TM ,并將該時間通過DelayResp 返回到從時鐘。從時鐘通過這兩個時間計算出網(wǎng)絡(luò)延時delay :
從時鐘利用該值來進(jìn)行校正。此時經(jīng)過偏移校正和延時校正, 主從時鐘達(dá)到同步。
但在實際應(yīng)用中, 尤其是在網(wǎng)絡(luò)中采用純軟件實現(xiàn)時,簡單采用上述流程進(jìn)行時鐘同步并不能達(dá)到亞毫秒的同步精度。這主要是由于網(wǎng)卡的緩存效應(yīng)、網(wǎng)絡(luò)的不平穩(wěn)性以及操作系統(tǒng)進(jìn)程調(diào)度等多方面的影響。
網(wǎng)絡(luò)中在進(jìn)行信息傳輸時,信息首先送到本地網(wǎng)卡的緩沖區(qū),并在網(wǎng)絡(luò)空閑時發(fā)送到接收方網(wǎng)卡的緩沖區(qū)。這樣在發(fā)送方連續(xù)發(fā)送多個信息到接收方時,信息首先在緩沖區(qū)緩存,包括發(fā)送方網(wǎng)卡的緩存和接收方網(wǎng)卡的緩存,在接收方接收信息時可能會同時收到所有的信息。這直接導(dǎo)致了信息接收時間測量不準(zhǔn)確,造成時間同步的失效。
表1 時鐘偏差測量( 單位: u s 間隔: 1 s )
相對于網(wǎng)卡的緩存效應(yīng),網(wǎng)絡(luò)的不平穩(wěn)性和操作系統(tǒng)的進(jìn)程調(diào)度則更復(fù)雜一些,因為這兩個因素具有不確定性,而且是無法控制的。網(wǎng)絡(luò)的不平穩(wěn)性導(dǎo)致了信息包在網(wǎng)絡(luò)中傳輸?shù)难舆t不可預(yù)測, 影響了同步的精度。
而操作系統(tǒng)采用時間片輪轉(zhuǎn)機(jī)制對進(jìn)程進(jìn)行調(diào)度,使得無法控制時間同步進(jìn)程何時被調(diào)度, 何時停止, 造成了軟件延時的不可預(yù)測。例如, 表1 中的數(shù)據(jù)是在局域網(wǎng)中測得的幾組數(shù)據(jù), 表示的是主時鐘和從時鐘的偏差,單位為us。在測試過程中主時鐘每隔1s 向從時鐘連續(xù)發(fā)送10 個偏移校正時間信息,為了保證網(wǎng)絡(luò)處于一定的活躍狀態(tài),網(wǎng)絡(luò)中的一些計算機(jī)開啟FTP 下載。從表1中的數(shù)據(jù)可以看出, 每組中連續(xù)發(fā)送的數(shù)據(jù)相對穩(wěn)定,相對偏差約幾十u s , 但會出現(xiàn)一些差異較大的特殊值,而組與組之間的數(shù)據(jù)則差異較大,從幾ms 到幾百ms 不等, 這樣無法斷定哪些數(shù)據(jù)對于時鐘同步是可靠的。
經(jīng)過以上分析可知, 必須對上述因素進(jìn)行相應(yīng)處理, 否則無法達(dá)到高精度的時鐘同步。
3 基于 PTP 協(xié)議的高精度時鐘同步方法
高精度時鐘是實現(xiàn)高精度時鐘同步的基礎(chǔ), 因此本方法首先構(gòu)造高精度時鐘。在此基礎(chǔ)上,通過對PTP 協(xié)議的分析,為了解決網(wǎng)卡的緩存效應(yīng)、網(wǎng)絡(luò)的不平穩(wěn)性和操作系統(tǒng)進(jìn)程調(diào)度對時鐘同步精度造成的影響, 在PTP 協(xié)議基礎(chǔ)上引入握手機(jī)制, 同時, 采用過濾和直線擬合的方法, 實現(xiàn)亞毫秒精度的時鐘同步。
3.1 高精度時鐘的構(gòu)造
對于一個系統(tǒng)來說, 時鐘可分為兩種, 物理時鐘和邏輯時鐘。物理時鐘又稱為絕對時鐘或者墻上時鐘,對應(yīng)于現(xiàn)實世界中的時間。通常通過計算機(jī)內(nèi)置的時鐘芯片可以獲得ms 級別的物理時鐘。相對時鐘是指系統(tǒng)獨(dú)有的時鐘,獨(dú)立于物理時鐘,但和物理時鐘有一定的換算關(guān)系。
當(dāng)系統(tǒng)與外界無相互作用時, 系統(tǒng)內(nèi)的時鐘可以采用邏輯時鐘來實現(xiàn)。邏輯時鐘實現(xiàn)簡單,方法多樣,并且可以滿足大多數(shù)場合的要求,許多系統(tǒng)中都采用了邏輯時鐘。
為了實現(xiàn)高精度的定時,例如微秒級別的定時,一般采用高頻率的晶振實現(xiàn)。其實計算機(jī)CPU 本身就帶有一個高精度的時鐘,對于一個2GHz 的CPU 來說,這個時鐘的定時精度可達(dá)0.5ns。并且Windows 系統(tǒng)提供了一些接口來獲取CPU 的震蕩頻率和計算機(jī)開機(jī)以后定時器的計數(shù)值,因此可以通過這些API 接口來構(gòu)造一個高精度的邏輯時鐘, 并且可向物理時間單位進(jìn)行轉(zhuǎn)換。
在這里使用t0 表示CPU 定時器的計數(shù)值, △t 表示邏輯時間相對于CPU 計數(shù)的偏差,當(dāng)前邏輯時間t 可由下式構(gòu)造:
并且當(dāng)前邏輯時間t 的修改可通過修改Dt 來實現(xiàn)。
當(dāng)需要使用物理時間單位來度量邏輯時間時, 可進(jìn)行相應(yīng)的轉(zhuǎn)換。轉(zhuǎn)換公式如下:
其中t’為以us 為單位的邏輯時間, f 為CPU 時鐘震蕩頻率,該值可由windows 提供的API 來獲得。
雖然CPU 的時鐘頻率很高,但由于獲取CPU 的計數(shù)值也需要消耗時間, 所以并不能達(dá)到CPU 時鐘級別的精度。經(jīng)實驗表明,由該方法構(gòu)造的邏輯時鐘可以達(dá)到1us 的精度。這可以滿足大多數(shù)場合的需要。
3.2 握手機(jī)制
對于網(wǎng)卡的緩存效應(yīng),通過增大兩次傳輸之間的時間間隔并不能有效解決。間隔小起不到隔離兩次傳輸?shù)淖饔?間隔大,時鐘同步又將受到網(wǎng)絡(luò)的不平穩(wěn)性和操作系統(tǒng)進(jìn)程調(diào)度的較大影響。而采用握手機(jī)制和阻塞的SOCKET套接字可有效解決這個問題。即在接收方收到信息后返回一個確認(rèn)信息,而發(fā)送方只有在收到接收方的確認(rèn)信息以后才發(fā)送下一條信息。這樣將兩次信息傳輸進(jìn)行了隔離,使得接收方不會一下收到發(fā)送方的所有信息。
3.3 時鐘同步的時間要求
網(wǎng)絡(luò)的不平穩(wěn)性和操作系統(tǒng)進(jìn)程調(diào)度的影響可能會造成時鐘同步的失效。但通過分析發(fā)現(xiàn), 盡管存在這些因素, 實現(xiàn)高精度的時鐘同步是可能的。在下面表2 中列出了5 組數(shù)據(jù)(共測試了10 組,從中隨機(jī)選擇了5 組數(shù)據(jù)), 測試環(huán)境與表1 中數(shù)據(jù)測試環(huán)境是相同的, 同樣都采用了握手機(jī)制以避免網(wǎng)卡的緩存效應(yīng), 只是在測試過程中主時鐘向從時鐘發(fā)送兩組數(shù)據(jù)的間隔為10mS。
從表中的數(shù)據(jù)可看出,除去一些差異較大的奇異值,測得的主從時鐘偏差是穩(wěn)定的, 大約幾十us 左右,這表明在這一段時間內(nèi)完成0.1ms 精度時鐘同步是可以實現(xiàn)的。
表2 時鐘偏差測量( 單位: u s 間隔: 1 0ms )
通過以上分析可知, 為了在網(wǎng)絡(luò)和操作系統(tǒng)相對平穩(wěn)的情況下完成時鐘同步操作,需要同步消耗的時間盡可能的短, 但是為了得到穩(wěn)定可靠的數(shù)據(jù), 又需要有足夠的數(shù)據(jù)以供分析處理。
3.4 數(shù)據(jù)處理算法
為了從測量的數(shù)據(jù)中獲取有效的數(shù)據(jù), 需要對數(shù)據(jù)進(jìn)行處理。首先, 數(shù)據(jù)中存在一些差異較大的值, 這需要查找到這部分?jǐn)?shù)據(jù)并予以過濾以消除影響。另外, 為了使剩余有效數(shù)據(jù)的方差最小, 還需要對這些數(shù)據(jù)進(jìn)行擬合。
假設(shè)Data [1 : N ]為測量的N 個數(shù)據(jù), Data '[1 : M ]為過濾后的數(shù)據(jù), 過濾處理過程可按下式進(jìn)行。其中M = N - m - n。
fm,n首先對數(shù)據(jù)進(jìn)行排序, 這樣差異較大的值就排在了數(shù)組的兩邊, 剔除m 個小值和n 個大值, 即可實現(xiàn)對數(shù)據(jù)的過濾處理。m 和n 為可變參數(shù),根據(jù)數(shù)據(jù)量的大小和數(shù)據(jù)的穩(wěn)定程度確定。
由于數(shù)據(jù)Data '[1 : M ]趨向于一條水平直線,可利用直線y = C 對數(shù)據(jù)進(jìn)行最小二乘直線擬合。在這里即是對這些數(shù)據(jù)進(jìn)行均值處理。擬合可按下式進(jìn)行。
這樣從N 數(shù)據(jù)中獲得最佳擬合值C 。
3.5 時鐘同步完整步驟
根據(jù)以上的結(jié)論, 并結(jié)合PTP 協(xié)議時鐘同步機(jī)制,可設(shè)計出一種性能可靠的時鐘同步方案,具體流程如下圖所示。
(1) 主時鐘在TM1[1]發(fā)送Sync 信息到從時鐘,并記錄下發(fā)送的準(zhǔn)確時刻TM1[1],隨后在Fol lowUp 信息中將Sync信息發(fā)送的時刻TM1[1]發(fā)送到從時鐘。從時鐘接收到Syn c 信息后記錄下準(zhǔn)確的接收時刻TS1[1],并返回確認(rèn)信息OK。
(2) 重復(fù)上述過程 N 次,這樣從時鐘得到N 個時鐘信息的發(fā)送和接收時刻TM1[1 : N]和 TS1[1 :N ],將TM1[1 : N]和 TS1[1 :N ]做差,得到主從時鐘的N 個偏移值Offset [1 : N ]。
(3) 對Offset [1 : N ]進(jìn)行過濾處理和直線擬合,得到一個對所有數(shù)據(jù)的最佳擬合值offset ,并利用該值對從時鐘進(jìn)行偏移校正, 即圖中的A 階段。
(4) 由從時鐘發(fā)送 DelayReq 信息到主時鐘,并記錄下準(zhǔn)確的發(fā)送時刻TS2[1],主時鐘收到DelayReq 信息后記錄下準(zhǔn)確的接收時刻TM2[1],并在隨后的DelayResp中將TM2[1]返回給從時鐘。
(5) 重復(fù)第4 步中的過程M 次,從時鐘得到2M個時鐘信息, TM2[1 :N ]和TS2[1 : N],對兩個數(shù)組做差得到M 個主從時鐘的延時信息Delay [1 : M ] 。
(6) 對延時信息 Delay [1 : M ] 進(jìn)行過濾處理和直線擬合, 得到一個對延時信息的最佳擬合值delay , 并利用該值對從時鐘進(jìn)行延時校正,即圖中的B 階段。
圖2 時鐘同步完整步驟。
在網(wǎng)絡(luò)相對平穩(wěn), 計算機(jī)負(fù)載不大的情況下取M = N = 10,m = n = 2 即可滿足亞毫秒精度要求。
經(jīng)過以上六步, 即完成了一次主從時鐘同步, 為了避免時鐘累積誤差對系統(tǒng)同步精度的影響,可周期進(jìn)行上述過程, 保持系統(tǒng)同步。
4 實驗結(jié)果與分析
測試中采用了4 臺配置相同的計算機(jī), 采用交換機(jī)搭建成局域網(wǎng), 其中1 臺作為主時鐘,其余作為從時鐘。
邏輯時鐘采用了利用上述原理構(gòu)造的高精度時鐘,CPU頻率為1.79553GHz,可利用式t,= t * 106 / f 轉(zhuǎn)換成以u s 為單位的邏輯時鐘。為了獲取一定數(shù)量的數(shù)據(jù), 取M = N = 10,m = n = 2 。為了保持網(wǎng)絡(luò)處于一定的活躍狀態(tài), 在計算機(jī)上開啟F T P 下載, 交換機(jī)負(fù)載在5MB/ s 左右。
測試與時鐘同步過程類似,在主從時鐘同步之后,由主時鐘發(fā)送Sync 信息到從時鐘,并在隨后的FollowUp信息中將Sync 信息發(fā)送的準(zhǔn)確時刻TM 發(fā)送過來,從時鐘記錄下Sync 信息準(zhǔn)確的接收時間TS 。因為此時時鐘已經(jīng)同步,所以TS - TM 即為時間信息在傳輸中的延時delay T ,將此值delay T 與延時校正中延時信息的最佳擬合值delay 進(jìn)行比較, 即可得出主從時鐘的同步效果。
在表3 中列出了隨機(jī)選取的10 組數(shù)據(jù)。
表3 測試結(jié)果
從表3 測試結(jié)果中可以看出, 最大的絕對誤差為-25.3us,平均誤差僅為-4.23us。實現(xiàn)了主從時鐘0.1ms的同步精度。這表明通過握手機(jī)制、對數(shù)據(jù)進(jìn)行過濾和直線擬合處理,有效解決了各種因素對時鐘同步精度造成的影響。
5 結(jié)束語
本文通過分析主從時鐘之間時間信息傳輸?shù)奶攸c(diǎn),在PTP 時鐘同步機(jī)制的基礎(chǔ)之上,設(shè)計出了一種可以達(dá)到亞毫秒精度的時鐘同步方案。并且經(jīng)過測試,該方案切實可行。
目前該時鐘同步方法已成功在所在研究所的通用試驗仿真平臺中用于為平臺中傳輸?shù)母鞣N信息打時戳,以及虛擬串行通訊設(shè)備中用于協(xié)調(diào)消息傳輸。
評論