吳湯婷,梁喬,陳本富,盧立果
( 1. 東華理工大學 資源與環(huán)境經濟研究中心, 南昌 330013;2. 東華理工大學 測繪工程學院, 南昌 330013;3. 桂林理工大學 廣西空間信息與測繪重點實驗室, 廣西 桂林 541006 )
高精度全球衛(wèi)星導航系統(tǒng)(GNSS)數(shù)據(jù)是定位、導航和授時(PNT)服務的前提和基礎,對最終服務精度的好壞起決定性作用. 在PNT智能化服務大背景下[1],伴隨高精度數(shù)據(jù)解算工作的深入,GNSS數(shù)據(jù)的重要性愈加突顯. 一方面,GNSS的服務范圍不斷拓寬,已是部分傳統(tǒng)技術手段的重要替代技術[2],相關數(shù)據(jù)解算成為業(yè)內人員的日常工作;另一方面,GNSS自身的發(fā)展和完善,促進GNSS數(shù)據(jù)在種類和數(shù)量上迅速增長,被廣泛應用于電離層、對流層、參考框架、地球自轉和地殼運動等研究[3-7]. 高精度GNSS數(shù)據(jù)主要來源于國際GNSS服務(IGS)和連續(xù)運行參考站(CORS),供用戶下載使用.
伴隨用戶對GNSS數(shù)據(jù)的需求急劇增長,如何高效獲取大批量GNSS數(shù)據(jù)成為高精度PNT服務的首要考慮問題. 物理層面上,可通過提升信道帶寬來加快文件下載速率,但這無疑為用戶帶來更高的成本;技術層面上,操控多臺計算機共同執(zhí)行相同下載任務能有效縮短耗時,不足在于占用大量計算機資源. 因此已有眾多學者對如何高效下載GNSS數(shù)據(jù)進行研究,主要集中在基于單線程下載的軟件研發(fā),對多線程和多協(xié)程下載方法涉及較少[8-11]. 因此,本文以自研軟件為平臺,對單線程、多線程和多協(xié)程三種下載方法的性能進行比較分析,為相關GNSS數(shù)據(jù)下載軟件開發(fā)提供參考和借鑒.
GNSS數(shù)據(jù)主要存儲于目標IGS數(shù)據(jù)中心和CORS對應的服務器內,用戶可通過網絡請求的方式獲取. 在數(shù)據(jù)下載過程中采用單線程、多線程和多協(xié)程等方法,可以實現(xiàn)數(shù)據(jù)的有效下載. 其中,線程是操作系統(tǒng)能夠進行運算調度的基本單位,是程序實際執(zhí)行單元;協(xié)程則是一種用戶態(tài)的輕量級線程,它是比線程占用更少資源的執(zhí)行單元[12-14]. 下面依次對單線程、多線程和多協(xié)程下載方法做簡要介紹.
單線程下載是基于單個線程的控制流逐個下載目標數(shù)據(jù). 主要流程是先向服務器發(fā)送下載請求,建立計算機與服務器間的數(shù)據(jù)傳輸通道;然后CPU將web端數(shù)據(jù)緩存到電腦主存儲器(內存)中,存儲完畢后CPU被釋放;最后,存儲器直接存取(DMA)負責把內存里的緩存數(shù)據(jù)寫入磁盤. 詳細步驟如圖1所示.
圖 1 單線程下載流程圖
多線程下載是同時開啟多個線程,每個線程用于執(zhí)行不同的下載任務. 多線程下載首先以計算機和服務器間的數(shù)據(jù)傳輸通道為基礎,借助計算機內核的調度交替獲得CPU的處理資源,將每個線程任務對應的web數(shù)據(jù)分別緩存至內存,最后由DMA將其寫入磁盤,完成多任務并發(fā)下載[15],如圖2所示.
圖 2 多線程下載流程圖
多協(xié)程下載是同時創(chuàng)建多個協(xié)程,每個協(xié)程負責一個下載任務. 它是以計算機和服務器間的數(shù)據(jù)傳輸通道為基礎,將單個協(xié)程和線程進行對接,完成CPU緩存web數(shù)據(jù)的作業(yè)步驟;當協(xié)程遇到I/O(硬盤/內存)讀寫操作時,協(xié)程和線程會分離,其中協(xié)程獨自等待DMA將緩存數(shù)據(jù)寫入磁盤,線程則準備與下一個協(xié)程進行對接,循環(huán)上述流程,如圖3所示.
圖 3 多協(xié)程下載流程圖
圖 4 單線程下載不同量級文件
為比較分析單線程、多線程和多協(xié)程三種下載方法的性能,選取武漢大學IGS數(shù)據(jù)中心2020年001天至2021年234天(共計600天)的數(shù)據(jù),統(tǒng)計三種方法分別下載100、200、···、600天不同量級數(shù)據(jù)的耗時情況(取5次測試結果的平均值). 其中,下載測試的文件根據(jù)GNSS數(shù)據(jù)整體大小分為小、中、大三個量級,小文件是指單個文件大小小于1 MB/天的GNSS數(shù)據(jù),主要有廣播星歷、精密星歷、地球自轉參數(shù)、電離層延遲和對流程延遲等,測試選取的是最常用的GPS廣播星歷文件;中文件是指單個文件大小介于1~4 MB/天的數(shù)據(jù),該類文件包括大部分的觀測數(shù)據(jù),測試選取BJFS站RINEX 2.xx觀測數(shù)據(jù);大文件是單個文件大小超過4 MB/天的數(shù)據(jù),它在GNSS數(shù)據(jù)中占極少部分,主要有天線相位中心改正和部分觀測文件等,測試選取WUH2站RINEX 3.xx觀測數(shù)據(jù). 不同時間跨度下的小、中、大三類文件總大小如表1所示,三種下載方法的耗時結果如表2所示.
表 1 不同時間跨度的文件大小統(tǒng)計 MB
表 2 不同時間跨度的三種下載方法耗時統(tǒng)計 s
文中三種方法下載耗時采用課題組研發(fā)的“GNSS數(shù)據(jù)下載軟件(GDDS v1.0)”進行統(tǒng)計,該軟件采用Python設計開發(fā),支持IGS和區(qū)域CORS數(shù)據(jù)的下載[16]. 測試所用PC機軟硬件配置為:Intel Core i5-7200 CPU,2.50 GHz主頻,8 GB內存,Win10操作系統(tǒng)(64位);平均網速為:12.5 MB/s.
圖4為單線程下載不同量級文件. 由圖4可知,單線程在下載單個文件量級相同的任意時間跨度的數(shù)據(jù)時,速度幾乎保持不變;隨著下載任務中單個文件量級逐漸增大,單線程的下載速度也有提升.
圖 5 多線程下載不同量級文件
文件下載的耗時主要來源于服務器響應、CPU緩存和DMA拷貝三個等待過程,其中服務器響應由其自身硬件配置決定,與請求下載的文件大小無關;CPU緩存和DMA拷貝受文件大小和相關操作速度的雙重影響. 在單線程下載過程中,一直循環(huán)執(zhí)行著等待服務器響應下載請求、CPU緩存web數(shù)據(jù)和DMA將數(shù)據(jù)拷貝至磁盤等耗時操作. 當下載任務中的各文件大小基本一致時,上述三個等待過程的耗時大致相同,因此單線程下載任意時間跨度的相同量級文件的速度保持不變;隨著下載任務中單個文件量級增大,CPU緩存和DMA拷貝的耗時均線性增長,但等待服務器響應的耗時維持不變,因此總耗時的增長率低于文件量級的增長,即表現(xiàn)出單線程下載大文件的速度優(yōu)于中小文件.
圖5是多線程下載不同量級文件的詳情. 由圖5可知,多線程在下載小文件時,隨著時間跨度的增大,下載速度先急劇增大,300天小文件對應的下載速度達到峰值,然后下載速度有一定的回落;在下載中、大文件時,隨著時間跨度的增大,下載速度逐漸加快.
多線程是通過快速切換CPU資源達到CPU緩存和DMA拷貝同時進行的效果,因此在下載小文件過程中,多線程能短時間完成大批量數(shù)據(jù)下載工作,顯著提高整體下載速度;當下載速度達到服務器允許此類型文件的最快傳輸值時,出于安全考慮服務器會主動限制該IP地址的后續(xù)數(shù)據(jù)傳輸速度,導致長時間跨度的下載任務速度降低. 在下載中、大文件時,多線程下載速度難于達到服務器此類型數(shù)據(jù)的報警值,所以下載速度會隨時間跨度的增大而加快.
圖6是多協(xié)程下載不同量級文件的詳情. 由圖6可知,多協(xié)程的下載速度先隨時間跨度的增大而加快,當時間跨度達到一定程度后,下載速度便穩(wěn)定下來. 多協(xié)程的這種速度變化趨勢隨著下載任務中單個文件量級的增大愈加顯著.
圖 6 多協(xié)程下載不同量級文件
圖 7 三種方法下載速度對比
多協(xié)程下載是充分利用阻塞的時間實現(xiàn)多任務的分段式下載,即在執(zhí)行下載任務中,多協(xié)程遇到I/O等待便會掛起當前任務,切換至下一個任務執(zhí)行;當I/O處理完畢后,又切換回該任務繼續(xù)運行. 多協(xié)程在下載過程中充分利用了CPU資源,因此其下載的文件數(shù)量越多,理論下載速度就越快. 但在實際下載過程中,多協(xié)程的下載速度并不會隨下載的文件數(shù)量增多而無限加快,它會受到一些其他因素的制約,如信道帶寬、計算機性能等,導致下載速度到達一定程度后增長緩慢.
圖7是三種方法在小、中、大三類GNSS數(shù)據(jù)下載中的速度對比. 由圖7可知,在下載中小文件時,下載速度最快的是多線程,其次是多協(xié)程,最后是單線程;下載大文件時,多線程和多協(xié)程的下載效果相近,均優(yōu)于單線程下載,其中多協(xié)程的速度略高于多線程.
單線程下載是基于下載步驟有序運行,整個下載過程CPU大部分時間都處于空閑狀態(tài);多線程是通過內核調度完成CPU的支配,讓CPU保持連續(xù)運行的狀態(tài);多協(xié)程是根據(jù)用戶需求讓CPU處理不同的任務片段,使其一直處于工作狀態(tài). 由此可知單線程的CPU利用率明顯低于多線程和多協(xié)程,需花費更多時間完成相同的web數(shù)據(jù)緩存工作,導致單線程下載不同量級文件的速度都慢于多線程和多協(xié)程.
多線程利用的是CPU多個核參與下載,缺點在于線程的切換是基于內核的調度完成,所以其切換的開銷較大. 多協(xié)程在下載過程中利用的是單核CPU,優(yōu)點在于協(xié)程間的切換是寄存器上下文和棧的恢復,不占用內核的開銷,故協(xié)程間的切換速度快于線程.在下載中小文件時,多線程借助調用CPU多核參與下載的特性,其下載速度明顯高于多協(xié)程;隨著下載任務中單個文件量級的增大,CPU多核的性能優(yōu)勢在下載過程中逐漸弱化,出現(xiàn)多線程與多協(xié)程下載速度相互靠攏的現(xiàn)象;在下載大文件時,兩者都因外部條件限制達到最佳速度,而協(xié)程間的切換快于線程,所以多協(xié)程下載速度整體略優(yōu)于多線程.
本文對單線程、多線程和多協(xié)程三種GNSS數(shù)據(jù)下載方法進行了對比分析. 結果表明:下載中小文件時多線程明顯優(yōu)于其他兩種方法;下載大文件時多協(xié)程略優(yōu)于多線程,且兩者的性能都高于單線程;由于GNSS數(shù)據(jù)主要以中小型文件為主,所以GNSS數(shù)據(jù)下載軟件宜采用多線程下載方式.