《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 基于NTP的高精度時鐘同步系統(tǒng)實現(xiàn)
基于NTP的高精度時鐘同步系統(tǒng)實現(xiàn)
黃沛芳
摘要: Windows操作系統(tǒng)內(nèi)置的NTP授時精度不高,分辨率最高只有10 ms。給出一個基于Windows操作系統(tǒng)的計算機網(wǎng)絡(luò)同步時鐘實現(xiàn)方案,該方案可以有效提高計算機時鐘同步精度,在LAN中時鐘同步精度達250 μs。同時采用了校正時鐘頻率誤差算法,校正后的時鐘長期計時誤差能達到10天少于1 s。
Abstract:
Key words :

  摘 要:  Windows操作系統(tǒng)內(nèi)置的NTP授時精度不高,分辨率最高只有10 ms。給出一個基于Windows操作系統(tǒng)的計算機網(wǎng)絡(luò)同步時鐘實現(xiàn)方案,該方案可以有效提高計算機時鐘同步精度,在LAN中時鐘同步精度達250 μs。同時采用了校正時鐘頻率誤差算法,校正后的時鐘長期計時誤差能達到10天少于1 s。
關(guān)鍵詞:  NTP 局域網(wǎng); 時鐘頻率偏差; 高精度授時

 

  一般的計算機和嵌入式設(shè)備在時鐘度方面沒有明確的指標(biāo)要求, 時鐘精度只有10-4~10-5,每天可能誤差達十幾秒或更多,如果不及時校正,其累積時間誤差不可忽視。許多工業(yè)控制過程需要高準(zhǔn)確度時間,如:電力系統(tǒng)內(nèi)眾多的計算機監(jiān)控系統(tǒng)、保護裝置、故障錄波器等時間同步要在ms級以內(nèi)。
聯(lián)網(wǎng)計算機同步時鐘最簡便的方法是網(wǎng)絡(luò)授時。網(wǎng)絡(luò)授時分為廣域網(wǎng)授時和局域網(wǎng)授時。廣域網(wǎng)授時精度通常能達50 ms級,但有時超過500 ms,這是因為每次經(jīng)過的路由器路徑可能不相同?,F(xiàn)在還沒有更好的辦法將這種不同路徑延遲的時間誤差完全消除。局域網(wǎng)授時不存在路由器路徑延遲問題,因而授時精度理論上可以提到亞毫秒級。Windows內(nèi)置NTP服務(wù),在局域網(wǎng)內(nèi)其最高授時精度也只能達10 ms級。因此,提高局域網(wǎng)NTP授時精度成為一個迫切需要解決的問題。
1 網(wǎng)絡(luò)時間協(xié)議簡介
網(wǎng)絡(luò)時間協(xié)議NTP(Network Time Protocol)的主要開發(fā)者是美國特拉華大學(xué)的MILLS David L.[1]教授設(shè)計實現(xiàn)的,由時間協(xié)議、ICMP時間戳消息及IP時間戳選項發(fā)展而來。NTP用于將計算機客戶或服務(wù)器的時間與另一服務(wù)器同步,使用層次式時間分布模型。在配置時,NTP可以利用冗余服務(wù)器和多條網(wǎng)絡(luò)路徑來獲得時間的高準(zhǔn)確性和高可靠性。即使客戶機在長時間無法與某一時間服務(wù)器相聯(lián)系的情況下,仍可提供高準(zhǔn)確度時間。
實際應(yīng)用中,還有確保秒級精度的簡單的網(wǎng)絡(luò)時間協(xié)議SNTP(Simple Network Time Protocol)。SNTP是NTP的一個子集,主要用于那些不需要NTP的精度以較高實現(xiàn)復(fù)雜性的網(wǎng)絡(luò)時間同步客戶機。SNTP協(xié)議已減少了網(wǎng)絡(luò)延時對校對準(zhǔn)確的影響,但沒有冗余服務(wù)器和校正時鐘頻率誤差功能。
除了認證符字段在SNTP中一般被忽略外,SNTP的報文格式與RFC-1305中所描述的NTP格式是一致的。NTP/SNTP服務(wù)端使用固定的UDP端口號是123。表1是NTP/SNTP報文格式的描述。


2 NTP授時原理
  NTP最典型的授時方式是Client/Server方式。如圖1所示,客戶機首先向服務(wù)器發(fā)送一個NTP 包,其中包含了該包離開客戶機的時間戳T1,當(dāng)服務(wù)器接收到該包時,依次填入包到達的時間戳T2、包離開的時間戳T3,然后立即把包返回給客戶機。客戶機在接收到響應(yīng)包時,記錄包返回的時間戳T4??蛻魴C用上述4個時間參數(shù)就能夠計算出2個關(guān)鍵參數(shù):NTP包的往返延遲d和客戶機與服務(wù)器之間的時鐘偏差t。客戶機使用時鐘偏差來調(diào)整本地時鐘,以使其時間與服務(wù)器時間一致[1]。圖1中:
T1為客戶發(fā)送NTP請求時間戳(以客戶時間為參照);T2為服務(wù)器收到NTP請求時間戳(以服務(wù)器時間為參照);T3為服務(wù)器回復(fù)NTP請求時間戳(以服務(wù)器時間為參照);T4為客戶收到NTP回復(fù)包時間戳(以客戶時間為參照);d1為NTP請求包傳送延時,d2為NTP回復(fù)包傳送延時;t為服務(wù)器和客戶端之間的時間偏差,d為NTP包的往返時間。

 



3 NTP授時精度分析
  NTP授時精度與NTP服務(wù)器與用戶間的網(wǎng)絡(luò)狀況有關(guān),主要取決于NTP包往返路由的延時對稱程度,往返路由的延時不對稱值最大不超過網(wǎng)絡(luò)延時。式(2)是在假設(shè)NTP請求和回復(fù)包在網(wǎng)上傳送延時相等,即d1=d2=d/2的情況下得出的,而d1、d2的取值范圍在(0...d)間,由式(3)可以得出最大授時誤差是±d/2。一般廣域網(wǎng)的網(wǎng)絡(luò)延時在10 ms~500 ms之間;局域網(wǎng)的網(wǎng)絡(luò)延時在計時操作系統(tǒng)內(nèi)核處理延遲的情況下通常小于1 ms。
假定局域網(wǎng)內(nèi)NTP延時小于1 ms,理論上授時誤差小于0.5 ms,但對于Windows操作系統(tǒng)內(nèi)置的NTP客戶和NTP服務(wù),并不能達到此精度。Windows NTP時鐘分辨率因操作系統(tǒng)和硬件不同而有所不同,時鐘分辨率通常為10 ms或15 ms?;赪indows操作系統(tǒng)內(nèi)置的NTP授時精度最高不超過10 ms。
4 基于NTP減少計算機時鐘偏差
4.1 計算機時鐘偏差分析

通用PC機自帶兩類時鐘源:硬件時鐘和軟件時鐘(或稱為系統(tǒng)時鐘)。不論是硬件時鐘還是軟件時鐘,都是由石英晶體振蕩器驅(qū)動的,通過累計石英晶體振蕩器輸出脈沖數(shù),換算出時間。所以計算機時鐘的準(zhǔn)確度取決于晶振頻率準(zhǔn)確度。受溫度變化、電壓、芯片老化等因素影響,晶振頻率會發(fā)生小幅度波動,其中溫度對晶振頻影響最大。
由于工藝和材料的原因,同一生產(chǎn)線上標(biāo)稱頻率相同的石英晶體,其實際頻率是不同的,實際頻率與標(biāo)稱頻率偏差率從10-4量級到10-9量級不等。以10-4量級為例,時鐘每天至少誤差8.64 s。
4.2 基于NTP減少計算機時鐘頻率偏差
時鐘頻率偏差是時鐘長期計時累積誤差的主要原因,要提高時鐘長期計時精度,必須補償時鐘頻率偏差。聯(lián)網(wǎng)的計算機可采用NTP方式,可非常方便地校準(zhǔn)時鐘頻率偏差[2],其原理如圖2所示。以NTP服務(wù)器時鐘為標(biāo)準(zhǔn)時間,在某一時刻設(shè)置NTP客戶機時間為NTP服務(wù)器當(dāng)前時間T0,經(jīng)過一段時間后,NTP服務(wù)器時間為T0+tsn,NTP客戶端時間為T0+tcn。因為存在時鐘頻率偏差,tsn與tcn并不相等。NTP客戶端時間tcn需乘以時鐘頻率偏差系數(shù)k才等于tsn,即tsn=k×tcn,所以k=tsn/tcn。

 


任何晶振實際工作頻率都是不穩(wěn)定的,只是程度不同而已。即使溫度補償?shù)木д?,在常溫范圍?nèi)(攝氏10℃~35℃)也有大約5×10-7~2×10-6的誤差。晶振實際頻率是受外界多種因素(溫度、電壓、老化等)影響而改變的。因此,時鐘頻率偏差系數(shù)k并非恒定不變的。每隔一定時間,NTP客戶機要對時鐘頻率偏差系數(shù)k進行校正,才能保證計時精度。
5 采用高分辨率時鐘提高授時精度
  局域網(wǎng)內(nèi)100 B以太網(wǎng)幀在百兆網(wǎng)絡(luò)物理層單向延時理論值約8 μs,要精確測量NTP包網(wǎng)絡(luò)延時,提高授時精度,時間分辨率必須達到或高于μs級。Windows系統(tǒng)常用的多個與時間有關(guān)的API,其時間分辨率最高精度只能達到ms級。其中,time、gmtime、localtime的時間值精確到s級;函數(shù)GetTickCount返回值時間精確到10 ms或15 ms。
Windows計算機系統(tǒng)內(nèi)部有一個高精度性能定時器。函數(shù)QueryPerformanceFrequency可得到這個定時器的頻率。函數(shù)QueryPerformanceCounter可得到定時器的當(dāng)前值。利用2次獲得的計數(shù)之差及時鐘頻率,就可以計算出事件經(jīng)歷的精確時間。缺點是:讀取速度相對慢,在PⅢ 866 MHz和P4 2.8 GHz計算機上執(zhí)行的速度分別約為1.13 μs和1.12 μs,與CPU速度關(guān)系不大。在使用時要注意它的實用分辨率大約只有2 μs。
Intel Pentium及以上級別的CPU中,有一個稱為“時間戳(Time Stamp)”的部件,它以64 bit無符號整型數(shù)的格式,記錄了自CPU上電以來所經(jīng)過的時鐘周期數(shù),提供了1條機器指令RDTSC(Read Time Stamp Counter)來讀取這個時間戳。但實際執(zhí)行約需200個時鐘周期,對于1 GHz處理器實用分辨率約0.2 μs。
采用高精度性能定時器或RDTSC均可為網(wǎng)絡(luò)延時測量提供μs級計時,但要根據(jù)系統(tǒng)的具體情況選擇一個最合適的。
有了μs級計時器,并不表示基于Windows系統(tǒng)的NTP授時精度實際達μs級。因為時間戳一般都在應(yīng)用層加蓋,包含了計算機處理和協(xié)議封裝(解封)開銷等不可具體量化的時延,數(shù)值大多在幾百μs到幾十μs間,具有隨機性,無法準(zhǔn)確預(yù)知,從而造成NTP精度無法進一步提高。百兆交換式局域網(wǎng)實際授時精度約±250 μs。
6  高精度局域網(wǎng)授時實現(xiàn)
在Windows計算機網(wǎng)絡(luò)中,采用高分辨率定時器可有效提高局域網(wǎng)NTP授時精度,減少時鐘與標(biāo)準(zhǔn)時間的偏差。校正時鐘頻率偏差系數(shù),可減少長期計時累積誤差及提高時鐘準(zhǔn)確度。
6.1 計算機網(wǎng)絡(luò)組成
為使測試結(jié)果反映實際應(yīng)用的環(huán)境,測試是在正常運行信息業(yè)務(wù)的真實網(wǎng)絡(luò)環(huán)境下進行的。參加測試的計算機和網(wǎng)絡(luò)設(shè)備正常處理日常業(yè)務(wù)。計算機網(wǎng)絡(luò)由100多臺計算機和十幾臺48/24口、10 M/100 M自適應(yīng)交換機級聯(lián)而成。計算機間以100 Mb/s網(wǎng)速通信。
作為NTP服務(wù)器的是一臺P4/2.8G/512 MB內(nèi)存,操作系統(tǒng)為Windows XP臺式計算機。NTP客戶端的計算機是一些PⅢ/866/256 MB內(nèi)存Windows XP計算機。Windows XP默認已打開UDP 123端口,為了不與Windows內(nèi)置的NTP服務(wù)發(fā)生沖突,根據(jù)上述提高NTP授時高精度算法編寫的客戶端和服務(wù)器端測試程序,采用其他空閑的UDP端口,如UDP 1000端口。
6.2 實驗評估
測試時間持續(xù)10天,客戶機每分鐘向服務(wù)器發(fā)出1個NTP請求進行測試:
(1)根據(jù)NTP返回包計算出時鐘頻率偏差系數(shù)k和NTP包延時d。各NTP客戶機所得的測試結(jié)果類似,圖3是其中1臺NTP,客戶機每分鐘向服務(wù)器發(fā)出1個NTP請求包,計算出客戶機時鐘頻率偏差系數(shù)組成的曲線圖。時鐘頻率偏差系數(shù)是某一數(shù)值附近波動變化的,主要受溫度的影響。曲線第42個點的時鐘頻率偏差系數(shù)是0.999 951 5,數(shù)值變化速度開始緩慢。假設(shè)時鐘頻率偏差系數(shù)是0.999 951 5,在未校正系數(shù)前,每天誤差約4.19 s。除去前面41個變化速度較快的點,10天中時鐘頻率偏差系數(shù)從0.999 951 5緩慢波動變化到0.999 951 2。對應(yīng)的時鐘頻率偏差系數(shù)誤差δ是3×10-7,折算后約38.5天誤差為1 s。所以校正時鐘頻率偏差系數(shù)后,時鐘長期計時誤差可輕易地達到10天少于1 s。

 


圖4所示為測試過程中每次NTP包在客戶機和服務(wù)器間往返的延時情況,在10天中99 %的NTP包延時小于500 μs;延時在1 ms~2 ms的NTP包24個,占0.17 %;延時在2 ms~10 ms的NTP包10個,占0.069 %;延時10 ms以上只有2個,占0.013 9 %。大延時NTP包在測試過程中上隨機出現(xiàn)的情況將僅占1 %,延時500 μs及以的NTP包濾除后,局域網(wǎng)NTP授時最大延時小于500 μs,授時偏差最大不超過±250 μs。

7 進一步提高NTP授時精度的方法
  局域網(wǎng)絡(luò)延相對較大的原因在于時間戳一般都是在應(yīng)用層加蓋。為減少操作系統(tǒng)內(nèi)核處理延時的影響提高NTP授時精度,發(fā)/收NTP包時間戳應(yīng)盡量接近主機真實發(fā)/收包時刻。在不改變硬件的條件下,一個可行的辦法是修改網(wǎng)卡驅(qū)動程序,將記錄NTP包發(fā)/收時間戳從應(yīng)用程序移至網(wǎng)卡驅(qū)動程序處,可消除操作系統(tǒng)內(nèi)核處理延時不確定而引入的誤差[3]。這種方法在局域網(wǎng)中可大幅提高NTP授時精度至μs級。
為了減少溫度引起晶振頻率漂移對時鐘準(zhǔn)確度的影響,可以采用數(shù)字溫漂補償方法,提高時鐘長期計時準(zhǔn)確度。先測出工作溫度范圍內(nèi)溫度對應(yīng)的溫漂補償系數(shù),工作時每隔一定時間,根據(jù)實際溫度查出對應(yīng)補償系數(shù)動態(tài)地修正時間。
時鐘頻率偏差和時鐘分辨率低是局域網(wǎng)NTP授時精度不高的主要原因。本文提出了基于通用Windows PC 軟硬件架構(gòu)消除這兩種誤差的低成本且實施方便的高精度方法。隨著自動化的通信技術(shù)發(fā)展日新月異,以太網(wǎng)技術(shù)不斷滲透到工業(yè)控制現(xiàn)場總線應(yīng)用領(lǐng)域,許多工業(yè)控制需要精確的時間,如變電站順序事件記錄SOE需達ms級,本文方法可為工業(yè)以太網(wǎng)的高精度同步時鐘應(yīng)用作參考。


參考文獻
[1]  MILLS D L. Network time protocol(Version 3) specification,Implementation and Analysis-RFC1305,1992.
[2]  黃沛芳.高準(zhǔn)確度時鐘程序算法.電子技術(shù)應(yīng)用, 2001,27(8).
[3]  黎文偉,張大方,謝高崗,等.基于通用PC架構(gòu)的高精度網(wǎng)絡(luò)時延測量方法.軟件學(xué)報,2006,17(2):275-284.

 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。