黃學進,崔 鑫,余 婷
(中國航發控制系統研究所,江蘇 無錫 214063)
時鐘同步是指調整系統中網絡設備或計算機的時鐘,使之與其它時鐘源的時間保持一致或者偏差限定在足夠小的范圍內的過程[1]。時鐘同步是分布式仿真系統的核心技術之一,在分布式仿真系統中,數據采集、模型處理、人機交互等都分布在不同的節點上,因此進行時鐘同步的目的是維護一個全局一致的物理或邏輯時鐘,以使得系統中的信息、事件及各節點與時間有關的行為有一個全局一致的解釋[2]或者是提供一種仿真時間的推進機制,以確保節點發送和接收消息在時間邏輯上是完全正確的。分布式仿真系統往往具有節點操作系統類型多(Windows系統、Linux系統、RTX實時系統、LabVIEWRT實時系統等)、仿真周期小(毫秒級)、結構靈活、分布范圍廣的特點,因此需要時鐘同步系統具備兼容多種操作系統、同步精度高(優于1 ms)、靈活度高、成本低,同時能考慮系統負載,本文提出的時鐘同步系統時鐘校準周期要求大于1 h。目前常用于時鐘同步的技術方案有:GPS(global positioning system)時鐘同步技術[3]、IRIG-B(interrange instrumentation group - B)時鐘同步技術[4]、NTP(network time protocol)時鐘同步技術[5]、PTP(precision time protocol)時鐘同步技術[6]等。各種方案應用于分布式仿真系統中各有優缺點,如表1所示。

表1 時鐘同步方案對比
從表中可以看出,NTP同步與文章的同步設計目標最為接近,只是同步精度略有不足。近年來,許多文章對NTP進行了改進和優化。諶華金[7]通過CPU時間戳計數器(RDTSC,read time stamp counter)實現了同步精度1 ms以內,但是同步周期最長只有200ms,對原系統的CPU和網絡負載影響較大。侯重遠[8]利用交換機的IEEE802.1p 優先級調度功能,將同步精度提高到10~100,但除了需要交換機支持調度功能外,操作系統必須為實時操作系統(如文中使用的VxWorks),不能兼容非實時Windows系統。
黃沛芳[9]通過對信息包回路時延設置閾值進行數據篩選,只保留時延0.5 ms以內的數據,將同步精度提升到250,但這需要提前獲取網絡時延分布信息,且同步間隔只有1 min。因此,本文基于Windows系統,在NTP協議基本原理上,通過邏輯時鐘構建、網絡時延不對稱性優化、時鐘頻率補償三方面進行優化,實現設定的分布式仿真系統時間同步目標:同步精度優于1 ms且校準時間間隔大于1 h。該時鐘同步方法基于UDP通訊,研究結果同樣可以推廣到實時操作系統中。
NTP是由RFC1305定義的時鐘同步協議,最早是由美國特拉華大學的David L.Mills教授在1982年提出[10],在實際的應用過程中,可以采用NTP的簡化版本SNTP(簡單網絡時間協議)。這里主要介紹NTP以客戶機/服務器模式進行通信的過程,如圖1所示??蛻魴C首先要生成一個NTP查詢信息包,通過網絡發送到時間服務器;服務器收到后,根據本地時間生成一個NTP時間信息包發送給客戶機[11]。兩個信息包都帶有發送和接收的時間戳,根據這4個時間戳T1T2T3T4來確定客戶機和服務器之間的時間偏差和網絡時延。

圖1 NTP通訊過程
根據NTP通訊過程,可以抽象出模型如圖2所示[12]。

圖2 NTP通訊模型
記客戶端時間落后服務器θ,請求信息在網上傳播耗時為δ1,回復信息在網上傳播耗時為δ2,網絡傳輸的往返延時和為δ,則有:
(1)
4個未知數,3個方程,無法獲得解析解。假設在相同的網絡條件下,客戶端與服務器通訊往返回路對稱,網絡時間延遲相等,即存在:
δ1=δ2
(1)

(3)
根據NTP基本原理設計NTP客戶端和服務器進行時鐘同步測試實驗,具體設計如下:
1)采用Windows系統時間作為時間戳;
2)通訊網絡使用內部局域網;
3)固定周期進行時鐘校準,如表2所示;

表2 系統時間下同步精度實驗設計
4)實驗過程中每秒進行同步精度測試并記錄數據。
實驗數據整理如圖3所示。

圖3 系統時間下時鐘同步精度變化
實驗結論:1)基于Windows系統時間進行同步,短時間波動量約15 ms,因此同步精度最高不會優于15 ms;2)長時間看,校準周期內,同步偏差逐漸增大,分析認為這是服務器和客戶端之間時鐘晶振頻率不同導致。
分析時鐘同步過程如圖4所示,客戶端和服務器獲取來源于晶振的系統時間,在經過Windows下的TCP/IP協議和網卡及網絡傳輸后,實現時間戳信息交換。因此,結合NTP基本原理和時鐘同步實驗結果,可以將引入誤差的環節分為3個部分:時間獲取、時間傳輸、晶振偏差。

圖4 時鐘同步精度影響因子
Windows時間系統主要包括實時時鐘(RTC)、基本輸入輸出系統(BIOS)時鐘和操作系統(OS)時鐘三部分[13]。RTC基于晶振和計時電路的硬件時鐘。BIOS時鐘硬件部分對RTC時間脈沖分頻產生中斷信號,然后通過中斷響應程序進行軟件計時從而產生系統時鐘[14]。BIOS時鐘每秒產生64個中斷信號,中斷周期約為15.6 ms,即系統時鐘的時鐘精度約為15.6 ms。因此Windows系統常用的多個與時間有關的API,其時間分辨率只能達到15 ms,當高頻率調用讀取時間時,會發現多次返回時間相同,然后突然跳到下一個時間刻度,出現“時間停止”和“時間跳躍”現象,跳躍量約為15.6 ms,如圖5所示。

圖5 系統時間分辨率測試
因此,在Windows非實時系統下進行高精度時鐘同步時,首先必須獲取高精度的時間戳,這是進行高精度時鐘同步的基礎。
時間傳輸部分詳細過程如圖6所示,通訊傳輸延遲的不確定性主要受協議棧不確定性時延、網絡路由不確定性時延和操作系統進程調度等方面影響[15]。

圖6 NTP通訊傳輸過程及其不確定性時延
協議棧不確定性時延。TCP/IP五層網絡架構包括應用層、運輸層、網絡層、數據鏈路層和物理層,NTP是應用層的協議,下層使用運輸層的UDP協議。根據UDP/IP協議,時鐘同步報文的傳輸需要逐層進行。傳輸過程受到處理器處理速度、操作系統工作方式等種種因素的影響,時鐘同步報文在應用程序中開始發送到報文到達物理傳輸介質的時間一般無法控制,從而會引入誤差。
網絡路由不確定性時延。網絡路由時延包括固有的鏈路時延、路由器處理和排隊時延。報文在往返過程中不同的路由選擇會導致信號的往返時延不對稱。進行信息傳輸時,發送方首先將信息發送到本地網卡的緩沖區,然后在網絡空閑時發送到接收方網卡的緩沖區,因此在網絡負載高、任務繁忙的時候,接收方收到發送方信息的時間具有很大的不確定性,這就是網卡的緩存效應。因此在局域網內進行同步時,時間延遲經常是不對稱的,公式計算出的時差時間差也是不準確的[16]。
操作系統進程調度。Windows系統采用時間片輪轉機制對進程進行調度,進程調度中內存管理、UDP協議的封裝、網卡控制器里的排隊等,任何一次中斷或任務調度都會打斷協議棧的封裝或解析過程。這些操作都將會引入不可忽略的延遲波動,達到幾微秒至幾毫秒,造成時間延遲的不可預測。
因此,若要降低網絡傳輸延遲對同步精度的影響,需要在處理時間戳的過程中考慮如何降低消息包在網絡傳輸過程中不對稱通信鏈路帶來的影響。
分布式仿真系統中,長時間下時鐘的準確度取決于晶振頻率準確度。但是受溫度變化、電磁干擾、芯片老化等因素影響,晶振頻率會發生小幅度波動,其中溫度對晶振頻率影響最大[17]。由于工藝和材料的原因,即使同一生產線上標稱頻率相同的石英晶體,其實際頻率也是不同的,實際頻率與標稱頻率偏差率從量級到量級不等。以量級為例,時鐘1 h誤差達360 ms。因此,即使在每次時鐘同步過程中,從節點的授時精度很高,但由于頻率偏差帶來的守時能力差,隨著時間的推移,從節點和主節點的時鐘同步精度也會逐漸變差。Veitch D等人[18]通過實驗得出,短時間內,時鐘偏差隨時間的變化基本可以認為是線性的,但長時間下,時鐘偏差隨時間的變化是非線性的。
要提高從節點的守時能力,主要有兩個思路:一是更換時鐘源,選取高精度、高穩定度、守時能力更強的晶體振蕩器。晶體振蕩器的穩定度等級從一般晶體振蕩器、溫度補償型晶體振蕩器、恒溫晶體振蕩器、銣原子振蕩器逐步提高[19],同時晶體振蕩器的成本將變得十分昂貴;另外的思路則是采用數學算法對時鐘進行建模,以主節點的頻率作為基準對從節點進行頻率偏差補償,提高從節點的守時精度。
對于一個系統而言,時鐘可分為兩種:物理時鐘和邏輯時鐘。物理時鐘又稱為絕對時鐘或者墻上時鐘,對應于現實世界中的時間,通常通過計算機內置的時鐘芯片可以獲得物理時鐘。邏輯時鐘是指自行建立的時鐘,獨立于物理時鐘,但一般和物理時鐘有一定的換算關系[20]。分布式仿真系統中,只要求系統仿真的時間和真實的時間有一定關系,而不要求和真實時間完全相同,因此可使用邏輯時鐘。
高精度邏輯時鐘的構建主要有兩種方案:1)基于系統硬件的高分辨率性能計數器。它從系統上電開始,以其晶振頻率進行計數,可通過相應的接口函數獲取其當前計數值和晶振頻率;2)計算機CPU中,有一個CPU時間戳計數器,記錄了自CPU上電后的時鐘周期數,通過機器指令RDTSC(read time stamp counter)可以讀取這個值[22]。但是,多核計算機情況下讀取的RDTSC指令并不準確,原因包括:同一主板上每個核的TSC是不同步的,讀取的RDTSC可能在不同CPU上;CPU時鐘頻率可能變化,例如某些節能模式或超頻[21]。因此,本文選擇基于高分辨率性能計數器構建邏輯時鐘。
高分辨率性能計數器提供函數QueryPerformanceFrequency用于獲取頻率,提供函數QueryPerformanceCounter用于獲取計數器的當前值u,利用兩次獲得的計數之差及時鐘頻率,就可算出經歷的精確時間[22]:
(4)
取初始時刻計數值為u0,對應的系統時間為t0,當前計數值為u(t),建立的邏輯時鐘時間為T,根據式則有:
(5)
經測試,該邏輯時鐘的實用時鐘分辨率約為2,遠小于同步精度指標,可用于時鐘同步,如圖7所示。

圖7 邏輯時鐘分辨率測試
基于邏輯時鐘設計時間同步客戶端和服務器進行同步測試實驗,具體設計如下:
1)采用高精度邏輯時鐘作為時間戳;
2)通訊網絡使用內部局域網;
3)固定周期進行時鐘校準,如表3所示;

表3 系統時間下同步精度實驗設計
4)實驗過程中每秒進行同步精度測試并記錄數據。
實驗數據整理如圖8和圖9所示。

圖8 高精度時鐘下同步實驗結果

圖9 局部同步瞬時誤差和毛刺
根據實驗數據,可以得出如下結論:
1)校準周期內,同步精度變化總體呈線性變化趨勢,變化速率約0.36 ms/min;
2)每5 min校準下同步精度達到1.8 ms,每20 min校準下同步精度達到7.2 ms。因此在本次測試環境下,要達到1 ms同步精度,則校準間隔至多只能160 s;
3)同步精度局部存在約0.5 ms的毛刺,無毛刺時存在0.2 ms的瞬時誤差;
4)回路時延大部分在0.8~1 ms之間,部分甚至超過1.4 ms,時延高的時候,同步精度更差。
因此,建立的邏輯時鐘有效,但還需要進一步優化。

(6)
其中:δ1和δ2為隨機量,大小在(0,δ)之間。因此,網絡時延不對稱性越高,授時精度越差。


圖10 不等式法通訊過程
對應每一次往返通訊過程都有:
(7)
由于δ為傳輸延遲,都是正值,因此可得:
(8)
記δk1是{δ11,δ21,…,δn1}中的最小值,δm2是{δ12,δ22,…,δn2}中的最小值,可得:

(9)
因此,可以將θ范圍縮小為:
(Tm3-Tm4)<θ<(Tk2-Tk1)
(10)
此時取真值范圍的中值作為時鐘偏差估計值,即:
(11)
此時估計值和真值的關系為:
(12)

再次設計時間同步客戶端和服務器進行對比實驗,具體設計如下:
1)采用高精度邏輯時鐘作為時間戳;
2)固定周期20 min進行時鐘校準;
3)網絡使用內部局域網,采用不等式法優化回路往返時延的不對稱性;
4)實驗過程中每秒進行同步精度測試并記錄數據,如圖11和圖12所示。

圖11 不等式法下同步實驗結果

圖12 不等式法下局部瞬時誤差
根據實驗數據,可以得出如下結論:
1)回路時延比優化前明顯減小,基本在0.8 ms以內;
2)同步精度毛刺消失,瞬時誤差下降到0.1 ms;
因此,經過不等式法優化,回路往返時延不對稱性對同步精度的影響明顯減小,同步精度線性變化的趨勢得到進一步加強。
3.3.1 補償系數模型
將客戶端在t時刻的邏輯時鐘表示為c(t),服務器邏輯時鐘表示為s(t),定義客戶端和服務器時間差為θ(t),根據式有:
(13)
(14)
θ(t)=s(t)-c(t)
(15)
其中t0為高精度時鐘建立時的系統時間,是一個常量。
理論上有:
Δt=Δs(t)=Δc(t)
(16)
(17)
但隨著時間的進行,客戶端和服務器的時間變化量并不相等,原因在于受環境條件的影響(如溫度、電壓、老化),時鐘頻率不斷的產生漂移。分布式仿真系統中,并不需要系統中時間與真實時間完全一致,只需要保持相同的時間基準即可。因此,本文以服務器時鐘為基準,對客戶端進行晶振頻率補償。

(18)
因此有:
(19)
當α=1時,表示客戶端真實時鐘晶振頻率與標稱頻率相同,與服務器時鐘快慢相同;當α<1時,表示客戶端真實時鐘晶振頻率小于標稱頻率,即本身時鐘相對服務器時鐘較慢;當α>1時,表示客戶端真實時鐘晶振頻率大于標稱頻率,即本身時鐘較快。

圖13 補償系數與時鐘相對快慢的關系
3.3.2 補償系數在線求解與迭代
記C(t)為客戶端補償后的理想時鐘,則有:
C(t)=s(t)
(20)
根據式(13)、式(19)和式(20),可得:
(21)
其中:θ0為建立時刻客戶端與服務器的時間差,是一個常量。
因此,根據式(15)和式(21):
(22)
結合式(13),可得:
(23)
將θ(t)對c(t)求導,可得:
(24)
即:
(25)
因此,理論分析可得出,若從時鐘相對主時鐘是嚴格穩定的,即時鐘晶振頻率補償系數為常數,那么時鐘偏差θ(t)是按線性變化的。

(26)
而由于隨著時間的推移,晶振頻率會發生漂移,當前補償得到的頻率過一段時間后已經不夠準確了,需要再次進行頻率補償。因此,需要繼續研究時鐘頻率補償系數在線迭代問題。
記αi為第i次晶振補償系數,Ci(t)為客戶端第i次迭代時的理想時鐘(與服務器時間保持一致)。則進行第i次迭代時,參照式(20)和(21)有:
(27)
此時客戶端邏輯時鐘c(t)為上次迭代時的理想時鐘,即:
(28)
同理可解得:
(29)
將θ(t)對c(t)求導,可得:
(30)
即:
(31)
應用新的αi即可實現補償系統的動態迭代,從而使系統能夠維持高精度時鐘同步。
應用高精度邏輯時鐘、不等式法優化回路時延不對稱性和時鐘晶振頻率在線補償與迭代3種方法,設計時間同步客戶端和服務器進行同步實驗,客戶端工作過程如圖14所示:

圖14 客戶端工作流程
1)創建邏輯時鐘,使用不等式法與服務器同步一次;
4)使用記錄的數據,采用最小二乘擬合得到補償系數α,更新客戶端時鐘并清空記錄的數據,再轉步驟2)。
經過約60 h的長試實驗,結果如圖15所示,從圖和數據中可以得出:1)實驗在137s后進入在線迭代環節,初次擬合得到補償系數為α=0.999 993 35;2)時鐘補償系數α迭代次數達到12次,平均可以維持時間達到5 h;3)α在0.999 993 05~0.999 993 79之間波動,由于標稱頻率為3.58 MHz,所以實驗過程中實際晶振頻率與標稱頻率之間偏差量在22.2~24.9 Hz之間波動,波動量約2.7 Hz。

圖15 頻率補償在線迭代下同步效果
本文在介紹NTP基本原理的基礎上進行了時鐘同步精度影響因子分析,并針對性采用了構建高精度邏輯時鐘、不等式法優化回路時延不對稱性、時鐘晶振頻率在線補償3種解決策略,進行了時鐘同步優化。通過長試實驗,驗證了優化后的時鐘同步系統,能有效的實現時鐘同步精度優于1 ms且平均校準周期達到5 h。項目應用時,可以將時鐘同步客戶端封裝為DLL,集成到各分布式仿真系統軟件中實現時鐘同步,具有較好的工程應用價值。