<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機與無線通信 > 設計應用 > 一種基于PTP 協(xié)議的局域網(wǎng)高精度時鐘同步方法

          一種基于PTP 協(xié)議的局域網(wǎng)高精度時鐘同步方法

          作者: 時間:2011-02-11 來源:網(wǎng)絡 收藏

          1 引言

            在分布式系統(tǒng)中, 常常需要一個全局時間, 用來確定系統(tǒng)中各種事件發(fā)生的先后、協(xié)調各種消息的傳輸?shù)?以控制和監(jiān)視系統(tǒng)的狀態(tài)。這就需要將系統(tǒng)中各個部件的局部時間統(tǒng)一,進行。隨著分布式仿真系統(tǒng)和試驗系統(tǒng)在網(wǎng)絡上的廣泛應用,如何在網(wǎng)絡上提供可靠的時鐘服務成為一項重要課題。并且由于系統(tǒng)速度上的要求,同步的精度也成為一項重要指標。

            PTP(PrecisiON Time Protocol)協(xié)議是IEEE-1588中定義的一種精密協(xié)議,PTP 協(xié)議主要針對于相對本地化、網(wǎng)絡化的系統(tǒng), 子網(wǎng)較好, 內部組件相對穩(wěn)定的環(huán)境設計的。由于PTP 協(xié)議實現(xiàn)簡單,占用的網(wǎng)絡和計算資源少等優(yōu)點使其廣泛應用于分布式系統(tǒng)中。

            PTP 協(xié)議可以采用硬件實現(xiàn),也可以采用軟件實現(xiàn)。當采用硬件實現(xiàn)時可以達到ns 級的精度,采用軟件實現(xiàn)時通??梢赃_到ms 級的精度。當在網(wǎng)絡中采用軟件實現(xiàn)亞毫秒的精度時,存在多種因素的影響造成了時間同步的不可靠。包括網(wǎng)絡的不平穩(wěn)性、網(wǎng)卡對信息包的緩存效應以及操作系統(tǒng)進程調度的影響,這些因素通常不可預測并且無法控制, 造成最終的失效。

            本文中結合計算機自身的特點和PTP 協(xié)議時鐘同步機制,提出了一種純軟件實現(xiàn)的局域網(wǎng)內高精度時鐘同步方法, 通過構造高精度時鐘, 采取握手機制以及對測量結果進行處理,實現(xiàn)了局域網(wǎng)內亞毫秒精度的時間同步, 有效解決了各種因素對時鐘同步的影響
          。

            2 PTP 協(xié)議時鐘同步原埋與分析

            一個簡單的基于PTP 協(xié)議時鐘同步機:制的系統(tǒng)包含一個主時鐘和多個從時鐘,時間同步主要通過分別在發(fā)送方和接收方對包含時間的信息打時戳, 并在接收方根據(jù)時戳計算出主從時鐘的時間偏差和時間信息在網(wǎng)絡中傳輸?shù)难訒r來實現(xiàn)。為了管理這些時間信息,PTP 協(xié)議定義了四種信息類型,包括Sync(同步信息)、FollowUp(Sync 之后的跟隨信息)、DelayReq(延時校正申請信息)和DelayResp(對延時校正申請信息的響應)。

            主從時鐘的差異主要由時鐘偏差和信息包在網(wǎng)絡傳輸中的延遲構成,PTP 協(xié)議時鐘同步機制中, 主從時鐘的同步主要分為兩個階段, 偏移校正和延時校正階段。具體流程如圖1 所示。


          圖1 PTP 協(xié)議時鐘同步原理

            在偏移校正階段, 即圖中的A 階段, 首先由主時鐘在1 TM 時刻發(fā)出Sync 信息到從時鐘,在Sync 信息中包含了一個時間戳, 描述了數(shù)據(jù)發(fā)出的預計時間。由于信息包含的是預計的發(fā)出時間而不是真實的發(fā)出時間, 所以Sync 信息真實的發(fā)出時間被測量后在隨后的FollowUp信息中發(fā)出。在從時鐘一方,記錄下Sync 信息真實的接收時間TS1 , 由TM1 和TS1 可以計算出從時鐘相對于主時鐘的時間偏差offset :


            可由該時間偏差來校正從時鐘。但由此計算出來的結果仍然包含有時間信息在網(wǎng)絡中傳輸造成的延時,因此還需要進行延時校正。

            在延時校正階段, 即圖中的B 階段, 首先由從時鐘發(fā)出Del ayReq 信息到主時鐘,從時鐘記錄下發(fā)送的準確時間TS2 ,主時鐘記錄下接收的準確時間2 TM ,并將該時間通過DelayResp 返回到從時鐘。從時鐘通過這兩個時間計算出網(wǎng)絡延時delay :


            從時鐘利用該值來進行校正。此時經(jīng)過偏移校正和延時校正, 主從時鐘達到同步。

            但在實際應用中, 尤其是在網(wǎng)絡中采用純軟件實現(xiàn)時,簡單采用上述流程進行時鐘同步并不能達到亞毫秒的同步精度。這主要是由于網(wǎng)卡的緩存效應、網(wǎng)絡的不平穩(wěn)性以及操作系統(tǒng)進程調度等多方面的影響。

            網(wǎng)絡中在進行信息傳輸時,信息首先送到本地網(wǎng)卡的緩沖區(qū),并在網(wǎng)絡空閑時發(fā)送到接收方網(wǎng)卡的緩沖區(qū)。這樣在發(fā)送方連續(xù)發(fā)送多個信息到接收方時,信息首先在緩沖區(qū)緩存,包括發(fā)送方網(wǎng)卡的緩存和接收方網(wǎng)卡的緩存,在接收方接收信息時可能會同時收到所有的信息。這直接導致了信息接收時間測量不準確,造成時間同步的失效。

          表1 時鐘偏差測量( 單位: u s 間隔: 1 s )


            相對于網(wǎng)卡的緩存效應,網(wǎng)絡的不平穩(wěn)性和操作系統(tǒng)的進程調度則更復雜一些,因為這兩個因素具有不確定性,而且是無法控制的。網(wǎng)絡的不平穩(wěn)性導致了信息包在網(wǎng)絡中傳輸?shù)难舆t不可預測, 影響了同步的精度。

            而操作系統(tǒng)采用時間片輪轉機制對進程進行調度,使得無法控制時間同步進程何時被調度, 何時停止, 造成了軟件延時的不可預測。例如, 表1 中的數(shù)據(jù)是在局域網(wǎng)中測得的幾組數(shù)據(jù), 表示的是主時鐘和從時鐘的偏差,單位為us。在測試過程中主時鐘每隔1s 向從時鐘連續(xù)發(fā)送10 個偏移校正時間信息,為了保證網(wǎng)絡處于一定的活躍狀態(tài),網(wǎng)絡中的一些計算機開啟FTP 下載。從表1中的數(shù)據(jù)可以看出, 每組中連續(xù)發(fā)送的數(shù)據(jù)相對穩(wěn)定,相對偏差約幾十u s , 但會出現(xiàn)一些差異較大的特殊值,而組與組之間的數(shù)據(jù)則差異較大,從幾ms 到幾百ms 不等, 這樣無法斷定哪些數(shù)據(jù)對于時鐘同步是可靠的。

            經(jīng)過以上分析可知, 必須對上述因素進行相應處理, 否則無法達到高精度的時鐘同步。

            3 基于 PTP 協(xié)議的高精度時鐘同步方法

            高精度時鐘是實現(xiàn)高精度時鐘同步的基礎, 因此本方法首先構造高精度時鐘。在此基礎上,通過對PTP 協(xié)議的分析,為了解決網(wǎng)卡的緩存效應、網(wǎng)絡的不平穩(wěn)性和操作系統(tǒng)進程調度對時鐘同步精度造成的影響, 在PTP 協(xié)議基礎上引入握手機制, 同時, 采用過濾和直線擬合的方法, 實現(xiàn)亞毫秒精度的時鐘同步。

            3.1 高精度時鐘的構造

            對于一個系統(tǒng)來說, 時鐘可分為兩種, 物理時鐘和邏輯時鐘。物理時鐘又稱為絕對時鐘或者墻上時鐘,對應于現(xiàn)實世界中的時間。通常通過計算機內置的時鐘芯片可以獲得ms 級別的物理時鐘。相對時鐘是指系統(tǒng)獨有的時鐘,獨立于物理時鐘,但和物理時鐘有一定的換算關系。

            當系統(tǒng)與外界無相互作用時, 系統(tǒng)內的時鐘可以采用邏輯時鐘來實現(xiàn)。邏輯時鐘實現(xiàn)簡單,方法多樣,并且可以滿足大多數(shù)場合的要求,許多系統(tǒng)中都采用了邏輯時鐘。

            為了實現(xiàn)高精度的定時,例如微秒級別的定時,一般采用高頻率的晶振實現(xiàn)。其實計算機CPU 本身就帶有一個高精度的時鐘,對于一個2GHz 的CPU 來說,這個時鐘的定時精度可達0.5ns。并且Windows 系統(tǒng)提供了一些接口來獲取CPU 的震蕩頻率和計算機開機以后定時器的計數(shù)值,因此可以通過這些API 接口來構造一個高精度的邏輯時鐘, 并且可向物理時間單位進行轉換。

            在這里使用t0 表示CPU 定時器的計數(shù)值, △t 表示邏輯時間相對于CPU 計數(shù)的偏差,當前邏輯時間t 可由下式構造:


            并且當前邏輯時間t 的修改可通過修改Dt 來實現(xiàn)。

            當需要使用物理時間單位來度量邏輯時間時, 可進行相應的轉換。轉換公式如下:


            其中t’為以us 為單位的邏輯時間, f 為CPU 時鐘震蕩頻率,該值可由windows 提供的API 來獲得。

            雖然CPU 的時鐘頻率很高,但由于獲取CPU 的計數(shù)值也需要消耗時間, 所以并不能達到CPU 時鐘級別的精度。經(jīng)實驗表明,由該方法構造的邏輯時鐘可以達到1us 的精度。這可以滿足大多數(shù)場合的需要。

            3.2 握手機制

            對于網(wǎng)卡的緩存效應,通過增大兩次傳輸之間的時間間隔并不能有效解決。間隔小起不到隔離兩次傳輸?shù)淖饔?間隔大,時鐘同步又將受到網(wǎng)絡的不平穩(wěn)性和操作系統(tǒng)進程調度的較大影響。而采用握手機制和阻塞的SOCKET套接字可有效解決這個問題。即在接收方收到信息后返回一個確認信息,而發(fā)送方只有在收到接收方的確認信息以后才發(fā)送下一條信息。這樣將兩次信息傳輸進行了隔離,使得接收方不會一下收到發(fā)送方的所有信息。

            3.3 時鐘同步的時間要求

            網(wǎng)絡的不平穩(wěn)性和操作系統(tǒng)進程調度的影響可能會造成時鐘同步的失效。但通過分析發(fā)現(xiàn), 盡管存在這些因素, 實現(xiàn)高精度的時鐘同步是可能的。在下面表2 中列出了5 組數(shù)據(jù)(共測試了10 組,從中隨機選擇了5 組數(shù)據(jù)), 測試環(huán)境與表1 中數(shù)據(jù)測試環(huán)境是相同的, 同樣都采用了握手機制以避免網(wǎng)卡的緩存效應, 只是在測試過程中主時鐘向從時鐘發(fā)送兩組數(shù)據(jù)的間隔為10mS。

            從表中的數(shù)據(jù)可看出,除去一些差異較大的奇異值,測得的主從時鐘偏差是穩(wěn)定的, 大約幾十us 左右,這表明在這一段時間內完成0.1ms 精度時鐘同步是可以實現(xiàn)的。

          表2 時鐘偏差測量( 單位: u s 間隔: 1 0ms )


            通過以上分析可知, 為了在網(wǎng)絡和操作系統(tǒng)相對平穩(wěn)的情況下完成時鐘同步操作,需要同步消耗的時間盡可能的短, 但是為了得到穩(wěn)定可靠的數(shù)據(jù), 又需要有足夠的數(shù)據(jù)以供分析處理。

            3.4 數(shù)據(jù)處理算法

            為了從測量的數(shù)據(jù)中獲取有效的數(shù)據(jù), 需要對數(shù)據(jù)進行處理。首先, 數(shù)據(jù)中存在一些差異較大的值, 這需要查找到這部分數(shù)據(jù)并予以過濾以消除影響。另外, 為了使剩余有效數(shù)據(jù)的方差最小, 還需要對這些數(shù)據(jù)進行擬合。

            假設Data [1 : N ]為測量的N 個數(shù)據(jù), Data '[1 : M ]為過濾后的數(shù)據(jù), 過濾處理過程可按下式進行。其中M = N - m - n。


            fm,n首先對數(shù)據(jù)進行排序, 這樣差異較大的值就排在了數(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ù)進行最小二乘直線擬合。在這里即是對這些數(shù)據(jù)進行均值處理。擬合可按下式進行。


            這樣從N 數(shù)據(jù)中獲得最佳擬合值C 。

            3.5 時鐘同步完整步驟

            根據(jù)以上的結論, 并結合PTP 協(xié)議時鐘同步機制,可設計出一種性能可靠的時鐘同步方案,具體流程如下圖所示。

            (1) 主時鐘在TM1[1]發(fā)送Sync 信息到從時鐘,并記錄下發(fā)送的準確時刻TM1[1],隨后在Fol lowUp 信息中將Sync信息發(fā)送的時刻TM1[1]發(fā)送到從時鐘。從時鐘接收到Syn c 信息后記錄下準確的接收時刻TS1[1],并返回確認信息OK。

            (2) 重復上述過程 N 次,這樣從時鐘得到N 個時鐘信息的發(fā)送和接收時刻TM1[1 : N]和 TS1[1 :N ],將TM1[1 : N]和 TS1[1 :N ]做差,得到主從時鐘的N 個偏移值Offset [1 : N ]。

            (3) 對Offset [1 : N ]進行過濾處理和直線擬合,得到一個對所有數(shù)據(jù)的最佳擬合值offset ,并利用該值對從時鐘進行偏移校正, 即圖中的A 階段。

            (4) 由從時鐘發(fā)送 DelayReq 信息到主時鐘,并記錄下準確的發(fā)送時刻TS2[1],主時鐘收到DelayReq 信息后記錄下準確的接收時刻TM2[1],并在隨后的DelayResp中將TM2[1]返回給從時鐘。

            (5) 重復第4 步中的過程M 次,從時鐘得到2M個時鐘信息, TM2[1 :N ]和TS2[1 : N],對兩個數(shù)組做差得到M 個主從時鐘的延時信息Delay [1 : M ] 。

            (6) 對延時信息 Delay [1 : M ] 進行過濾處理和直線擬合, 得到一個對延時信息的最佳擬合值delay , 并利用該值對從時鐘進行延時校正,即圖中的B 階段。

          時鐘同步完整步驟

          圖2 時鐘同步完整步驟。

            在網(wǎng)絡相對平穩(wěn), 計算機負載不大的情況下取M = N = 10,m = n = 2 即可滿足亞毫秒精度要求。

            經(jīng)過以上六步, 即完成了一次主從時鐘同步, 為了避免時鐘累積誤差對系統(tǒng)同步精度的影響,可周期進行上述過程, 保持系統(tǒng)同步。

            4 實驗結果與分析

            測試中采用了4 臺配置相同的計算機, 采用交換機搭建成局域網(wǎng), 其中1 臺作為主時鐘,其余作為從時鐘。

            邏輯時鐘采用了利用上述原理構造的高精度時鐘,CPU頻率為1.79553GHz,可利用式t,= t * 106 / f 轉換成以u s 為單位的邏輯時鐘。為了獲取一定數(shù)量的數(shù)據(jù), 取M = N = 10,m = n = 2 。為了保持網(wǎng)絡處于一定的活躍狀態(tài), 在計算機上開啟F T P 下載, 交換機負載在5MB/ s 左右。

            測試與時鐘同步過程類似,在主從時鐘同步之后,由主時鐘發(fā)送Sync 信息到從時鐘,并在隨后的FollowUp信息中將Sync 信息發(fā)送的準確時刻TM 發(fā)送過來,從時鐘記錄下Sync 信息準確的接收時間TS 。因為此時時鐘已經(jīng)同步,所以TS - TM 即為時間信息在傳輸中的延時delay T ,將此值delay T 與延時校正中延時信息的最佳擬合值delay 進行比較, 即可得出主從時鐘的同步效果。

            在表3 中列出了隨機選取的10 組數(shù)據(jù)。

          表3 測試結果

          測試結果

            從表3 測試結果中可以看出, 最大的絕對誤差為-25.3us,平均誤差僅為-4.23us。實現(xiàn)了主從時鐘0.1ms的同步精度。這表明通過握手機制、對數(shù)據(jù)進行過濾和直線擬合處理,有效解決了各種因素對時鐘同步精度造成的影響。

            5 結束語

            本文通過分析主從時鐘之間時間信息傳輸?shù)奶攸c,在PTP 時鐘同步機制的基礎之上,設計出了一種可以達到亞毫秒精度的時鐘同步方案。并且經(jīng)過測試,該方案切實可行。

            目前該時鐘同步方法已成功在所在研究所的通用試驗仿真平臺中用于為平臺中傳輸?shù)母鞣N信息打時戳,以及虛擬串行通訊設備中用于協(xié)調消息傳輸。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();