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