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