劉巖,武建鋒,王康
基于多核處理器的NTP服務器設計
劉巖1,2,3,4,武建鋒1,2,3,4,王康1,2,3
(1. 中國科學院 國家授時中心,西安 710600;2. 中國科學院 時間頻率基準重點實驗室,西安 710600;3. 中國科學院 精密導航定位與定時技術重點實驗室,西安 710600;4. 中國科學院大學,北京 100049)
響應能力是NTP(network time protocol)服務器的一項重要性能指標。為了提高響應能力,基于多核處理器設計了一款NTP服務器,并對不同內核數(shù)下服務器的響應能力進行了試驗分析,得到了服務器內核數(shù)與響應能力之間的定量關系,為多核NTP服務器的應用奠定了基礎。
網(wǎng)絡時間服務器;多核處理器;高響應能力
NTP(network time protocol),網(wǎng)絡時間協(xié)議,是互聯(lián)網(wǎng)TCP/IP模型中應用層的一種協(xié)議,它定義了一種基于網(wǎng)絡的時間同步方法[1]。NTP是由美國特拉華大學的D. L. Mills教授提出的,目前已經(jīng)發(fā)展到第4版[2]。另外,NTP既能應用于局域網(wǎng)內,又能用于廣域網(wǎng)內,時間同步精度在廣域網(wǎng)內能達到幾十個毫秒,在局域網(wǎng)內能達到毫秒級[3-4]。NTP應用范圍廣,同步精度可以滿足大眾要求,因此獲得了廣泛的應用。
NTP在應用時通常采用客戶端/服務器模式,基本系統(tǒng)組成結構如圖1所示,包括一臺服務器和多個客戶端??蛻舳送ㄟ^向服務器發(fā)送請求并接收服務器的應答,即可將本地時間同步到服務器。服務器從GNSS(Global Navigation Satellite System)衛(wèi)星、天文臺等獲取標準時間UTC(universal time coordinate),為系統(tǒng)提供準確的時間參考[5]。系統(tǒng)內各個客戶端分別將時間同步到服務器,以實現(xiàn)彼此之間的時間統(tǒng)一。
圖1 NTP時間服務結構
如今,隨著各種分布式系統(tǒng)規(guī)模不斷擴大,系統(tǒng)內客戶端數(shù)量越來越多。因此,對NTP服務器的請求響應能力提出了更高的要求。響應能力可以以單位時間內服務器能夠響應的請求次數(shù)來定量的表征[6]。在互聯(lián)網(wǎng)網(wǎng)絡授時項目中要求實現(xiàn)NTP服務器響應能力不低于30 000次/s。
在NTP的時間同步過程中,服務器處理請求的流程可分為3個階段:接收請求、處理數(shù)據(jù)、發(fā)送應答[7]。在多核處理器出現(xiàn)之前,NTP服務器采用串行工作方式,當收到多個請求時,服務器只能一個一個地處理,不斷地重復上述處理流程。當時提高服務器的響應能力只能靠使用更高主頻的處理器來實現(xiàn),而更高的主頻將產(chǎn)生更多的熱量[8],因此,處理器的主頻也就無法無限制的提高。多核技術的出現(xiàn)使得某一時刻多個處理器內核能同時工作。如果在每一個內核上分別運行一個客戶端請求處理程序,使服務器以并行方式工作,這樣在相同時間內就可以處理更多的請求[9]。比如,圖2描述了使用兩個內核時,并行方式與串行方式的請求處理過程的比較。在并行方式中,當某個內核上的處理過程處于處理數(shù)據(jù)階段,另一內核上的程序可以去接收請求,這樣就能縮短多個請求的總的處理時間,從而提高服務器的請求響應能力。
另外,在串行處理方式中,一些其他功能,比如服務器時間到UTC的同步,也會占用請求處理時間;而在并行方式中,這些功能可以單獨運行在一個內核上,這樣可以進一步提高請求響應能力。
本文使用一種多核處理器設計了一款NTP服務器,以滿足項目對響應能力指標的要求,同時,對內核數(shù)與響應能力之間的關系進行了研究,為多核NTP服務器的應用奠定了基礎。
圖2 串行和并行方式處理過程對比
圖3 客戶端/服務器的時間同步過程
客戶端根據(jù)這4個時間戳可以得出下面3個等式:
由式(4)和式(5)可以求出:
服務器的組成結構如圖4所示,其結構包括以下幾個單元[11]:
網(wǎng)絡通信單元:負責與客戶端通過網(wǎng)絡傳輸報文,實現(xiàn)方式是基于標準的以太網(wǎng)接口硬件和TCP/IP通信協(xié)議進行網(wǎng)絡編程;
數(shù)據(jù)處理單元:負責處理客戶端的請求數(shù)據(jù)并對其他單元進行控制,通過在處理器上編程來實現(xiàn);
時鐘單元:負責保證服務器時間與UTC一致,為客戶端提供準確的時間參考,包括守時模塊和時間源模塊,守時模塊負責維持一個本地時間,時間源模塊用于獲取UTC并校準守時模塊的時間。
圖4 服務器組成結構
圖5所示是本設計的硬件組成結構以及各部分之間的連接方式。
圖5 服務器的硬件組成
網(wǎng)絡通信單元和數(shù)據(jù)處理單元的硬件整合在一種Raspberry Pi 3B開發(fā)板上。Raspberry Pi是一種基于ARM的微型電腦主板,同時能夠運行Linux操作系統(tǒng),具備PC所有的基本功能。本設計使用的Raspberry Pi 3B采用一種基于ARM Cortex-A53的處理器芯片,具有4個內核,主頻1.2 GHz,同時擁有1 GB的內存。
時鐘單元的守時模塊采用Raspberry Pi上Linux的系統(tǒng)時鐘,精度可以達到1 ns[12]。時間源模塊硬件使用UBLOX NEO-M8T GNSS接收機。UBLOX NEO-M8T可以從GNSS衛(wèi)星獲取UTC,同時能夠輸出用于時間校準的時碼信息和1 PPS信號[13]。Raspberry Pi分別通過串口和I/O口讀入GNRMC數(shù)據(jù)幀和1 PPS信號,以校準系統(tǒng)時鐘。Raspberry Pi和UBLOX NEO-M8T的接口均為TTL電平,無需轉換。
對應于服務器的3個組成單元,軟件可分為網(wǎng)絡通信程序模塊、數(shù)據(jù)處理程序模塊和時間校準程序模塊。其中重點是基于多核處理器的請求數(shù)據(jù)處理程序設計。
2.2.1 網(wǎng)絡通信程序設計
服務器在接收和發(fā)送NTP報文時涉及到網(wǎng)絡編程。網(wǎng)絡通信過程可以使用TCP/IP 5層模型來描述,同時在應用層和運輸層之間存在一個socket抽象層。socket將應用層以下的邏輯封裝起來,并為用戶程序提供了接口函數(shù),用戶只需要調用相關函數(shù)即可實現(xiàn)網(wǎng)絡通信[14]。
圖6所示為客戶端和服務器之間通信程序的執(zhí)行流程。首先兩端都需要調用socket( )函數(shù)創(chuàng)建一個基于UDP協(xié)議的網(wǎng)絡連接,同時服務器還需要使用bind( )函數(shù)綁定本機的IP地址和端口。接著服務器使用recvfrom( )函數(shù)接收客戶端的請求報文,此函數(shù)在沒有請求到來時處于阻塞、監(jiān)聽狀態(tài),不占用處理器資源。recvfrom( )函數(shù)在接收數(shù)據(jù)的同時還可以得到客戶端的IP地址和端口。當客戶端需要校準時鐘時,通過sendto( )函數(shù)向服務器發(fā)送請求報文,sendto( )函數(shù)可以向指定的IP地址和端口發(fā)送數(shù)據(jù)。收到請求后,服務器對報文進行處理,最后調用sendto( )函數(shù)向客戶端發(fā)送一個應答報文??蛻舳送瓿蓵r間同步后,可以關閉socket連接,而服務器則要回到監(jiān)聽狀態(tài),等待下一個請求[15]。
圖6 客戶端/服務器通信程序流程
2.2.2 數(shù)據(jù)處理程序設計
數(shù)據(jù)處理程序的流程圖如圖7所示。程序首先建立網(wǎng)絡連接、綁定IP地址和端口。接著接收客戶端的請求報文,為了盡可能地保證時間戳的準確性,收到報文后立刻記錄下接收時刻,之后對報文格式進行判斷,如果報文格式正確,則對報文進行處理,最后向客戶端發(fā)送應答報文,否則將報文直接丟棄,不予處理。
圖7 單線程程序流程
為了利用多核處理器,程序采用多線程的設計方法[16]。每個線程執(zhí)行同樣的處理流程,并設置為分別在不同的內核上運行。通過設置線程數(shù),即可實現(xiàn)對不同內核數(shù)的利用。協(xié)議規(guī)定123作為NTP服務器的通信端口,由于一個進程只能綁定到一個端口,因此程序采用在一個進程下設置多個線程的方式,而不是使用多進程[17]。圖8所示是雙線程的流程圖,多線程的原理與雙線程相同。主線程建立網(wǎng)絡連接、綁定IP地址和端口后,創(chuàng)建一個子線程。子線程與主線程共享同一個socket接口,接著執(zhí)行與圖7同樣的請求處理流程。
服務器通過網(wǎng)絡接收請求報文時,報文首先進入socket的接收緩存區(qū),然后用戶程序到這個緩存區(qū)中讀取報文;發(fā)送應答時,也是將報文寫入到socket的發(fā)送緩存區(qū)。由于多個線程共享同一個socket接口,因此,某一時刻不能有兩個線程同時調用recvfrom( )或sendto( )函數(shù)訪問socket接收或發(fā)送緩存區(qū)。為此,程序采用鎖機制,線程在調用recvfrom( )或sendto( )函數(shù)前必須獲得鎖的權限,而某一時刻只能有一個線程擁有權限,其他線程只能排隊等待,執(zhí)行完recvfrom( )或sendto( )函數(shù)后再將鎖釋放,這樣就可以保證同一時刻只有一個線程能夠訪問socket的接收或發(fā)送緩存區(qū)[17]。
圖8 雙線程程序流程
2.2.3 時間校準程序設計
時間校準程序被設置為一個線程,獨立運行,不占用請求處理資源。
Linux中含有一個系統(tǒng)時鐘,精度可以達到納秒級。Linux內核為用戶提供兩個接口函數(shù)clock_gettime( )和clock_settime( ),前者可以從系統(tǒng)時鐘中獲取納秒級時間,后者可以修改系統(tǒng)時鐘,精度也在納秒級。
UBLOX NEO-M8T每秒在輸出GNRMC數(shù)據(jù)幀的同時輸出一個1 PPS信號,兩種波形如圖9所示。
圖9 GNRMC數(shù)據(jù)幀和1 PPS信號波形
1 PPS信號的脈沖上升沿與UTC的秒起始時刻對齊,而GNRMC數(shù)據(jù)幀的輸出滯后于秒起始時刻[18]。
Raspberry Pi通過串口讀入GNRMC數(shù)據(jù)幀,讀入的數(shù)據(jù)幀可能出現(xiàn)以下情況:
① 由于UBLOX NEO-M8T接收機未收到GNSS衛(wèi)星信號,導致輸出的數(shù)據(jù)無效,無效數(shù)據(jù)形如:$GNRMC,081 253.00,V,…,270 219,…,N*61,接收機剛啟動時就會發(fā)生這種情況;
② 信號接收過程中受到干擾,使接收到的數(shù)據(jù)與衛(wèi)星發(fā)送的數(shù)據(jù)不一致;
③ Raspberry Pi串口接收數(shù)據(jù)幀時出現(xiàn)錯誤,比如丟失位。
因此,在提取UTC信息之前,需要對收到的GNRMC數(shù)據(jù)幀進行校驗。校驗過程通過軟件方式來實現(xiàn),校驗程序每次從硬件讀入一個字符,首先要找到起始字符‘$’,然后判斷接下來收到的字符是否依次是‘G’,‘N’,‘R’,‘M’,‘C’,如果中間插入其他字符,說明收到的數(shù)據(jù)有誤,不再接收下面的字符,而是重新尋找新一幀的起始字符。程序還要判斷是否收到表示數(shù)據(jù)幀無效的字符‘V’。如果未出現(xiàn)上述兩種情況,那么將接收所有字符,最后對數(shù)據(jù)進行校驗,校驗通過則從中提取出UTC的秒以上時間[19]。
Raspberry Pi通過串口每秒從UBLOX NEO-M8T接收機讀取一次UTC,通過I/O口接收1 PPS信號。1 PPS的上升沿到達時,說明此時是UTC 1秒的開始。利用此信號的上升沿觸發(fā)處理器中斷,在中斷處理程序中,首先根據(jù)串口讀入的UTC校準系統(tǒng)時鐘的秒級時間,然后將納秒級時間歸零,即可實現(xiàn)服務器時間到UTC的同步。由于每秒的GNRMC數(shù)據(jù)幀滯后于1 PPS信號,所以當前1 PPS上升沿引起中斷時,串口讀入的最新秒值對應于上一個1 PPS信號,所以應將當前秒值加1后再調整系統(tǒng)時鐘的秒級時間。
服務器設計完成后,首先對時間同步精度進行了測試,以確保能達到基本要求;然后分別對不同內核數(shù)下的響應能力進行了測試,以對內核數(shù)與響應能力的關系進行分析。
服務器的時間同步精度使用TimeAcc-007進行測試。測試時,TimeAcc-007通過網(wǎng)線直接與服務器連接,以每秒一次的頻率向服務器發(fā)送請求,一共采集了10 000組數(shù)據(jù)。測試結果如圖10所示,同步精度的均值為16.5 μs,標準差6.93 μs,均方差17.9 μs。
圖10 時間同步精度測試結果
測試服務器的響應能力時,設計了一個多客戶端模擬程序。程序運行在測試計算機上,可以在單位時間內向服務器發(fā)送一定數(shù)量的請求數(shù)據(jù)包,通過wireshark軟件可以統(tǒng)計服務器每秒的響應次數(shù)。測試時,程序從5 000次/s開始,以5 000次/s間隔遞增,向服務器發(fā)送請求,每組進行20次測試[20]。
測試結果如表1所示,在使用單核處理器時,當請求量小于25 000次/s時,服務器可以響應全部請求;而當請求量增加到30 000次/s時,響應量的均值在26 272次/s左右,圖11所示是20次測試結果曲線圖。
表1 不同請求量的響應結果 單位:次/s
雙核的響應能力均值在44 102次/s左右;三核的響應能力均值在46 027次/s左右;四核的響應能力均值在46 089次/s左右,圖12所示是雙核、三核和四核的測試結果曲線。表2給出了不同內核數(shù)下響應能力的最小值、最大值和均值的詳細結果。
圖12 雙核、三核和四核下50 000次/s的響應結果
表2 不同內核數(shù)的響應能力 單位:次/s
論文首先對NTP的時間同步原理進行了分析,確定了服務器的請求處理流程;接著介紹了基于多核處理器的NTP服務器設計方法,包括服務器的硬件介紹和軟件設計,重點是在多線程程序的設計,同時還包括時鐘單元的程序設計;最后對服務器的性能進行了測試,包括服務器的時間同步精度和不同內核數(shù)下服務器的響應能力。測試結果表明:服務器的時間同步精度約為16.5 μs;使用雙核處理器時,響應能力可以達到40 000次/s,能夠滿足項目的30 000次/s的指標要求。此外,相比于單核,雙核處理器的響應能力能夠提高約67.9%;而相比于雙核,三核、四核的響應能力只提高了4.4%左右。而目前NTP服務器可擴展的功能越來越多,比如增加校驗加密算法。雖然三核和四核處理器對響應能力沒有明顯提高,但可以用于擴展其他功能,同時不會降低服務器的響應能力。
[1] MILLS D L. Network Time Protocol Specification, Impementation and Analysis-RFC 1305[S]. 3rd. 1992.
[2] 陳敏. 基于NTP協(xié)議的網(wǎng)絡時間同步系統(tǒng)的研究與實現(xiàn)[D]. 武漢: 華中科技大學, 2005.
[3] 陳希, 滕玲, 高強, 等.NTP和PTP協(xié)議的時間同步誤差分析[J]. 宇航計測技術, 2016, 36(3): 35-40.
[4] 趙龍. 基于NTP協(xié)議的網(wǎng)絡授時研究[D]. 阜新: 遼寧工程技術大學, 2006.
[5] 黃沛芳. 基于NTP的高精度時鐘同步系統(tǒng)實現(xiàn)[J]. 計算機技術與應用, 2009, 35(7): 122-124+127.
[6] 吳鵬.NTP授時服務性能監(jiān)測及狀態(tài)評估[D]. 北京: 中國科學院大學, 2016.
[7] 宋妍, 朱爽. 基于NTP的網(wǎng)絡時間服務系統(tǒng)的研究[J]. 計算機工程與應用, 2003, 39(36): 147-149+152.
[8] 彭嵐, 周啟海. UNIX并發(fā)服務器及其幾種優(yōu)化改進方案[J]. 計算機應用, 2004, 24(4): 47-49.
[9] 李曉飛, 李開毅, 周洪運. 并發(fā)編程原理分析[J]. 玉溪師范學院學報, 2008, 24(4): 44-46.
[10] 胥婕, 徐亮, 董蓮, 等. 基于NTP協(xié)議的網(wǎng)絡時間同步系統(tǒng)的設計與實現(xiàn)[J]. 上海計量測試, 2017, 44(4): 10-13.
[11] 王瑞清. 嵌入式高精度NTP網(wǎng)絡時間服務器研究與實現(xiàn)[D]. 武漢: 華中科技大學, 2011.
[12] 李明國, 宋海娜. 計算機時間同步技術研究[J]. 系統(tǒng)仿真學報, 2002, 14(4): 477-480.
[13] 賀洪兵. 基于GPS的高精度時間同步系統(tǒng)的研究設計[D]. 成都: 四川大學, 2005.
[14] 鄧欽文. 基于ARM和Linux的嵌入式Web服務器研究與實現(xiàn)[D]. 長沙: 湖南大學, 2010.
[15] 王雷, 王子淘. 基于Linux的Socket網(wǎng)絡編程的性能優(yōu)化[J]. 電子設計工程, 2009, 17(9): 101-103.
[16] 劉仕筠, 盛志偉, 黃健. Linux環(huán)境并發(fā)服務器設計技術研究[J]. 成都信息工程學院學報, 2006, 21(5): 630-634.
[17] 申時全. 基于Linux多線程技術的網(wǎng)絡并發(fā)編程及應用研究[J]. 現(xiàn)代計算機, 2016, 31(16): 65-70.
[18] 張治煉. 基于GPS授時的本地同步時鐘的設計[D]. 成都: 電子科技大學, 2012.
[19] 李向宇, 鄒源忠, 劉玉菊. 基于GPS自動校正時間電子鐘的設計[J]. 信息技術與信息化, 2017(3): 33-35.
[20] 吳鵬, 華宇, 張旭海.NTP服務器的響應閾值測試軟件設計[J]. 時間頻率學報, 2017, 40(1): 36-42.
Design of NTP server based on multi-core processor
LIU Yan1,2,3,4, WU Jian-feng1,2,3,4, WANG Kang1,2,3
(1. National Time Service Center, Chinese Academy of Sciences, Xi’an 710600, China;2. Key Laboratory of Time and Frequency Primary Standards, Chinese Academy of Sciences, Xi’an 710600, China;3. Key Laboratory of Precise Positioning and Timing Technology, Chinese Academy of Sciences, Xi’an 710600, China;4. University of Chinese Academy of Sciences, Beijing 100049, China)
Responsibility is an important performance index of NTP (network time protocol) server. In order to improve the responsibility, a NTP server is designed based on multi-core processor in this study. The responsiveness of servers with different numbers of core is tested and analyzed, and the quantitative relationship between the numbers of server kernel and the responsibility is obtained. It lays the foundation for the application of multi-core NTP server.
NTP server; multi-core processor; high responsibility
10.13875/j.issn.1674-0637.2020-01-0018-11
2019-07-09;
2019-09-02
裝備發(fā)展部軍用標準資助項目(Y833ZX1601);中國科學院“西部之光”人才培養(yǎng)計劃西部青年學者B類基金資助項目(Y607YR8601)
劉巖,男,碩士,主要從事NTP網(wǎng)絡時間服務器的研究。