徐海坤,謝一曼,吳 青,陳 軍,鄒 有
(中南大學(xué)信息與網(wǎng)絡(luò)中心,湖南 長沙 410083)
高性能計算是現(xiàn)代科學(xué)研究最重要的技術(shù)手段之一,國內(nèi)許多高校和研究機(jī)構(gòu)都建立了超算系統(tǒng),以滿足學(xué)科建設(shè)和科研工作中日益增長的計算需求[1 - 4]。目前,絕大部分超算系統(tǒng)都是基于Linux操作系統(tǒng)搭建的,以CentOS、Red Hat和Ubuntu為主。近年來,國內(nèi)高性能計算蓬勃發(fā)展,集群和用戶規(guī)模不斷擴(kuò)大,用戶需求也逐漸多樣化,部分用戶產(chǎn)生了在超算系統(tǒng)中運行Windows應(yīng)用程序的需求。這種需求在當(dāng)前的超算領(lǐng)域中雖然不是主流,但卻是每個超算系統(tǒng)都需要面對的問題。一方面由于Linux系統(tǒng)和Windows系統(tǒng)互不兼容,大量Windows應(yīng)用程序沒有基于Linux系統(tǒng)的版本;另一方面由于Windows系統(tǒng)具有良好的圖形界面,部分用戶習(xí)慣使用Windows操作系統(tǒng)。在高校環(huán)境中,缺乏Linux系統(tǒng)使用經(jīng)驗的用戶比例大,這一需求顯得尤為突出。部分建設(shè)了校級超算系統(tǒng)的高校對科研人員自行采購的計算硬件有嚴(yán)格控制,造成了科研人員Windows系統(tǒng)使用需求與校級超算系統(tǒng)環(huán)境之間的矛盾。此外,隨著云計算的普及,各大商業(yè)云服務(wù)商提供的彈性伸縮計算服務(wù)ECS(Elastic Compute Service)為用戶使用Windows操作系統(tǒng)提供了便捷的途徑,這一趨勢也造成了Windows系統(tǒng)的超算用戶流失。
目前,計算資源比較充裕的商業(yè)超算中心針對Windows應(yīng)用程序運行需求,大多采用“裸金屬”計算資源租用,或搭建專門的云平臺提供Windows實例來解決。這2種方法的優(yōu)點是:計算環(huán)境搭建較簡單,用戶使用便捷;缺點是:需要劃分專門的計算資源用于提供Windows服務(wù),資源利用不夠靈活,需要額外的運維管理成本和獨立的計費系統(tǒng)。此外,對于同時需要Linux系統(tǒng)和Windows系統(tǒng)的用戶,實現(xiàn)2種系統(tǒng)的文件共享配置很復(fù)雜,用戶對Windows實例的管理員權(quán)限也會帶來一定的安全隱患。為解決這些問題,本文選擇基于Linux操作系統(tǒng)運行Windows應(yīng)用的思路,探尋對用戶和運維人員都更便捷的解決方案。
目前在超算Linux系統(tǒng)上運行Windows應(yīng)用程序的主流技術(shù)方案有2種[5]:一種是基于兼容層的API轉(zhuǎn)換技術(shù);另一種是基于軟件層的虛擬機(jī)VM(Virtual Machine)技術(shù)。兩者的本質(zhì)區(qū)別是兼容層模擬的是Windows應(yīng)用程序,而虛擬機(jī)技術(shù)模擬的是整個Windows操作系統(tǒng)。
兼容層API轉(zhuǎn)換技術(shù)是將Windows API調(diào)用翻譯成動態(tài)的POSIX(Portable Operating System Interface)調(diào)用,以運行Windows應(yīng)用程序。最早使用該方法的軟件是Wine。Wine從體系結(jié)構(gòu)上體現(xiàn)為一個Wine Server進(jìn)程和一組動態(tài)鏈接庫的集合,其圖形界面通過X11轉(zhuǎn)發(fā)。實際運行時系統(tǒng)至少會啟動3個進(jìn)程以運行Windows應(yīng)用程序:應(yīng)用進(jìn)程本身、Wine服務(wù)進(jìn)程和X11服務(wù)進(jìn)程。Wine的體系結(jié)構(gòu)如圖1[6]所示。
Figure 1 Architecture of Wine圖1 Wine體系結(jié)構(gòu)
Wine不像虛擬機(jī)或者模擬器一樣模仿內(nèi)部的Windows邏輯,而是運用API轉(zhuǎn)換技術(shù)開發(fā)出Linux到Windows相對應(yīng)的函數(shù)來調(diào)用動態(tài)鏈接庫(DLL),以降低性能損耗和資源占用。但是,Windows DLL庫都是封閉源碼,Wine開發(fā)人員需要耗費大量的時間和精力從底層開始重新設(shè)計、開發(fā)和測試,因此目前版本的Wine功能還不夠完善,主要表現(xiàn)為支持的應(yīng)用不多,已有的應(yīng)用運行不夠穩(wěn)定等。具有類似功能的軟件還有CrossOver。CrossOver是基于Wine開發(fā)的商業(yè)軟件,為主流的Windows應(yīng)用軟件提供商業(yè)支持,相較于Wine更穩(wěn)定。
虛擬機(jī)VM是一種特殊的軟件,可以在計算機(jī)平臺和終端用戶之間創(chuàng)建一種環(huán)境,終端用戶基于該軟件所創(chuàng)建的環(huán)境來操作其他軟件。
從虛擬化的實現(xiàn)方式來看,常見的虛擬化架構(gòu)有2種:裸機(jī)型和托管型[7,8]。裸機(jī)型是指虛擬機(jī)監(jiān)控程序直接運行在主機(jī)的物理硬件上,不必預(yù)先加載底層操作系統(tǒng),如圖2a[7,8]所示,直接訪問底層硬件而無需其他軟件(如操作系統(tǒng)和設(shè)備驅(qū)動程序),代表性軟件有VMware ESXI。托管型是指虛擬機(jī)監(jiān)控程序安裝在現(xiàn)有操作系統(tǒng)之上,依賴于主機(jī)預(yù)先安裝的操作系統(tǒng)來管理對CPU、內(nèi)存、存儲和網(wǎng)絡(luò)資源的調(diào)用,如圖2b[7,8]所示,代表性軟件有Oracle VM VirtualBox、VMware Workstation和KVM(Kernel-based Virtual Machine)。
Figure 2 Types of virtualization圖2 虛擬化實現(xiàn)方式
Linux系統(tǒng)使用虛擬機(jī)能完整地模擬Windows操作系統(tǒng),各種Windows應(yīng)用軟件基本上都能在虛擬上安裝并穩(wěn)定運行。雖然使用虛擬機(jī)技術(shù)在資源優(yōu)化和性能上有較大的缺陷,但是對于需要使用不同操作系統(tǒng)或是有特別需求的應(yīng)用軟件,是一個不錯的選擇。它可以有效地降低超算集群的運維成本,提升管理效率。
表1對使用Wine和虛擬機(jī)2種解決方案的優(yōu)缺點進(jìn)行了對比。本文的解決方案將基于Wine和托管型虛擬化開展。
Table 1 Comparison of Wine and virtual machine
常規(guī)的超算系統(tǒng)通常包括硬件系統(tǒng)和軟件系統(tǒng)2部分。硬件系統(tǒng)由計算節(jié)點、高速計算網(wǎng)絡(luò)、存儲和登錄管理節(jié)點組成;軟件系統(tǒng)由底層操作系統(tǒng)、作業(yè)調(diào)度系統(tǒng)、文件系統(tǒng)和計算環(huán)境(編譯環(huán)境、應(yīng)用軟件等)組成。用戶使用超算系統(tǒng)開展計算時,首先需要使用終端登錄工具訪問登錄節(jié)點,通過作業(yè)調(diào)度系統(tǒng)申請計算資源,然后使用系統(tǒng)分配的計算資源開展計算。登錄節(jié)點和計算節(jié)點通過共享文件系統(tǒng)保持?jǐn)?shù)據(jù)一致性。
使用超算系統(tǒng)開展計算相較于直接使用Linux主機(jī)計算有2個主要差別:一是需要使用遠(yuǎn)程登錄終端登錄;二是需要通過作業(yè)調(diào)度系統(tǒng)申請資源。因此,需要進(jìn)行一些必要的配置,使之滿足Windows應(yīng)用程序的運行條件。
用戶在超算系統(tǒng)中使用Windows應(yīng)用程序的需求中,絕大部分都需要圖形界面,因此需要借助X11轉(zhuǎn)發(fā)技術(shù)在用戶本地啟動遠(yuǎn)程超算系統(tǒng)上的圖形界面[9]。首先,用戶需要選用支持X11轉(zhuǎn)發(fā)的客戶端工具,如Xming、XShell和MobaXterm等。其次,超算系統(tǒng)的登錄和計算節(jié)點需要啟用X11轉(zhuǎn)發(fā)配置。最后,使用調(diào)度系統(tǒng)申請計算資源,并通過X11參數(shù)使得計算節(jié)點上的圖形界面可以轉(zhuǎn)發(fā)到用戶終端。具體步驟如下:
第1步:超算服務(wù)器修改文件/etc/ssh/sshd_config啟用X11轉(zhuǎn)發(fā)。配置“X11Forwarding yes”。
第2步:使用調(diào)度系統(tǒng)申請計算資源,如node01,則可以通過“ssh -X node01”訪問計算資源來轉(zhuǎn)發(fā)計算節(jié)點的圖形界面。如果作業(yè)調(diào)度系統(tǒng)支持圖形轉(zhuǎn)發(fā),則可直接申請計算資源。以SLURM作業(yè)調(diào)度系統(tǒng)為例,直接運行“srun -n 1 --exclusive --x11 commnad”即可完成資源申請和圖形程序啟動。
基于Wine的Windows應(yīng)用程序運行環(huán)境配置中,需要安裝與操作系統(tǒng)版本兼容的Wine軟件,并啟動對應(yīng)的Windows應(yīng)用程序,對于需要安裝的Windows應(yīng)用程序,也可以基于Wine啟動安裝過程,Wine將模擬Windows目錄結(jié)構(gòu)部署應(yīng)用軟件。下面是在SLURM調(diào)度環(huán)境下,使用Wine運行Windows版本notepad程序的示例:
srun -n 1 --exclusive --x11 wine notepad.exe
參照該示例,可以運行其他Windows應(yīng)用程序。
基于托管型虛擬機(jī)運行Windows應(yīng)用程序的方案需要在計算節(jié)點安裝虛擬機(jī)環(huán)境,并為用戶準(zhǔn)備Windows操作系統(tǒng)鏡像和訪問Windows計算環(huán)境的VNC(Virtual Network Console)客戶端。由于虛擬機(jī)中運行的是獨立的操作系統(tǒng),默認(rèn)情況下,用戶無法通過虛擬機(jī)訪問其在超算平臺的數(shù)據(jù)文件。為解決這一問題,本文在Windows操作系統(tǒng)鏡像中預(yù)置了SSH(Secure SHell)文件系統(tǒng)SSHFS(Secure SHell File System)[10],用于通過SSH連接來掛載用戶在宿主機(jī)上的文件目錄。這種方式配置簡潔,且安全性高。用戶通過NAT(Network Address Translation)模式訪問宿主機(jī)即可掛載數(shù)據(jù)目錄,避免了用戶濫用虛擬機(jī)的管理員權(quán)限配置虛擬網(wǎng)絡(luò)帶來的安全風(fēng)險。本文在SLURM作業(yè)調(diào)度器中,采用libvirt開源虛擬化套件運行Windows虛擬機(jī),詳細(xì)步驟如下所示:
第1步確認(rèn)計算節(jié)點啟用的支持虛擬化的設(shè)置,下述命令有輸出即代表支持虛擬化:
grep -E "(vmx|svm)" /proc/cpuinfo
第2步在計算節(jié)點安裝libvirt相關(guān)虛擬化環(huán)境,以Centos 7操作系統(tǒng)為例,執(zhí)行:
yum install -y libvirt virt-install
第3步準(zhǔn)備Windows操作系統(tǒng)鏡像,從微軟官方獲取Windows 10操作系統(tǒng)的VMware鏡像,然后轉(zhuǎn)換為KVM鏡像格式。Windows 10官方VMware鏡像下載地址為:https://az792536.vo.msecnd.net/vms/VMBuild_20190311/VMware/MSEdge/MSEdge.Win10.VMware.zip。
通過以下qemu-img工具完成鏡像格式轉(zhuǎn)換:
qemu-img convert -f vmdk -O qcow2 MSEdge-Win10-VMware-disk1.vmdk win20g.qcow2
第4步啟動鏡像,安裝SSHFS軟件和WinFSP軟件用于掛載用戶位于宿主機(jī)的文件系統(tǒng)。以下批處理文件可供自動掛載:
@echo off
echo 請輸入平臺用戶名和密碼加載數(shù)據(jù)到X盤
echo 注意:關(guān)閉此窗口X盤將斷開!
del C:Userswinhpc。sshknown_hosts 1>nul 2>nul
set /p user=username:
start /B cmd /C " set "PATH=C:Program FilesSSHFS-Winin;%PATH%" && "C:Program FilesSSHFS-Wininsshfs.exe"-o idmap=user-o StrictHostKeyChecking=no %user%@10.0.2.2:X:"
運行上述批處理文件,并輸入正確的用戶名和密碼后,用戶可以在系統(tǒng)中通過盤符X訪問自己在宿主機(jī)上的文件。
第5步為用戶準(zhǔn)備VNC桌面查看工具,在登錄節(jié)點上安裝vncviewer:yum install -y tigervnc
第6步為用戶準(zhǔn)備作業(yè)提交模板,以SLURM作業(yè)調(diào)度系統(tǒng)為例,用戶提交作業(yè)并成功分配計算資源后,即可在作業(yè)輸出文件中獲取訪問Windows實例的命令和口令。SLURM作業(yè)模板如下所示:
#!/bin/bash
#SBATCH --job-name=win
#SBATCH --exclusive
#SBATCH --nodes=1
#SBATCH -p winPartition
if [ !-f "$HOME/win20g.qcow2" ];then
echo "Preparing image file..."
cp/public/sourcecode/vm/win20g.qcow2 $HOME/ win20g.qcow2
echo "Image file is ready!"
fi;
PASSWD=$RANDOM
echo
echo "Please use the following command and passwd to visit your windows instance."
echo "vncviewer $HOSTNAME:5$UID"
echo "Password:$PASSWD"
echo
echo
ssh $HOSTNAME virsh undefine $USER-winvm >&/dev/null
ssh $HOSTNAME virt-install--name $USER-winvm --ram 168000 --vcpus=sockets=2,cores=24,threads=1 --import --disk path=$HOME/win20g.qcow2 --graphics vnc,password=$PASSWD,listen=0.0.0.0,port=5$UID --os-variant win10 --network default --check path_in_use=off
為檢驗所述2種解決方案的效果,本文在中南大學(xué)校級超算平臺上進(jìn)行了實際部署與測試。與實驗相關(guān)的主要軟硬件配置如下所示:操作系統(tǒng):CentOS Linux release 7.5.1804;作業(yè)調(diào)度系統(tǒng):SLURM 20.02.3;并行文件系統(tǒng):Lustre 2.12.3;管理節(jié)點和登錄節(jié)點硬件:2×Intel Xeon Gold 6248R CPU,192 GB內(nèi)存,240 GB SSD硬盤;Wine版本:6.3;Libvirt版本:3.9.0。
根據(jù)上述步驟描述,2種方案中用戶都可以成功啟用并運行Windows應(yīng)用程序,效果如圖3和圖4所示。
Figure 3 Starting the Windows application based on Wine圖3 基于Wine啟動Windows應(yīng)用程序
Figure 4 Starting the Windows VM based on the virtualization solution圖4 基于虛擬化方案啟動Windows虛擬機(jī)
為檢驗上述2種運行Windows應(yīng)用程序方案的計算性能,本文選擇了基于OpenMP的多線程矩陣乘法算例進(jìn)行測試。采用相同版本的編譯器和參數(shù)將代碼分別編譯為Linux版本和Windows版本,編譯軟件均采用GCC 8.1.0,測試矩陣規(guī)模3600×3600,填充隨機(jī)值。其中,Windows版本分別在Wine環(huán)境和KVM虛擬機(jī)環(huán)境下運行。測試結(jié)果如表2所示。
Table 2 Efficiency of OpenMP multi-threaded matrix multiplication running in different environments
從表2可以看出,應(yīng)用程序基于Wine運行效率較高,與純Linux環(huán)境下幾乎沒有差別;而基于KVM虛擬機(jī)的運行性能損失較大,效率約為純Linux環(huán)境和Wine的1/4。因此,對于運行環(huán)境復(fù)雜度不高的Windows應(yīng)用,可以優(yōu)先采用基于Wine的方案;對于復(fù)雜的Windows應(yīng)用,在綜合考量運行穩(wěn)定性和效率的情況下,可以采用基于虛擬機(jī)的方案。
本文就Linux超算系統(tǒng)中構(gòu)建Windows應(yīng)用程序運行環(huán)境的方案進(jìn)行了探究,針對主流超算系統(tǒng)中無法便捷管理和運行Windows應(yīng)用程序這一問題,探索了基于Wine和虛擬機(jī)技術(shù)2種解決方案,并對比了各自方案的優(yōu)缺點。這2種解決方案相較于獨立部署Windows計算節(jié)點或提供ECS云服務(wù),均具有部署簡單、管理方便和應(yīng)用安全便捷等特點,同時兼容現(xiàn)有作業(yè)調(diào)度系統(tǒng)和計費系統(tǒng)。2種解決方案也在中南大學(xué)校級超算平臺上得到了應(yīng)用與實踐,可供其他超算中心參考。在未來的工作中,如何提高基于Wine方案的穩(wěn)定性以及降低基于虛擬機(jī)方案的性能損失,均有待進(jìn)一步研究。