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