余程嶸,王 威,戴 偉,鄧 輝,王 鋒,2,衛(wèi)守林
(1.昆明理工大學(xué)云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南昆明 650500;2.中國科學(xué)院云南天文臺(tái),云南昆明 650011;3.中國科學(xué)院國家天文臺(tái),北京 100101)
我國天文學(xué)家提出的明安圖射電頻譜日像儀(Mingantu Ultrawide Spectral Radio Heliograph,MUSER),可以實(shí)現(xiàn)在厘米-分米波段上同時(shí)對太陽進(jìn)行高空間、高時(shí)間和高頻率分辨率的觀測,能更好地研究太陽的動(dòng)力學(xué)性質(zhì)[1]。明安圖射電頻譜日像儀由低頻陣(MUSER-I)和高頻陣(MUSER-II)兩個(gè)子陣構(gòu)成[2-3]。低頻陣由40面4.5 m口徑的拋物面天線及接收設(shè)備組成,在64個(gè)頻點(diǎn)上成像,工作頻率為0.4 GHz~2 GHz;高頻陣由60面2 m口徑的拋物面天線及接收設(shè)備組成,在528個(gè)頻點(diǎn)上成像,工作頻率為 2 GHz~15 GHz。
目前,明安圖射電頻譜日像儀硬件部分已建設(shè)完成并投入觀測,為滿足觀測數(shù)據(jù)處理的需求,研究人員定制開發(fā)了一套軟件系統(tǒng)[4]。但在實(shí)際部署和使用的過程中面臨著以下問題:(1)由于用戶的軟硬件環(huán)境的差異,如Linux操作系統(tǒng)的不同發(fā)行版本CentOS,Ubuntu等,以及不同硬件的圖形處理器驅(qū)動(dòng)程序、不同版本的CUDA運(yùn)行環(huán)境的搭建等,增加了系統(tǒng)部署安裝的復(fù)雜性;(2)軟件系統(tǒng)需要較多的Python包的支持,Python包之間的依賴關(guān)系較為復(fù)雜,即使有Python包管理工具pip或者其它工具的支持,對于非專業(yè)人員來說,增加了不少的工作量和難度;(3)軟件系統(tǒng)在實(shí)際運(yùn)行中還面臨著軟件版本和支持庫的更新等問題,導(dǎo)致運(yùn)行和維護(hù)成本較高。
針對這些越來越復(fù)雜的天文軟件的部署問題,非計(jì)算機(jī)專業(yè)的科研人員迫切需要有一種更為簡單,更容易部署的技術(shù),幫助他們輕松地部署像明安圖射電頻譜日像儀這樣的軟件系統(tǒng),以便快速便捷地開展科學(xué)研究工作。
目前,基于虛擬化技術(shù)進(jìn)行應(yīng)用的快速部署是比較通用的方法。虛擬化技術(shù)所提供的環(huán)境隔離與資源共享非常適合于復(fù)雜天文軟件的應(yīng)用場景,它通過隔離資源,加以抽象實(shí)現(xiàn)多用戶共享,可實(shí)現(xiàn)資源最大化的利用率[5]。但當(dāng)前主流的虛擬化系統(tǒng),如VMware的ESX/ESXi、微軟的Hyper-V等,均是價(jià)格不菲的商業(yè)產(chǎn)品。開源的OpenStack一直面臨較難部署和管理的問題,其可用性、穩(wěn)定性和易用性均有待考察。
通常情況下,虛擬機(jī)采用的虛擬化技術(shù)都需要提供完整的虛擬硬件環(huán)境,以便讓一個(gè)完整的操作系統(tǒng)安裝在虛擬機(jī)中。但這種方法存在一定缺陷:(1)多個(gè)虛擬機(jī)無法共享底層操作系統(tǒng)的功能;(2)在天文數(shù)據(jù)處理應(yīng)用僅需某些軟件和部分資源來運(yùn)行的情形下,虛擬完整的操作系統(tǒng)會(huì)造成相當(dāng)程度的資源浪費(fèi)。因此,虛擬化技術(shù)雖然可以在一定程度上解決快速的天文軟件部署與應(yīng)用問題,但整體來看,這樣的實(shí)現(xiàn)方法效率較低。
新出現(xiàn)的容器技術(shù)提供了一種新的輕量級虛擬化技術(shù)解決方案,其中Docker是當(dāng)前應(yīng)用最廣的容器技術(shù)之一。Docker[6]是一種基于Linux容器技術(shù)的應(yīng)用容器引擎,由dotCloud開源,讓開發(fā)者將應(yīng)用程序、所需依賴的運(yùn)行庫文件打包并移植到一個(gè)新的容器中,然后發(fā)布到運(yùn)行著Linux操作系統(tǒng)的機(jī)器上使用(目前也支持Windows和Mac操作系統(tǒng))。一方面,Docker擁有優(yōu)秀的隔離性和可移植性,可以在保持環(huán)境一致性的同時(shí),實(shí)現(xiàn)軟件的敏捷部署;另一方面,Docker的易操作性可以降低學(xué)習(xí)曲線以及搭建維護(hù)成本。因此,Docker容器的出現(xiàn)可以很好地滿足對復(fù)雜天文軟件的部署搭建需求。
此外,Docker還可支持集群上的容器部署與運(yùn)行,這就意味著可以通過Docker技術(shù),實(shí)現(xiàn)單機(jī)軟件的集群化部署,實(shí)現(xiàn)并行化的管理和運(yùn)行[7]。本文重點(diǎn)討論明安圖射電頻譜日像儀軟件系統(tǒng)基于單機(jī)模式下的封裝與部署的實(shí)現(xiàn)。
明安圖射電頻譜日像儀數(shù)據(jù)處理系統(tǒng)可用于觀測數(shù)據(jù)的在線實(shí)時(shí)處理和離線事后處理。系統(tǒng)整體功能結(jié)構(gòu)主要包括核心數(shù)據(jù)處理、用戶交互界面以及數(shù)據(jù)庫。
軟件系統(tǒng)有單機(jī)和集群兩種工作方式,分別用于基于單機(jī)的少量數(shù)據(jù)處理和基于集群的實(shí)時(shí)大批量數(shù)據(jù)處理。其中,集群方式采用了OpenCluster框架[8],該框架用于對集群內(nèi)的節(jié)點(diǎn)進(jìn)行分布式任務(wù)調(diào)度。軟件系統(tǒng)的數(shù)據(jù)處理程序采用Python語言編寫,支持中央處理器和圖形處理器兩種計(jì)算模式。
Docker作為一種特殊的容器化引擎,要實(shí)現(xiàn)軟件環(huán)境的封裝,只需在前期工作中按需求構(gòu)建相應(yīng)的軟件鏡像即可。目前支持兩種方式構(gòu)建鏡像文件:
(1)按需求配置Dockerfile文件,根據(jù)此文件構(gòu)建新的鏡像文件;
(2)基于基礎(chǔ)鏡像啟動(dòng)容器,并在該容器內(nèi)完成軟件應(yīng)用環(huán)境的部署,然后通過Docker命令將部署的容器提交保存為新的鏡像文件。
通過兩種方法的構(gòu)建,可將完成的鏡像文件上傳至鏡像倉庫供使用者下載。
軟件的部署通過把鏡像啟動(dòng)為本地容器實(shí)現(xiàn),軟件系統(tǒng)可基于中央處理器或圖形處理器不同計(jì)算設(shè)備環(huán)境下運(yùn)行,下面分別說明中央處理器和圖形處理器兩種模式下的啟動(dòng)方法。
2.2.1 中央處理器模式下啟動(dòng)鏡像
在中央處理器模式下的鏡像已被封裝為完整的環(huán)境,可用如下命令直接啟動(dòng)鏡像:其中,docker run表示啟動(dòng)鏡像;museros:1.0是鏡像名稱;-ti表示啟動(dòng)以交互的方式進(jìn)入某個(gè)容器;--rm表示退出時(shí)自動(dòng)刪除容器;/bin/bash表示從Shell終端啟動(dòng)。
2.2.2 圖形處理器模式下啟動(dòng)鏡像
與中央處理器模式不同,對于已經(jīng)集成了圖形處理器運(yùn)行環(huán)境的鏡像,要使Docker容器在圖形處理器環(huán)境下運(yùn)行,可使用--device命令將主機(jī)的圖形處理器設(shè)備掛載到容器中,并啟動(dòng)容器,具體指令為
通過Docker技術(shù)對軟件系統(tǒng)封裝部署的總體框架如圖1。
圖1 總體框架Fig.1 The Overall Framework
通過上述步驟,提出了對明安圖射電頻譜日像儀軟件系統(tǒng)在Docker容器上封裝與部署的方法設(shè)計(jì)。本節(jié)討論方法的敏捷性和可用性,然后設(shè)計(jì)實(shí)驗(yàn),測試并比較軟件系統(tǒng)分別在基于不同平臺(tái)上的性能表現(xiàn)。
面對天文數(shù)據(jù)處理軟件不斷的更新和升級,當(dāng)新的需求出現(xiàn)而進(jìn)行軟件升級時(shí),其相應(yīng)的依賴環(huán)境也要進(jìn)行升級。利用Docker,可直接在原始版本的鏡像啟動(dòng)的容器中進(jìn)行軟件更新和環(huán)境升級操作,再將測試好的容器提交為新版本鏡像發(fā)布,從而實(shí)現(xiàn)對軟件版本的敏捷化管理。
在主機(jī)負(fù)載不高的情況下,鏡像文件可以在數(shù)秒內(nèi)完成啟動(dòng)。主機(jī)可以通過容器默認(rèn)開放TCP的22號端口與容器進(jìn)行通訊,用戶也可根據(jù)需求指定為其他的端口。Docker啟動(dòng)時(shí)在主機(jī)默認(rèn)生成docker0網(wǎng)卡,所有的容器經(jīng)docker0網(wǎng)卡發(fā)出數(shù)據(jù),保證其網(wǎng)絡(luò)可用性。Docker啟動(dòng)狀態(tài)、容器狀態(tài)以及docker0網(wǎng)卡信息如圖2。
圖2 Docker容器及網(wǎng)卡的狀態(tài)Fig.2 The status of Docker container and network card
在不同平臺(tái)下對明安圖射電頻譜日像儀軟件系統(tǒng)分別進(jìn)行性能測試,并進(jìn)行比較。軟件系統(tǒng)可對觀測到的可見度數(shù)據(jù)進(jìn)行預(yù)處理,導(dǎo)出UVFITS數(shù)據(jù)文件,并通過潔化算法進(jìn)行潔化,生成臟圖和潔圖,其中潔化處理運(yùn)算量較大,對系統(tǒng)性能的要求較高,因此本實(shí)驗(yàn)選擇比較潔化處理的時(shí)間。考慮到Docker本身是一種虛擬化技術(shù),以及公有云在虛擬機(jī)中使用Docker的用法現(xiàn)狀,因此除物理主機(jī)外,我們將加入虛擬機(jī)和基于虛擬機(jī)上的Docker容器作為實(shí)驗(yàn)平臺(tái),分別與物理主機(jī)上的Docker容器進(jìn)行性能對比。
基于以上討論,實(shí)驗(yàn)中把軟件系統(tǒng)分別搭建于物理機(jī)、Docker容器、虛擬機(jī)以及虛擬機(jī)上的Docker 4種平臺(tái)上,然后分別進(jìn)行潔化處理并記錄各自執(zhí)行時(shí)間,最后進(jìn)行比較。目前潔化算法已經(jīng)分別在CUDA和OpenCL環(huán)境下實(shí)現(xiàn)[9-10],實(shí)驗(yàn)在兩種計(jì)算模式下分別進(jìn)行。
實(shí)驗(yàn)中使用KVM虛擬機(jī),它是基于Linux內(nèi)核(Kernel-based)的虛擬機(jī)。KVM支持通過透傳(passthrough)方式在虛擬機(jī)內(nèi)使用物理圖形處理器設(shè)備,且相較其他虛擬機(jī),KVM通過透傳方式使用圖形處理器設(shè)備的性能表現(xiàn)更好[11]。
a)實(shí)驗(yàn)環(huán)境:
實(shí)驗(yàn)環(huán)境如表1。實(shí)驗(yàn)采用日像儀在2015年11月1日12時(shí)8分49秒354毫秒的觀測數(shù)據(jù),原始數(shù)據(jù)經(jīng)過處理保存為FITS標(biāo)準(zhǔn)天文格式文件,文件名為120849_354161240.uvfits。
b)實(shí)驗(yàn)方案:
(1)首先實(shí)驗(yàn)按軟件系統(tǒng)的計(jì)算模式分為兩組,第1組為基于OpenCL+CPU的潔化處理,第2組為基于CUDA+GPU的潔化處理;
(2)在每個(gè)計(jì)算模式組中再按主機(jī)平臺(tái)分為兩個(gè)組,分別為物理主機(jī)組和虛擬主機(jī)組。物理主機(jī)組使用物理主機(jī)和Docker容器作為實(shí)驗(yàn)平臺(tái),虛擬主機(jī)組使用虛擬主機(jī)和虛擬機(jī)上的Docker容器作為實(shí)驗(yàn)平臺(tái);
(3)在兩個(gè)平臺(tái)組中分別進(jìn)行基于潔化算法生成512×512像素和1 024×1 024像素的潔圖的實(shí)驗(yàn),并分別記錄執(zhí)行10次的時(shí)間;
(4)相同計(jì)算模式下,首先比較各平臺(tái)組內(nèi)基于Docker容器和裸機(jī)下生成相同像素潔圖的平均時(shí)間,然后比較物理主機(jī)組和虛擬主機(jī)組生成相同像素潔圖的平均時(shí)間。
表1 實(shí)驗(yàn)環(huán)境Table 1 The lab environment
實(shí)驗(yàn)結(jié)果如圖3和圖4。
圖3 OpenCL+CPU下不同主機(jī)的潔化時(shí)間對比Fig.3 Time performance comparison between different hosts based on OpenCL+CPU
圖4 基于CUDA+GPU在不同主機(jī)上潔化處理的時(shí)間Fig.4 Time performance comparison between different hosts based on CUDA+GPU
以上實(shí)驗(yàn)結(jié)果可歸納為表2。
表2 實(shí)驗(yàn)結(jié)果表Table 2 Table of experiment results
(1)如表2,在基于OpenCL+CPU計(jì)算模式中,物理主機(jī)組中物理主機(jī)和Docker生成兩種像素潔圖的平均時(shí)間十分接近,各約為0.29 s和0.72 s;虛擬主機(jī)組的KVM虛擬機(jī)以及KVM+Docker生成兩種像素潔圖的平均時(shí)間也十分接近,各約為2.16 s和3.20 s。相比兩個(gè)平臺(tái)組在相同像素下的平均時(shí)間,虛擬主機(jī)組皆高于物理主機(jī)組2~3 s左右;
(2)在基于CUDA+GPU的計(jì)算模式中,物理主機(jī)組的物理主機(jī)和Docker生成兩種像素潔圖的平均時(shí)間十分接近,各約為0.18 s和0.37 s,虛擬主機(jī)組的KVM虛擬機(jī)以及KVM+Docker的平均時(shí)間也十分接近,各約為1.40 s和1.66 s。相比兩組相同像素下的平均時(shí)間,虛擬主機(jī)組皆高于物理主機(jī)組1~2 s左右。
綜上可知,無論哪種計(jì)算模式,虛擬主機(jī)組的處理時(shí)間均高于物理主機(jī)的Docker容器約1~2 s,可見Docker容器相較于虛擬機(jī)有較明顯的性能優(yōu)勢;而物理主機(jī)上的Docker容器與物理主機(jī)之間處理時(shí)間相差幾乎在毫秒級別,虛擬主機(jī)上的Docker容器與虛擬主機(jī)之間處理時(shí)間也十分接近,可見Docker容器可獲得與當(dāng)前主機(jī)幾乎一致的處理性能。相較于虛擬主機(jī)而言,Docker容器可在物理主機(jī)上取得更好的性能,且與物理主機(jī)幾乎一致。
明安圖頻譜射電日像儀已經(jīng)使用國內(nèi)自主研發(fā)的數(shù)據(jù)處理系統(tǒng)進(jìn)行觀測數(shù)據(jù)的處理。數(shù)據(jù)處理系統(tǒng)作為一個(gè)開源的天文數(shù)據(jù)處理軟件,支持在不同的環(huán)境下安裝部署,支持在高性能服務(wù)器集群以及單機(jī)環(huán)境下離線的數(shù)據(jù)處理,其功能正在不斷地升級和完善。本文針對科研工作人員在安裝和使用數(shù)據(jù)處理系統(tǒng)過程中面臨的實(shí)際困難,以Docker容器技術(shù)為基礎(chǔ),實(shí)現(xiàn)了對系統(tǒng)的敏捷化構(gòu)建和部署,并進(jìn)行了相應(yīng)的功能和性能測試。利用容器封裝MUSER系統(tǒng),可以提高開發(fā)和部署環(huán)境可重用性、可維護(hù)性以及快速持續(xù)集成的能力,改進(jìn)軟件開發(fā)者和使用者之間的協(xié)作,加快軟件的調(diào)試升級過程。
在中央處理器和圖形處理器計(jì)算模式下分別在容器、物理主機(jī)、虛擬機(jī)和虛擬機(jī)的容器上進(jìn)行潔化的性能測試表明,運(yùn)行在容器內(nèi)的系統(tǒng)與在硬件虛擬機(jī)內(nèi)相比具有較低的開銷和更好的性能優(yōu)勢,和物理主機(jī)內(nèi)運(yùn)行的性能非常接近。使用容器技術(shù)封裝軟件系統(tǒng),有效減輕了科研工作者的工作負(fù)擔(dān),保障了軟件系統(tǒng)的開發(fā)和推廣使用??梢灶A(yù)見,基于Docker容器技術(shù)進(jìn)行封裝與部署將是天文軟件發(fā)展的必然趨勢。
致謝:感謝國家天文臺(tái)-阿里云天文大數(shù)據(jù)聯(lián)合研究中心對本文工作的支持。