一種基於PTP 協議的局域網高精度時鐘同步方法(轉)

原文地址 http://www.dzsc.com/data/html/2011-1-17/88338.htmlhtml

1 引言算法

  在分佈式系統中, 經常須要一個全局時間, 用來肯定系統中各類事件發生的前後、協調各類消息的傳輸等,以控制和監視系統的狀態。這就須要將系統中各個部件的局部時間統一,進行時鐘同步。隨着分佈式仿真系統和試驗系統在網絡上的普遍應用,如何在網絡上提供可靠的時鐘服務成爲一項重要課題。而且因爲系統速度上的要求,同步的精度也成爲一項重要指標。windows

  PTP(Precision Time Protocol)協議是IEEE-1588中定義的一種精密時鐘同步協議,PTP 協議主要針對於相對本地化、網絡化的系統, 子網較好, 內部組件相對穩定的環境設計的。因爲PTP 協議實現簡單,佔用的網絡和計算資源少等優勢使其普遍應用於分佈式系統中。數組

  PTP 協議能夠採用硬件實現,也能夠採用軟件實現。當採用硬件實現時能夠達到ns 級的精度,採用軟件實現時一般能夠達到ms 級的精度。當在網絡中採用軟件實現亞毫秒的精度時,存在多種因素的影響形成了時間同步的不可靠。包括網絡的不平穩性、網卡對信息包的緩存效應以及操做系統進程調度的影響,這些因素一般不可預測而且沒法控制, 形成時鐘同步最終的失效。緩存

  本文中結合計算機自身的特色和PTP 協議時鐘同步機制,提出了一種純軟件實現的局域網內高精度時鐘同步方法, 經過構造高精度時鐘, 採起握手機制以及對測量結果進行處理,實現了局域網內亞毫秒精度的時間同步, 有效解決了各類因素對時鐘同步的影響。網絡

  2 PTP 協議時鐘同步原埋與分析分佈式

  一個簡單的基於PTP 協議時鐘同步機:制的系統包含一個主時鐘和多個從時鐘,時間同步主要經過分別在發送方和接收方對包含時間的信息打時戳, 並在接收方根據時戳計算出主從時鐘的時間誤差和時間信息在網絡中傳輸的延時來實現。爲了管理這些時間信息,PTP 協議定義了四種信息類型,包括Sync(同步信息)、FollowUp(Sync 以後的跟隨信息)、DelayReq(延時校訂申請信息)和DelayResp(對延時校訂申請信息的響應)。post

  主從時鐘的差別主要由時鐘誤差和信息包在網絡傳輸中的延遲構成,PTP 協議時鐘同步機制中, 主從時鐘的同步主要分爲兩個階段, 偏移校訂和延時校訂階段。具體流程如圖1 所示。性能

PTP 協議時鐘同步原理

圖1 PTP 協議時鐘同步原理測試

  在偏移校訂階段, 即圖中的A 階段, 首先由主時鐘在1 TM 時刻發出Sync 信息到從時鐘,在Sync 信息中包含了一個時間戳, 描述了數據發出的預計時間。因爲信息包含的是預計的發出時間而不是真實的發出時間, 因此Sync 信息真實的發出時間被測量後在隨後的FollowUp信息中發出。在從時鐘一方,記錄下Sync 信息真實的接收時間TS1 , 由TM1 和TS1 能夠計算出從時鐘相對於主時鐘的時間誤差offset :

  可由該時間誤差來校訂從時鐘。但由此計算出來的結果仍然包含有時間信息在網絡中傳輸形成的延時,所以還須要進行延時校訂。

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

  從時鐘利用該值來進行校訂。此時通過偏移校訂和延時校訂, 主從時鐘達到同步。

  但在實際應用中, 尤爲是在網絡中採用純軟件實現時,簡單採用上述流程進行時鐘同步並不能達到亞毫秒的同步精度。這主要是因爲網卡的緩存效應、網絡的不平穩性以及操做系統進程調度等多方面的影響。

  網絡中在進行信息傳輸時,信息首先送到本地網卡的緩衝區,並在網絡空閒時發送到接收方網卡的緩衝區。這樣在發送方連續發送多個信息到接收方時,信息首先在緩衝區緩存,包括髮送方網卡的緩存和接收方網卡的緩存,在接收方接收信息時可能會同時收到全部的信息。這直接致使了信息接收時間測量不許確,形成時間同步的失效。

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

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

  相對於網卡的緩存效應,網絡的不平穩性和操做系統的進程調度則更復雜一些,由於這兩個因素具備不肯定性,並且是沒法控制的。網絡的不平穩性致使了信息包在網絡中傳輸的延遲不可預測, 影響了同步的精度。

  而操做系統採用時間片輪起色制對進程進行調度,使得沒法控制時間同步進程什麼時候被調度, 什麼時候中止, 形成了軟件延時的不可預測。例如, 表1 中的數據是在局域網中測得的幾組數據, 表示的是主時鐘和從時鐘的誤差,單位爲us。在測試過程當中主時鐘每隔1s 向從時鐘連續發送10 個偏移校訂時間信息,爲了保證網絡處於必定的活躍狀態,網絡中的一些計算機開啓FTP 下載。從表1中的數據能夠看出, 每組中連續發送的數據相對穩定,相對誤差約幾十u s , 但會出現一些差別較大的特殊值,而組與組之間的數據則差別較大,從幾ms 到幾百ms 不等, 這樣沒法判定哪些數據對於時鐘同步是可靠的。

  通過以上分析可知, 必須對上述因素進行相應處理, 不然沒法達到高精度的時鐘同步。

  3 基於 PTP 協議的高精度時鐘同步方法

  高精度時鐘是實現高精度時鐘同步的基礎, 所以本方法首先構造高精度時鐘。在此基礎上,經過對PTP 協議的分析,爲了解決網卡的緩存效應、網絡的不平穩性和操做系統進程調度對時鐘同步精度形成的影響, 在PTP 協議基礎上引入握手機制, 同時, 採用過濾和直線擬合的方法, 實現亞毫秒精度的時鐘同步。

  3.1 高精度時鐘的構造

  對於一個系統來講, 時鐘可分爲兩種, 物理時鐘和邏輯時鐘。物理時鐘又稱爲絕對時鐘或者牆上時鐘,對應於現實世界中的時間。一般經過計算機內置的時鐘芯片能夠得到ms 級別的物理時鐘。相對時鐘是指系統獨有的時鐘,獨立於物理時鐘,但和物理時鐘有必定的換算關係。

  當系統與外界無相互做用時, 系統內的時鐘能夠採用邏輯時鐘來實現。邏輯時鐘實現簡單,方法多樣,而且能夠知足大多數場合的要求,許多系統中都採用了邏輯時鐘。

  爲了實現高精度的定時,例如微秒級別的定時,通常採用高頻率的晶振實現。其實計算機CPU 自己就帶有一個高精度的時鐘,對於一個2GHz 的CPU 來講,這個時鐘的定時精度可達0.5ns。而且Windows 系統提供了一些接口來獲取CPU 的震盪頻率和計算機開機之後定時器的計數值,所以能夠經過這些API 接口來構造一個高精度的邏輯時鐘, 而且可向物理時間單位進行轉換。

  在這裏使用t0 表示CPU 定時器的計數值, △t 表示邏輯時間相對於CPU 計數的誤差,當前邏輯時間t 可由下式構造:

  而且當前邏輯時間t 的修改可經過修改Dt 來實現。

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

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

  雖然CPU 的時鐘頻率很高,但因爲獲取CPU 的計數值也須要消耗時間, 因此並不能達到CPU 時鐘級別的精度。經實驗代表,由該方法構造的邏輯時鐘能夠達到1us 的精度。這能夠知足大多數場合的須要。

  3.2 握手機制

  對於網卡的緩存效應,經過增大兩次傳輸之間的時間間隔並不能有效解決。間隔小起不到隔離兩次傳輸的做用,間隔大,時鐘同步又將受到網絡的不平穩性和操做系統進程調度的較大影響。而採用握手機制和阻塞的SOCKET套接字可有效解決這個問題。即在接收方收到信息後返回一個確認信息,而發送方只有在收到接收方的確認信息之後才發送下一條信息。這樣將兩次信息傳輸進行了隔離,使得接收方不會一下收到發送方的全部信息。

  3.3 時鐘同步的時間要求

  網絡的不平穩性和操做系統進程調度的影響可能會形成時鐘同步的失效。但經過分析發現, 儘管存在這些因素, 實現高精度的時鐘同步是可能的。在下面表2 中列出了5 組數據(共測試了10 組,從中隨機選擇了5 組數據), 測試環境與表1 中數據測試環境是相同的, 一樣都採用了握手機制以免網卡的緩存效應, 只是在測試過程當中主時鐘向從時鐘發送兩組數據的間隔爲10ms

  從表中的數據可看出,除去一些差別較大的奇異值,測得的主從時鐘誤差是穩定的, 大約幾十us 左右,這代表在這一段時間內完成0.1ms 精度時鐘同步是能夠實現的。

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

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

  經過以上分析可知, 爲了在網絡和操做系統相對平穩的狀況下完成時鐘同步操做,須要同步消耗的時間儘量的短, 可是爲了獲得穩定可靠的數據, 又須要有足夠的數據以供分析處理。

  3.4 數據處理算法

  爲了從測量的數據中獲取有效的數據, 須要對數據進行處理。首先, 數據中存在一些差別較大的值, 這須要查找到這部分數據並予以過濾以消除影響。另外, 爲了使剩餘有效數據的方差最小, 還須要對這些數據進行擬合。

  假設Data [1 : N ]爲測量的N 個數據, Data '[1 : M ]爲過濾後的數據, 過濾處理過程可按下式進行。其中M = N - m - n。

  fm,n首先對數據進行排序, 這樣差別較大的值就排在了數組的兩邊, 剔除m 個小值和n 個大值, 便可實現對數據的過濾處理。m 和n 爲可變參數,根據數據量的大小和數據的穩定程度肯定。

  因爲數據Data '[1 : M ]趨向於一條水平直線,可利用直線y = C 對數據進行最小二乘直線擬合。在這裏便是對這些數據進行均值處理。擬合可按下式進行。

  這樣從N 數據中得到最佳擬合值C 。

  3.5 時鐘同步完整步驟

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

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

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

  (3) 對Offset [1 : N ]進行過濾處理和直線擬合,獲得一個對全部數據的最佳擬合值offset ,並利用該值對從時鐘進行偏移校訂, 即圖中的A 階段。

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

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

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

時鐘同步完整步驟

圖2 時鐘同步完整步驟。

  在網絡相對平穩, 計算機負載不大的狀況下取M = N = 10,m = n = 2 便可知足亞毫秒精度要求。

  通過以上六步, 即完成了一次主從時鐘同步, 爲了不時鐘累積偏差對系統同步精度的影響,可週期進行上述過程, 保持系統同步。

  4 實驗結果與分析

  測試中採用了4 臺配置相同的計算機, 採用交換機搭建成局域網, 其中1 臺做爲主時鐘,其他做爲從時鐘。

  邏輯時鐘採用了利用上述原理構造的高精度時鐘,CPU頻率爲1.79553GHz,可利用式t,= t * 106 / f 轉換成以u s 爲單位的邏輯時鐘。爲了獲取必定數量的數據, 取M = N = 10,m = n = 2 。爲了保持網絡處於必定的活躍狀態, 在計算機上開啓F T P 下載, 交換機負載在5MB/ s 左右。

  測試與時鐘同步過程相似,在主從時鐘同步以後,由主時鐘發送Sync 信息到從時鐘,並在隨後的FollowUp信息中將Sync 信息發送的準確時刻TM 發送過來,從時鐘記錄下Sync 信息準確的接收時間TS 。由於此時時鐘已經同步,因此TS - TM 即爲時間信息在傳輸中的延時delay T ,將此值delay T 與延時校訂中延時信息的最佳擬合值delay 進行比較, 便可得出主從時鐘的同步效果。

  在表3 中列出了隨機選取的10 組數據。

表3 測試結果

測試結果

  從表3 測試結果中能夠看出, 最大的絕對偏差爲-25.3us,平均偏差僅爲-4.23us。實現了主從時鐘0.1ms的同步精度。這代表經過握手機制、對數據進行過濾和直線擬合處理,有效解決了各類因素對時鐘同步精度形成的影響。

  5 結束語

  本文經過分析主從時鐘之間時間信息傳輸的特色,在PTP 時鐘同步機制的基礎之上,設計出了一種能夠達到亞毫秒精度的時鐘同步方案。而且通過測試,該方案切實可行。

  目前該時鐘同步方法已成功在所在研究所的通用試驗仿真平臺中用於爲平臺中傳輸的各類信息打時戳,以及虛擬串行通信設備中用於協調消息傳輸。

來源:只是朋友

相關文章
相關標籤/搜索