蘇 宇,胡 珩,2,張 濤,王金波
(1.中國科學院 空間應用工程與技術中心,北京 100094;2.中國科學院大學,北京 100049)
基于PTPd的精準時鐘同步技術的研究
蘇 宇1,胡 珩1,2,張 濤1,王金波1
(1.中國科學院 空間應用工程與技術中心,北京 100094;2.中國科學院大學,北京 100049)
IEEE1588定義了一種精準時鐘同步協議(PTP),因其具有高同步精度,故逐漸取代傳統的NTP(Network Time Protocol)被廣泛應用于更高時鐘同步精度的分布式測控系統中。PTP協議可以通過純硬件或純軟件方式實現,純硬件方式通過硬件編程實現,同步精度可達納秒量級,但是開發難度大;而純軟件實現的PTP利用協議實現完整的開源代碼PTPd實現,開發難度較低,同步精度略低于純硬件實現的PTP協議。文中在深入比較、分析了IEEE1588協議與NTP的同步機理后,并對純軟件實現的PTP(PTPd)進行同步精度測試。結果表明,PTPd的同步精度可達±10 μs,遠優于傳統的NTP同步協議±200 ms的同步精度,而被成功應用于載人航天嵌入式軟件第三方評測分布式測試系統中。
時鐘同步;網絡時間協議;IEEE1588;PTPd
近年來,隨著計算機技術和載人航天技術的飛速發展,航天嵌入式軟件系統的復雜度越來越高,接口越來越豐富,信號種類越來越多,如1553B總線接口、RS422接口、IEEE1394總線接口等。在航天嵌入式軟件測試時,會出現一個包含上述接口信號的航天嵌入式被測組件同時與多個嵌入式仿真測試前端板(核心板+底板的結構,核心板采用CPU+FPGA+存儲芯片的通用架構,底板為相應對外接口)相連,即組成分布式測試系統。在分布式測試系統中,一部分測試用例的執行常常要各個嵌入式仿真前端協同動作—如某型號航天器嵌入式主控軟件要求在1553B總線的XXX指令注入后200μs±25ns內注入SPI接口的XXX指令,這就要求兩個測試前端能夠嚴格按照此時序關系向被測對象注入測試激勵數據。因此,需要一個精確的、統一的標準時間,從而同步分布式測試系統中的其他各個嵌入式仿真測試前端。
同步的基準時間可以是上位機系統時間,或者是以其中某一個嵌入式仿真測試前端的時間作為標準時間(即主時鐘),進而去同步其他前端的系統時間(從時鐘),以達到測試的目的。
現階段,被廣泛使用的網絡時間同步方法為網絡時間協議(NetworkTimeProtocol,NTP)。但是,此方法在距離不超過2 000公里萬維網內NTP的同步精度為10ms,在局域網內的同步精度為1ms[1],在同步精度要求較高的場合并不適用。而人們傳統意識上的GPS,雖然性能可觀,但要求有同步衛星的覆蓋,而且存在一定的政治安全問題,因此讓人望而卻步。在這種情況下,IEEE1588協議應運而生,并迅速因其高精度與高可靠性受到人們的普遍歡迎。
文中的目的是分析NTP、IEEE1588協議的同步機理以及PTPd(IEEE1588的軟件實現)的結構特點,并將PTPd應用于載人航天嵌入式軟件第三方評測系統中。通過實際應用測試結果說明PTPd的高同步精度可以滿足測試需要。
1.1 NTP協議
1.1.1 NTP協議概述
NTP協議是由美國海軍水面武器中心(NSWC)、美國國防部高級研究計劃局(DARPA)以及美國國家科學基金(NSF)資助的網絡時間同步項目,其第一個版本于1988年成功開發。截止到目前為止,NTP協議已經發展到了第四個版本,應用到與時間同步的各個領域。為了能夠達到令人滿意的同步精度,NTP采用了多服務器算法[2],該算法十分復雜,這也在某種程度上限制了NTP協議的推廣。但在大多數網絡負載不大的情況下,NTP協議能夠達到毫秒級的同步精度,這一點使其成功應用在很多對同步精度要求不是很高的應用中;當NTP用于洲際間時間同步時,同步的精度只有秒級。
1.1.2 NTP協議的同步機理
NTP協議一般有對等工作模式、廣播/多播工作模式以及客戶端/服務器(C/S)模式。在對等工作模式下,客戶端和服務器具有相同地位,任何一方都可以同步另一方,也可以被對方同步,一般來說,率先發出申請建立連接的一方工作在主動模式下,而另一方工作在被動模式下;廣播/多播工作模式采用了一對多模式,即作為服務器的一方主動發出攜帶時間戳的消息,作為客戶端可以根據此消息中的時間戳信息來調整自己的時間;在C/S模式下,采用了一對一的連接方式,服務器能夠同步客戶端的時間信息,而客戶端不能同步服務器的時間信息。不同的同步協議往往提供不同的時間同步策略,但都遵循兩個通用的模型:(1)客戶端發送請求到服務器,服務器用當前時間響應;(2)服務器發送時間信息給一組或所有用戶[3]。
一般來說,當今通常是采用C/S模式進行時間同步的[4]。服務器端接收到客戶端周期性發出的帶有本地時間戳的NTP報文后,向客戶端應答一個帶有服務器時間戳的報文,根據以上報文攜帶的時間戳信息來計算客戶端與服務器之間的時間偏移量(Offset)以及時間同步過程中的網絡傳輸延時時間(Delay)這兩個關鍵參數。同步原理如圖1所示。

圖1 NTP協議同步原理圖
首先假定服務器的時間是精確的國際標準時間(UTC),而客戶端與服務器之間的時間偏移量為Offset,同步報文從客戶端發送到服務器端經歷網絡路徑延時時間為Delay1,而從服務器端發送應答報文到客戶端的網絡路徑延時時間為Delay2,總的網絡路徑延時時間為Delay=Delay1+Delay2。
同步過程如下,首先客戶端向服務器發送一個NTP同步請求報文,并加蓋了其自身離開客戶端估計時間T1;當服務器收到該報文時加蓋了本地的接收時間戳T2,同時服務器向客戶端回傳一個攜帶本地發送時間戳T3的響應報文;客戶端收到該報文后,加蓋了客戶端本地時間戳T4[5]。
綜上所述,可以得出以下方程:
T2-T1=Offset+Delay1
(1)
T4-T3=Delay2-Offset
(2)
Delay=Delay1+Delay2
(3)
為了簡化問題,假設從客戶端到服務器的網絡傳輸延時等于從服務器到客戶端的網絡傳輸延時,即:
Delay1=Delay2=Delay/2
(4)
那么以上三式可以簡化為兩式:
T2-T1=Offset+Delay/2
(5)
T4-T3=Delay/2-Offset
(6)
則由上述公式可推導出:
Offset=[(T2+T3)-(T1+T4)]/2
(7)
Delay=(T4-T1)-(T3-T2)
(8)
NTP協議包含一個64bit的無符號定點數協調世界時時間戳。整數部分用高32bit表示,對應于從基準時間(1900年1月1日00:00:00)直到當前的秒累計計數值;小數部分用低32bit表示,其時間最小分辨率是200ps。相對于時間基準,到2036年時,64bit數將發生溢出,即每136年這64bit的字段將歸零,到時將廢除此時間戳或重新定義新協議[5]。
1.2 IEEE1588協議
1.2.1 IEEE1588協議概述
2002年出現的IEEE1588(Precision Time Protocol,PTP)[6]協議,全稱是“網絡測量和控制系統精密時間同步協議標準”,簡稱PTP(Precision Time Protocol)協議。相對于NTP協議,PTP為網絡上亞微秒級的同步精度的設備提供一個標準方法,確保事件和時間戳在所有設備上使用相同的時間基準[7]。
IEEE1588精準時鐘同步協議通常可以采用純軟件或純硬件的方式實現。純硬件的方式實現,采用硬件編程的方式,可以避免操作系統的調度和內存管理、UDP和IP等協議的封裝、網卡控制器里FIFO(先進先出)隊列的排隊和總線仲裁等[8]過程的影響,在網絡的MAC層獲得時間戳,能夠達到納秒級的同步精度[9]。常見的純硬件的實現又可分為通過FPGA實現和通過集成有PTP協議的網絡收發芯片實現,同步精度高,但是需要有相應的硬件支持,成本高,且開發難度也較大;而采用純軟件方式實現的IEEE1588精準時鐘同步協議,通用的方案是采用開源的IEEE1588協議實現代碼(PTPd),開發難度大大降低;但因其是在協議上層獲取時間戳信息,同步精度達不到純硬件的實現方式的納秒量級。
截止到目前,IEEE1588協議已經發展到了第二版-IEEE1588V2。與IEEE1588V1相比,IEEE1588V2引入了點延時機制,用來測量一對端口的平均路徑延時時間;時間戳的表示由64 bit有符號數進行,時間分辨率可以達到1/216ns;引入了透明時鐘模型以便將報文在透明時鐘內的延時時間也能累加到時間修正域中,并采用了雙向信道,以上措施的采用大大提高了同步精度。
文中在純軟件實現IEEE1588協議的基礎上,將其與純軟件實現的NTP協議進行同步精度的對比,以體現純軟件實現的IEEE1588協議(PTPd)的優勢。
1.2.2 IEEE1588協議的同步機理
IEEE 1588主要定義了四種多點傳送的時鐘報文類型:同步報文(Sync)、跟隨報文(Follow_Up)、延遲請求報文(Delay_Req)和延遲請求響應報文(Delay_Resp)[10]。
IEEE1588協議是通過在主從時鐘之間傳輸同步報文來實現同步,主要分為兩個階段:偏差測量階段和延時測量階段[11]。
第一階段:偏移測量階段,用來修正主時鐘和從時鐘之間的時間偏差[12]。同步過程如下,主時鐘以多播的形式周期性向從時鐘發送Sync,主時鐘緊接著又發送攜帶了Sync準確發送時間Tm1的Follow_Up。從時鐘收到Sync后記下Sync的準確到達時間Ts1。則由Tm1和Ts1可計算出主、從時鐘之間的Offset,這里由于同步報文的Delay未知,先假設Delay=0,這里同樣假設網絡是對稱的,即從從時鐘到主時鐘的網絡傳輸延時等于從主時鐘到從時鐘的網絡傳輸延時。則主從時間偏差值的計算公式是:
Offset=Ts1-Tm1-Delay
(9)
第二階段:延時測量階段,用來測量主、從時鐘間的Delay。從時鐘收到Follow_Up后,向主時鐘發出一個Delay_Req,同時記下Delay_Req精確發送時間Ts3。主時鐘收到Delay_Req后記錄下Delay_Req的精確到達時間Tm3,主時鐘緊接著發送Delay_Resp,把Tm3傳遞給從時鐘。根據Ts3和Tm3,則可計算出從時鐘到主時鐘之間的網絡傳輸延時時間。主時鐘到從時鐘的傳輸延時根據上一次同步報文的發送來計算,則:
Delay=[(Ts2-Tm2)+(Tm3-Ts3)]/2
(10)
經過Tm4到Ts4以及Tm5到Ts5的調整過程,最后主從時鐘達到了同步。
時鐘同步在實際通信活動中是周期性的行為。即便主、從時鐘達到同步以后,從時鐘依然要對主時鐘發出的每一個時鐘同步報文進行計算。如果計算出的偏移值不等于0,說明兩者之間的時鐘又處于不同步狀態,需要重新按照上面的步驟進行時鐘同步[13]。
自從IEEE1588誕生后,其純硬件實現方式更多地受到學者和工程師的關注,純軟件的實現(PTPd)往往被人們忽視。文中使用純軟件實現的IEEE1588協議,即由著名的開源軟件網站SourceForge.Net負責維護的開源的IEEE1588協議—PTPd。PTPd包含了兩個版本:Version1用于支持IEEE1588-2002,Version2用于支持IEEE1588-2008[14]。文中采用PTPd1.1.0版代碼,由于PTPd代碼全部是由C語言開發,因此可以很方便地移植到32位或64位系統上,也很適合嵌入式系統。PTPd的時鐘伺服系統如圖2所示。
由圖2可知,PTPd時鐘同步測試程序是在用戶空間加蓋的發送時間戳,又由于嵌入式操作系統的存在,則同步的結果不可避免地會受到通信協議棧以及操作系統任務調度延時的影響,因此,高精度的時鐘同步可以分步實現,即在CPU這一層上面只實現同步精度達

圖2 PTPd的時鐘伺服系統
到幾十微秒級或微秒級的同步過程,更精確的納秒級的同步可由FPGA實現,實現過程在這里不予詳細說明。
PTPd程序主要由IEEE1588協議引擎、最佳主時鐘算法、時鐘伺服系統、數據包的處理、網絡服務、時間戳模塊、啟動的初始化、定時器以及其他模塊組成。它們之間的關系如圖3所示。

圖3 PTPd的整體結構
PTPd各個模塊的功能如下:
(1)IEEE1588協議引擎狀態機。
主要由protocol.c實現。根據系統當前運行的狀態,保證狀態機在正常狀態下處于各個狀態之間的循環切換狀態,并且能在發生錯誤的情況下退出循環。
(2)初始化。
由dep/startup.c實現,主要功能是對PTPd程序執行前對運行環境等進行初始化操作。
(3)報文處理。
由dep/msg.c函數實現,它的主要功能是根據協議的規范將欲發送的報文打包,同時將接收到的報文進行解包處理。
(4)網絡服務。
由dep/net.c實現,初始化并建立socket套接字,并建立UDP網絡連接;發送、接收報文,并獲取時間戳信息。
(5)時鐘伺服系統。
由dep/servo.c函數實現,它的主要功能是根據服務器至客戶端時鐘之間的網絡傳輸延時和客戶端至服務器時鐘之間的網絡傳輸延時,計算出服務器與客戶端之間的時鐘偏差,并對本地時鐘進行修正。
(6)最佳主時鐘算法。
由bmc.c函數實現IEEE1588協議定義的最佳主時鐘算法,該函數返回經過自身仲裁的服務器、客戶端時鐘各自的狀態。
(7)定時器。
由dep/timer.c函數實現,用于控制客戶端時鐘發送Delay_Req報文和服務器時鐘發送Sync報文的周期,以及判斷Sync報文接收是否發生超時等。
綜上所述,不難看出,NTP協議與IEEE1588協議的同步機理還是有所區別的,除了IEEE1588協議的軟件PTPd會根據最佳主時鐘算法選取一個相對較穩定的主時鐘外,在IEEE1588協議中,主時鐘發送Sync后,還緊接著發送了Follow_Up,在Follow_Up中,攜帶了Sync精確的發送時間,而NTP協議則用Sync自身攜帶的本報文的預計發送時間,因此,NTP協議的同步精度要比IEEE1588協議(包括PTPd)同步精度低。
為了更好地說明PTPd的同步精度,在開始測試PTPd同步精度之前,首先測試一下NTP的同步精度。
3.1 NTP同步精度測試
測試之前,先來了解一些關于時間的術語:
GMT時間:格林威治時間,國際標準時間,中國位于東八區,時間為GMT+8,即北京時間;
UTC時間:世界協調時間,可認為跟GMT是相同的含義;
時間戳:NTP服務器上的時間戳為從1900年1月1日0時0分0秒開始到至今的秒數(UTC時間);由于UNIX操作系統是1970年正式發布的,因而PC機上的時間戳為1970年1月1日0時0分0秒到至今的秒數(因此也叫UNIX時間戳),需在PC機的時間戳秒數的基礎上加上從1900年1月1日0時0分0秒到1970年1月1日0時0分0秒的秒數:即3 600 s*24 h*(365 days*70 years+17 days)。
NTP是基于UDP協議進行傳輸的,網絡端口號為123,所涉及的時間同步報文均封裝在UDP協議報文中進行傳輸。
編程實現NTP的本地客戶端代碼,根據式(1)~(8)可以計算出客戶端與NTP服務器之間的Offset以及單程Delay/2。
在NTP同步精度驗證過程中,選用遠程NTP同步服務器,來同步本地PC機上的時鐘。本地PC機的操作系統為Fedora20,首先調整本地時間超出標準時間10 min左右,然后Fedora進入root模式,執行NTP的客戶端同步程序,同步周期為3 s,同步結果如圖4所示。

圖4 NTP協議同步結果
由圖4可以觀測到,同步過程開始后,秒級偏差在同步算法的調整下迅速歸零,而毫秒級的偏差則以±200 ms為區間在零值附近震蕩,本地時間被調整為標準時間。從圖4不難看出,NTP協議的同步精度為幾百毫秒級,因此NTP協議可以應用于對同步精度要求不太高的領域中,如網絡授時系統。
3.2 PTPd同步精度測試
在這里,利用某型號航天器嵌入式主控軟件的1553B仿真測試前端和SPI仿真測試前端作為PTPd同步精度測試的主、從時鐘模塊,用以太網將它們連接起來。
將Linux操作系統移植到ARM11(S3C6410)處理器上,即:移植Bootloader(uboot)、裁剪標準Linux內核生成內核映像文件以及制作支持讀寫操作的文件系統(YAFFS2),具體移植過程在此不予詳述。
將編譯好的Bootloader、內核映像文件以及文件系統燒寫到ARM11(S3C6410)的存儲芯片中。
交叉編譯PTPd1.1.0代碼,并下載到嵌入式測試前端板中,PC機系統時間為北京時間(GMT+8),嵌入式仿真測試前端系統時間為嵌入式Linux系統的開機時間,即2000年1月1日00:00:00。
先啟動作為主時鐘(同步服務器)的程序,再啟動作為從時鐘(同步客戶端)的程序,具體操作如下:
主時鐘端:#sudo ./ptpd -a 3,12 -y 0 -p -c
從時鐘端:#sudo ./ptpd -a 3,12 -y 0 -g -c
IEEE1588精準時鐘同步協議的同步結果如圖5和圖6所示。圖5為PTPd開始同步直到主從時鐘趨于穩定的過程,而圖6為主從時鐘同步趨于穩定后的放大的結果。

圖5 PTPd同步結果圖

圖6 PTPd同步趨于穩定后局部放大圖
當同步過程開始后,PTPd的時鐘伺服系統不斷計算主從時鐘的偏差與網絡路徑傳輸延時,并不斷調整本地時鐘。從圖5可以觀測到,主從時鐘的秒級時間差在時刻0時為非零值,在大于0時刻,秒級時間差在同步算法的調整下迅速歸零;納秒級時間差在經過一段時間的正負調整后,逐漸逼近零點。從圖6可以觀測到,在主從時鐘調整趨于穩定后,秒級時間差為0,納秒級時間差在正負10微秒區間來回震蕩,即能夠達到微秒級的同步精度。
這里由于嵌入式Linux并不是硬實時的操作系統,再加上PTPd在應用層獲取時間戳,因此中斷服務的延時和網絡協議棧的抖動都會對同步精度造成影響。因此在CPU負載過大時,會導致系統中斷延時時間不能夠得到確切的保證,從而影響時鐘的滴答和消息的接收,進而影響PTPd同步的精度;再次,由于在實際網絡傳輸時其他計算機數據流的存在,也會導致網絡傳輸延時變大甚至暫時堵塞,這樣網絡傳輸的延時是非對稱的,也會影響同步精度。但是對于一些對同步精度要求不是很高的同步系統來說,如CPU級的時鐘同步,這個精度已經夠用了。
綜上所述,PTPd實現的IEEE1588精準時鐘同步協議的微秒級的同步精度雖然沒有達到IEEE1588協議規定的納秒級同步精度,但是它要遠遠優于傳統NTP協議的幾百毫秒級的同步精度,因此,將PTPd實現的IEEE1588精準時鐘同步協議應用于載人航天某航天器嵌入式軟件第三方評測的分布式仿真測試系統前端中,同時配合仿真測試前端的FPGA,進行分級時鐘同步,取得了令人滿意的同步精度,順利完成了對某航天器嵌入式主控軟件的第三方測試任務。同時也為IEEE1588精準時鐘同步協議的推廣使用拓寬了道路。
[1] Cisco Systems,Inc.Network time protocol:best practices white paper[EB/OL].2008.http://www.cisco.com/c/en/us/support/docs/availability/high-availability/19643-ntpm.html.
[2] 李曉珍.基于IEEE1588的網絡時間同步系統研究[D].北京:中國科學院,2011.
[3] Li Dejun,Wang Gang,Yang Canjun,et al.IEEE 1588 based time synchronization system for a seafloor observatory network[J].Journal of Zhejiang University Sci C,2013,14(10):766-776.
[4] Zhang Xiangli,Tang Xiaoqi,Chen Jihong.Time synchronization of hierarchical real-time networked CNC system based on ethernet/internet[J].International Journal of Advanced Manufacturing Technology,2008,36(11-12):1145-1156.
[5] 陳 敏.基于NTP協議的網絡時間同步系統的研究與實現[D].武漢:華中科技大學,2005.
[6] IEEE Std 1588-2008. IEEE standard for a precision clock synchronization protocol for networked measurement and control systems[S].New York:IEEE,2008.
[7] Zhong Chongquan, Jin Haibo, Han Yechen,et al.Research and implement of distributed network motion control system[J].Informatics in Control,Automation and Robotics,2011,2:383-391.
[8] 張洪源.基于IEEE1588的數字化變電站時鐘同步技術的應用研究[D].成都:西南交通大學,2010.
[9] 魏 豐,孫文杰.IEEE-1588協議時鐘同步報文的精確時間標記方法研究[J].儀器儀表學報,2009,30(1):162-169.
[10] 陳永標.IEEE 1588時間精確同步協議(PTP)在電力系統應用的可行性研究[D].上海:上海交通大學,2009.
[11] 常夏勤.IEEE1588時間同步協議分析與實現[D].南京:南京大學,2011.
[12] 蘇 宇.嵌入式實時測試前端的設計與實現[D].北京:中國科學院大學,2013.
[13] 張亞超.基于IEEE1588協議的嵌入式網絡節點研究與實現[D].廣州:華南理工大學,2010.
[14] 宋升金,許永輝,姜守達.基于PTPd改進的高精密時鐘同步實現[J].計算機工程與應用,2013,49(2):72-75.
Research on Precision Clock Synchronization Technology Based on PTPd
SU Yu1,HU Heng1,2,ZHANG Tao1,WANG Jin-bo1
(1.Technology and Engineering Center for Space Utilization,Chinese Academy of Sciences,Beijing 100094,China;2.University of Chinese Academy of Sciences,Beijing 100049,China)
IEEE1588 defines a Precision Time clock synchronization Protocol (PTP) which is widely used in distributed measurement and control systems where higher synchronization precision are necessary,and PTP gradually takes the replace of the traditional NTP because of its high synchronization accuracy.The PTP can be achieved by pure hardware or pure software.The pure hardware method can achieve the synchronization precision up to nanoseconds through the hardware programming,but the development is difficult,while the pure software method can be achieved by the open source PTPd code,it is simple and able to obtain a lower synchronization accuracy than the pure hardware.In this paper,synchronization mechanism of NTP and IEEE1588 precision clock synchronization protocol was compared and analyzed,the PTP(PTPd) is implemented in pure software method were tested.Result of tests proves that the synchronization precision of PTPd is within 10μs,whichismuchbetterthantheNTP’s±200ms,soPTPdhasbeensuccessfullyappliedinthethird-partyembeddedsoftwaretestingofdistributedtestingsystemformannedspaceflight.
clock synchronization;NTP;IEEE1588;PTPd
2015-04-15
2015-07-17
時間:2016-01-04
國家重大專項(Y2140102RN)
蘇 宇(1985-),男,碩士,助理工程師,研究方向為高可靠軟件;張 濤,研究員,博士生導師,研究方向為高可靠軟件;王金波,副研究員,碩士生導師,研究方向為高可靠軟件測試與驗證。
http://www.cnki.net/kcms/detail/61.1450.TP.20160104.1510.046.html
TP202.2
A
1673-629X(2016)01-0175-06
10.3969/j.issn.1673-629X.2016.01.038