張寒冰 毛 明 史國振 李建鵬
1(西安電子科技大學(xué)通信工程學(xué)院 陜西 西安 710071)2(北京電子科技學(xué)院 北京 100070)
云計算是對并行計算、分布式計算、網(wǎng)格計算等高性能計算理論的延續(xù)與發(fā)展,它是一種以按需分配為業(yè)務(wù)模式,具備動態(tài)擴展等特點的新型計算模式[1],通過將資源抽象成一個虛擬化、動態(tài)化的資源池,來為用戶提供高性能、低成本的服務(wù),它提供了一種可以靈活配置計算資源的彈性服務(wù),可以根據(jù)需求對資源進行動態(tài)調(diào)整[2]。
云計算作為信息技術(shù)領(lǐng)域當(dāng)中的一次重大變革,正在潛移默化地影響著我們的生活。由于其高可靠性、高擴展性、高靈活性等諸多優(yōu)勢,越來越多的傳統(tǒng)應(yīng)用開始向云端遷移[3],越來越多的企業(yè)開始構(gòu)建自己的云計算平臺。傳統(tǒng)的密碼服務(wù)主要是通過部署物理密碼機來實現(xiàn),這只能適用于具有長期穩(wěn)定需求的系統(tǒng),而在新環(huán)境下,面對海量數(shù)據(jù)和大規(guī)模的業(yè)務(wù),需求可能不斷變化,如果在線服務(wù)過程中,業(yè)務(wù)需求發(fā)生改變但當(dāng)前部署的設(shè)備無法滿足相應(yīng)需求時,就需要先中止當(dāng)前所有的密碼服務(wù),然后更換相應(yīng)的物理設(shè)備重新部署,這樣勢必會降低整個系統(tǒng)的服務(wù)效率,所以這種相對固定的密碼設(shè)備部署方法已經(jīng)無法滿足動態(tài)多樣的需求,需要一種虛擬化的方法來實現(xiàn)密碼計算資源的動態(tài)配置,減少資源浪費,提升服務(wù)效率。
本文以QEMU-KVM技術(shù)為核心,通過添加資源監(jiān)管模塊,構(gòu)建虛擬密碼設(shè)備(Virtual Cryptography Machine,VCM),采用Virtio技術(shù)實現(xiàn)VCM與物理機的高效數(shù)據(jù)傳輸,通過Libvirt庫提供的命令行與API對VCM進行資源管理,以此實現(xiàn)密碼計算資源的虛擬化。
針對密碼計算資源虛擬化的問題,不少學(xué)者進行了分析與研究,已經(jīng)提出了若干解決方案。
文獻[4]提出了一種由密碼資源調(diào)度系統(tǒng)、密碼服務(wù)資源池、密碼服務(wù)代理三部分組成的密碼資源池架構(gòu)。其中服務(wù)資源池由虛擬密碼機與統(tǒng)一管理接口組成,利用硬件虛擬化技術(shù)將物理密碼設(shè)備虛擬成相互獨立的虛擬密碼機,虛擬密碼機內(nèi)部配置密鑰管理、密碼服務(wù)等功能接口,用來抽象底層資源。但是該文獻只提出了一個框架,沒有給出明確的設(shè)計方法,不能很好地應(yīng)用于實際工程。
文獻[5]提出了一種基于宿主機的密碼機及密碼運算實現(xiàn)方法,主要方法是在部署有物理密碼模塊的宿主機上配置多個虛擬機,各虛擬機的虛擬IP不同,用于接收不同的密碼運算請求,虛擬機通過添加虛擬密碼模塊與密碼服務(wù)模塊來處理運算結(jié)果。但是該方法沒有提供外部身份驗證的功能,僅利用不同的虛擬網(wǎng)卡作為區(qū)分不同虛擬密碼設(shè)備的手段,容易造成安全隱患,攻擊者只要獲得虛擬機的IP,就可能導(dǎo)致DDoS攻擊。
文獻[6]提出了一種在虛擬化環(huán)境中提供密碼服務(wù)的方法,主要方法是在宿主機上配置虛擬密碼機來提供虛擬密碼服務(wù),通過虛擬機自省方式檢查密碼服務(wù)請求的有效性,虛擬機不能訪問計算過程中的密鑰及敏感狀態(tài),密鑰以文件形式存儲在宿主機磁盤中。該方法通過虛擬機中的模擬接口來調(diào)用虛擬密碼設(shè)備,但是缺少對底層計算資源的統(tǒng)一描述,因而不適用于資源異構(gòu)的環(huán)境。
針對傳統(tǒng)云計算領(lǐng)域,已經(jīng)存在幾種主流的虛擬化解決方案。
Vmware采用全虛擬化技術(shù),在虛擬機與硬件之間添加了一個軟件層Hypervisor作為虛擬機監(jiān)控器(Virtual Machine Monitor,VMM)[7],以純軟件的方式模擬了一套硬件環(huán)境,需要占用一定資源。Xen是由劍橋大學(xué)計算機系在32位的X86上開發(fā)出的一個開源虛擬機監(jiān)視器項目,采用半虛擬化技術(shù),VMM作為客戶操作系統(tǒng)與硬件資源之間的訪問接口直接運行在硬件上[8]。它創(chuàng)建了一個能夠直接訪問硬件資源的特權(quán)操作系統(tǒng)“Domain 0”和若干普通客戶操作系統(tǒng),由于該技術(shù)需要對客戶操作系統(tǒng)進行修改,所以無法應(yīng)用于閉源操作系統(tǒng)。KVM是以色列創(chuàng)業(yè)公司Qumranet開發(fā)的一款基于Linux內(nèi)核的全虛擬化解決方案,內(nèi)核通過加載模塊創(chuàng)建VMM,無需對客戶操作系統(tǒng)進行修改[9],虛擬機與其使用的虛擬CPU都以常規(guī)Linux進程存在,可由內(nèi)核的調(diào)度程序進行管理,減少了額外的開發(fā)工作。運行于內(nèi)核空間的KVM完成硬件虛擬化和打開虛擬化模式,本身并不進行任何模擬,運行于用戶空間的QEMU通過KVM提供的接口完成整套虛擬化。
KVM在Linux2.6.20之后與內(nèi)核集成在一起,隨Linux內(nèi)核同步更新[10]。QEMU于2018年12月正式發(fā)布3.1.0版本,對ARM、MIPS等架構(gòu)進行了更新,增加了對KVM內(nèi)存巨頁技術(shù)(huge page)等功能的支持[11]。近幾年來,不少學(xué)者針對QEMU-KVM技術(shù)進行了研究與應(yīng)用。文獻[12]提出了一種在ARM64位服務(wù)器系統(tǒng)中實現(xiàn)QEMU-KVM虛擬化的方法。文獻[13]在QEMU-KVM框架中添加了一個虛擬機管理緩存HyperCache,用于提高QEMU的I/O虛擬化能力。文獻[14]基于QEMU提出了一種創(chuàng)建用戶自定義虛擬硬件設(shè)備的步驟和方法,并為這些新設(shè)備開發(fā)了對應(yīng)的驅(qū)動程序。文獻[15]基于QEMU-KVM技術(shù)設(shè)計了一種GPU的全虛擬化解決方案G-KVM。文獻[16]基于QEMU技術(shù)提出了一種用于檢測Linux應(yīng)用異常通信行為的方法。上述研究成果也為本文利用該技術(shù)實現(xiàn)密碼計算資源虛擬化方法提供了思路。
本文采用QEMU-KVM技術(shù)對密碼計算資源進行虛擬化,通過在宿主機中部署資源監(jiān)管模塊對虛擬密碼設(shè)備進行管理,通過添加身份驗證模塊對作業(yè)包的合法性進行驗證,通過構(gòu)建多級隊列支持任務(wù)的優(yōu)先級調(diào)度,通過對資源進行統(tǒng)一化描述實現(xiàn)計算節(jié)點的動態(tài)配置。
密碼計算資源的虛擬化框架如圖1所示,主要分為五個部分,即身份驗證模塊、VCM、作業(yè)隊列、計算模塊及計算資源監(jiān)管模塊。
圖1 資源虛擬化框架
身份驗證模塊,主要負責(zé)對外來作業(yè)包進行身份驗證并將合法作業(yè)包發(fā)往相應(yīng)的VCM進行下一階段的數(shù)據(jù)處理。該模塊中記錄了合法用戶與其分配的VCM之間的映射關(guān)系,由計算資源監(jiān)管模塊對其進行維護,該模塊根據(jù)此映射關(guān)系將作業(yè)包分發(fā)給相應(yīng)的VCM進行處理。
VCM,虛擬密碼設(shè)備,每一個用戶對應(yīng)一個VCM,VCM之間相互獨立,在VCM內(nèi)部可用于保存用戶在使用密碼服務(wù)過程中產(chǎn)生的臨時數(shù)據(jù),便于虛擬設(shè)備的動態(tài)遷移。VCM內(nèi)部主要由資源分配單元與VCM監(jiān)管單元組成。資源分配單元主要根據(jù)服務(wù)種類將不同類型的作業(yè)包發(fā)往不同的處理接口,并負責(zé)從相應(yīng)接口將處理好的數(shù)據(jù)返回給用戶;VCM監(jiān)管單元主要為外部的計算資源監(jiān)管模塊提供VCM的內(nèi)部資源信息,同時可以根據(jù)外部命令對VCM內(nèi)部資源進行相應(yīng)調(diào)整。
作業(yè)隊列,是VCM與計算模塊之間的數(shù)據(jù)緩沖區(qū),主要由優(yōu)先級隊列與作業(yè)上下行隊列組成,結(jié)構(gòu)組成如圖2所示。優(yōu)先級隊列與VCM一一對應(yīng),作業(yè)上下行隊列與計算節(jié)點一一對應(yīng)。從VCM接收到的作業(yè)包,會根據(jù)作業(yè)包的相關(guān)標(biāo)識分發(fā)到相關(guān)的優(yōu)先級隊列,再根據(jù)作業(yè)分發(fā)單元中的調(diào)度策略將其分發(fā)到相應(yīng)的作業(yè)下行隊列中,然后由計算單元對其進行處理,最后通過作業(yè)上行隊列將結(jié)果返回給VCM。
計算模塊,主要由計算節(jié)點組成,這些計算節(jié)點是實際計算單元經(jīng)過抽象得到的,實際計算單元既可以是軟件實現(xiàn)也可以是硬件設(shè)備。
計算資源監(jiān)管模塊,主要負責(zé)對整個系統(tǒng)的計算資源,如內(nèi)存、CPU、磁盤等信息進行監(jiān)管,也包括對各作業(yè)隊列的負載信息與各計算節(jié)點的運行信息等進行監(jiān)管。通過監(jiān)控這些資源既便于管理員了解系統(tǒng)運行情況,也便于資源的動態(tài)配置。
圖2 作業(yè)隊列
2.2.1身份驗證
為保證密碼服務(wù)系統(tǒng)的安全性,用戶在使用密碼服務(wù)之前需要在該系統(tǒng)注冊,只有合法用戶才能使用密碼服務(wù)。用戶注冊時,由計算資源監(jiān)管模塊根據(jù)用戶需求與當(dāng)前系統(tǒng)計算資源的使用情況為用戶分配對應(yīng)的計算資源,創(chuàng)建相應(yīng)的VCM,同時為VCM分配獨有的虛擬IP,該IP與用戶形成一對映射關(guān)系。驗證步驟如下:
Step1用戶向系統(tǒng)發(fā)送帶有用戶標(biāo)識碼信息的連接請求包;
Step2驗證模塊取出用戶標(biāo)識碼,并將其與本地數(shù)據(jù)庫進行比對,如果驗證成功,則執(zhí)行下一步,否則返回錯誤;
Step3從數(shù)據(jù)庫中得到為該用戶分配的VCM的IP地址,并與其建立連接,形成內(nèi)部通路;
Step4驗證模塊返回連接成功信息,然后負責(zé)外部與VCM之間的數(shù)據(jù)轉(zhuǎn)發(fā),直到用戶斷開連接。
因此,該系統(tǒng)對外只有一個交互接口,隱藏了系統(tǒng)的內(nèi)部數(shù)據(jù)通道與資源的分配情況。
2.2.2VCM
虛擬密碼設(shè)備VCM是基于QEMU-KVM技術(shù)創(chuàng)建的KVM虛擬機,與用戶一一對應(yīng)。
通過虛擬機的配置文件,可以為虛擬機靈活分配內(nèi)存、CPU、外設(shè)等。在Linux環(huán)境下,配置文件位于/etc/libvirt/qemu/下,由xml文件定義。虛擬機的基本信息如下:
其中:由屬性type指定使用的虛擬化技術(shù)為KVM;元素name指定創(chuàng)建的虛擬機名稱為vcm1;元素uuid指定當(dāng)前虛擬機的唯一標(biāo)識符;元素memory指定虛擬機啟動時所分配的內(nèi)存大小;KVM虛擬機中的內(nèi)存管理采用內(nèi)存氣球(Ballooning)技術(shù)[17],便于內(nèi)存的動態(tài)調(diào)整,元素currentMemory指定使用該技術(shù)動態(tài)調(diào)整后的內(nèi)存大?。辉豽cpu指定為虛擬機分配的虛擬CPU數(shù)量;元素os指定虛擬機的系統(tǒng)信息。
身份驗證模塊與VCM之間通過Socket套接字進行通信,每個VCM擁有各自獨立的IP地址,建立數(shù)據(jù)通道后,各用戶之間的數(shù)據(jù)收發(fā)互不影響。
針對I/O虛擬化,KVM一般使用純軟件的方式模擬I/O設(shè)備[18]。當(dāng)客戶機發(fā)出I/O請求時,KVM內(nèi)核模塊中的I/O操作捕獲代碼攔截該請求,對其進行相應(yīng)處理后將請求信息放到I/O共享頁中,并通知QEMU程序,QEMU獲得請求信息后,使用硬件模擬代碼模擬此次I/O操作,最后將結(jié)果放回I/O共享頁,KVM內(nèi)核模塊捕獲到該結(jié)果之后返回給客戶機。這樣做會導(dǎo)致每次I/O請求時出現(xiàn)多次上下文切換,考慮到本框架中的KVM與作業(yè)隊列之間需要進行頻繁的數(shù)據(jù)交互,采用這種方法的處理性能較差。
Virtio技術(shù)是一種I/O半虛擬化的解決方案,它在客戶操作系統(tǒng)中安裝前端驅(qū)動(Front-end driver),在QEMU中安裝后端驅(qū)動(Back-end driver),前后端之間通過環(huán)形緩沖區(qū)Vring直接通信,這樣就不需要KVM內(nèi)核模塊參與,進而提升數(shù)據(jù)的交互性能。它的實現(xiàn)被稱為Virtio-serial,是一種傳輸協(xié)議,用于客戶與宿主間的簡單通信[19]。所以,在VCM與作業(yè)隊列之間采用Virtio技術(shù)建立數(shù)據(jù)通道可以大大提升數(shù)據(jù)傳輸效率。修改VCM對應(yīng)的xml文件即可添加相應(yīng)設(shè)備,如下所示:
VCM啟動后,在路徑/dev/virtio-ports下會新增一個名為vcm.recv的字符設(shè)備,通過對該設(shè)備進行文件讀寫即可實現(xiàn)對Virtio通道的數(shù)據(jù)收發(fā)。相應(yīng)地,該設(shè)備在宿主機當(dāng)中被映射成一個套接字文件vcm_send.data,位于/var/lib/libvirt/qemu/路徑下,采用Socket套接字方法即可完成對Virtio通道的讀寫。這樣,就實現(xiàn)了VCM與宿主機之間的高效數(shù)據(jù)交互。
2.2.3作業(yè)隊列
作業(yè)隊列主要作為VCM與計算模塊之間的數(shù)據(jù)緩沖區(qū)。為了能夠使作業(yè)包按照任務(wù)優(yōu)先級進行處理,將下行隊列分為兩層:優(yōu)先級隊列與作業(yè)下行隊列;對于計算模塊,只要數(shù)據(jù)處理完畢后就會將處理結(jié)果放入上行隊列,這意味著先處理先返回,所以只需要一層上行隊列。相應(yīng)的隊列管理進程負責(zé)管理隊列之間的作業(yè)交互。針對這3類不同功能的作業(yè)隊列,隊列管理進程也分為3類:
(1) 接收進程,管理VCM與優(yōu)先級隊列之間的數(shù)據(jù)通路,負責(zé)將來自VCM的作業(yè)包根據(jù)作業(yè)優(yōu)先級標(biāo)識放入對應(yīng)的優(yōu)先級隊列中。
(2) 作業(yè)分發(fā)進程,作用相當(dāng)于作業(yè)分發(fā)單元,管理優(yōu)先級隊列與作業(yè)下行隊列之間的數(shù)據(jù)通路,對作業(yè)包進行調(diào)度。對于每種優(yōu)先級隊列,均設(shè)定一個閾值,該閾值可以由作業(yè)包的平均等待時間或隊列中的作業(yè)包數(shù)決定。以作業(yè)包數(shù)為例,當(dāng)各優(yōu)先級隊列的負載均低于閾值時,實行遍歷調(diào)度的策略,即從高優(yōu)先級到低優(yōu)先級依次調(diào)度;當(dāng)某級隊列的負載超過了閾值,則先切換到該級隊列進行調(diào)度,直到其負載低于閾值,再返回原隊列繼續(xù);如果有多個隊列同時出現(xiàn)超過閾值的狀況,則按照優(yōu)先級由高到低的策略進行調(diào)度。該閾值可以根據(jù)實際情況在資源管理平臺中修改。
(3) 發(fā)送進程,管理作業(yè)上行隊列與VCM之間的數(shù)據(jù)通路,負責(zé)將作業(yè)上行隊列中的作業(yè)包發(fā)送給VCM。
為防止使用不同密碼算法服務(wù)的數(shù)據(jù)在傳輸過程當(dāng)中互相影響,對于每一種密碼服務(wù),VCM都分配有對應(yīng)的Virtio收發(fā)通道,對于每一個計算節(jié)點,每種密碼服務(wù)都分配有對應(yīng)的作業(yè)上下行隊列。配置不同的Virtio收發(fā)通道保證了在數(shù)據(jù)分發(fā)及處理的過程中,單一密碼服務(wù)類型的數(shù)據(jù)存在于單一類型的數(shù)據(jù)通道當(dāng)中,相比于使用公用通道,不需要每次從通道中取出數(shù)據(jù)時進行分類,因而便于對其中某個單一密碼算法流程進行全局管理,有效提高了處理效率。通過配置獨立的作業(yè)上下行隊列,便于計算節(jié)點的動態(tài)配置,如果需要添加或者刪除計算節(jié)點時,只需要打開或者關(guān)閉相應(yīng)的隊列即可。
對于每一個作業(yè)包,可定義如下包頭對作業(yè)進行區(qū)分:
struct data_head
{
int priority;
//作業(yè)包優(yōu)先級
int type;
//算法服務(wù)標(biāo)識
int id;
//作業(yè)包ID
int len;
//作業(yè)包長度
};
其中:priority標(biāo)識作業(yè)包的優(yōu)先級,type標(biāo)識作業(yè)包的類型,id用于與其他作業(yè)進行區(qū)分,len指定作業(yè)包的長度。
作業(yè)隊列在處理數(shù)據(jù)時主要分為以下4個步驟:
Step1接收進程通過Virtio通道從VCM中取出數(shù)據(jù),并根據(jù)包頭中的priority字段將其放入相應(yīng)的優(yōu)先級隊列中;
Step2作業(yè)分發(fā)進程按照當(dāng)前調(diào)度策略從某個優(yōu)先級隊列中取出作業(yè)包,然后根據(jù)包頭中的type字段將其放入相應(yīng)的作業(yè)下行隊列;
Step3計算模塊中的計算節(jié)點從對應(yīng)的作業(yè)下行隊列中取走數(shù)據(jù),待數(shù)據(jù)處理完畢后,直接放入相應(yīng)的作業(yè)上行隊列;
Step4發(fā)送進程發(fā)現(xiàn)某作業(yè)上行隊列中存在數(shù)據(jù)后,就會通過相應(yīng)的Virtio通道將其發(fā)給VCM。
2.2.4計算資源監(jiān)管
為了對計算資源進行合理分配,需要構(gòu)建計算資源監(jiān)管模塊,負責(zé)對計算資源的使用情況進行實時監(jiān)控,用于作業(yè)的分配與調(diào)度。
(1) 通過Libvirt庫對VCM進行管理。
Libvirt是一款針對Linux虛擬化平臺進行管理的開源API[20],它提供了一套統(tǒng)一的虛擬化管理接口,同時提供了一個libvirtd服務(wù)和virsh命令行管理工具,便于直接對虛擬機進行管理。常用virsh命令如表1所示。
表1 常用virsh命令
(2) 通過共享內(nèi)存實時監(jiān)管作業(yè)隊列與計算節(jié)點。
共享內(nèi)存是一種用于進程之間傳遞消息的方式。通過創(chuàng)建一塊固定的內(nèi)存區(qū)域,使得多個進程都可以將其連接到它們自己的地址空間,再通過增加同步機制保證共享內(nèi)存區(qū)內(nèi)數(shù)據(jù)的正確性。各作業(yè)隊列與計算節(jié)點可以將其負載信息同步到共享內(nèi)存中,便于計算資源監(jiān)管模塊對它們進行監(jiān)管。與數(shù)據(jù)庫記錄穩(wěn)定且更新頻率低的數(shù)據(jù)相比,共享內(nèi)存提供了對臨時且更新頻率高的數(shù)據(jù)進行記錄的方法,便于實時狀態(tài)的更新與反饋。
2.2.5計算節(jié)點
為了實現(xiàn)計算資源虛擬化,需要將傳統(tǒng)意義上的軟硬件計算單元抽象成計算節(jié)點,通過統(tǒng)一的描述語言構(gòu)建底層的計算資源池。針對用于密碼運算的底層計算單元,可以用一個多元組來表示:
nodei=R(Ei,Bi,A1,A2,…,Aj)
(1)
式中:Ei表示節(jié)點ID,用于區(qū)別其他節(jié)點;Bi表示屬主ID,用于表示當(dāng)前節(jié)點所屬的VCM標(biāo)識;Aj用于表示本節(jié)點的計算能力,包括密碼服務(wù)類型Tj、處理速度Pj及狀態(tài)信息Sj,即:
Aj={Tj,Pj,Sj}
(2)
對只提供一種密碼算法的節(jié)點有如下表示:
nodei=R(Ei,Bi,{T,P,S})
(3)
計算節(jié)點經(jīng)過抽象后以這種多元組的形式{node1,node2,…,noden}儲存在數(shù)據(jù)庫當(dāng)中。隊列管理進程通過這些信息,將作業(yè)包分發(fā)到最優(yōu)節(jié)點;監(jiān)管模塊則通過這些信息實現(xiàn)對計算節(jié)點的動態(tài)配置。
基于本文所描述的密碼計算資源虛擬化方法,通過在Linux系統(tǒng)中搭建相關(guān)環(huán)境,實現(xiàn)了計算資源虛擬化的原型系統(tǒng)。通過對系統(tǒng)進行測試,可以證明所提出的虛擬化方法能夠?qū)γ艽a計算資源進行動態(tài)配置,滿足所提出的需求。
使用兩臺PC進行測試,一臺作為用戶端,一臺作為服務(wù)器端,二者通過Socket建立連接,在服務(wù)器端部署整個虛擬化系統(tǒng),用戶端通過服務(wù)器端提供的API接口進行交互。
為方便進行功能測試,底層計算單元通過調(diào)用OpenSSL軟件庫實現(xiàn)密碼運算,且只提供SM3雜湊算法服務(wù)。選用MySQL作為系統(tǒng)的核心數(shù)據(jù)庫,用于記錄用戶的注冊信息、VCM及各計算節(jié)點的資源信息。利用Linux系統(tǒng)提供的消息隊列機制構(gòu)建作業(yè)隊列。
數(shù)據(jù)庫的基本字段如表2所示。其中,為方便處理,對計算節(jié)點進行了量化處理,規(guī)定:節(jié)點SM3的實際處理速率為1 kbit/s時對應(yīng)的sm3rate為1,即P=1;屬主ID為0時表示該節(jié)點未被分配;服務(wù)類型為1時表示提供SM3雜湊算法服務(wù);狀態(tài)信息為1時表示當(dāng)前節(jié)點可用。
表2 數(shù)據(jù)庫字段
這里定義4個不同速率的計算節(jié)點,即:
node1=R(1,1,{1,1,1})
(4)
node2=R(2,0,{1,1,1})
(5)
node3=R(3,0,{1,2,1})
(6)
node4=R(4,0,{1,2,1})
(7)
其中,只有node1被分配給了ID為1的VCM,其余節(jié)點都處于未分配狀態(tài)。
資源監(jiān)管平臺如圖3所示。通過資源監(jiān)管平臺界面,可以實時監(jiān)視當(dāng)前系統(tǒng)已注冊的用戶、為當(dāng)前用戶所分配的VCM信息以及為VCM所分配的計算節(jié)點狀態(tài)信息。由圖3可知,當(dāng)前系統(tǒng)注冊用戶只有1個,所分配的VCM的ID為1,為該VCM分配的計算節(jié)點ID為1,其SM3處理速率為1,與式(4)定義相符。
圖3 資源監(jiān)管平臺
通過該平臺除了可以看到當(dāng)前活躍的計算節(jié)點,也能看到未分配的節(jié)點信息,如圖4所示。
圖4 計算節(jié)點信息
由圖4可以看到,當(dāng)前系統(tǒng)存在4個計算節(jié)點,節(jié)點的狀態(tài)與式(4)-式(7)所定義的一致。針對這4個節(jié)點,可以對其進行動態(tài)配置。通過配置可以自由搭配節(jié)點,用戶端所得到的SM3運算速率變化如圖5所示,橫坐標(biāo)中用括號括起來的數(shù)據(jù)表示當(dāng)前參與計算的節(jié)點ID。
圖5 節(jié)點組合測試
由圖5可以看到,用戶在使用過程中,根據(jù)用戶需求,可以通過對節(jié)點動態(tài)配置調(diào)整用戶所擁有的計算能力。理論上對于SM3雜湊算法服務(wù),不同節(jié)點組合所獲得的處理能力應(yīng)是這幾個節(jié)點的處理能力之和,圖中的數(shù)據(jù)表明實際計算能力與理論相符。由于配置的是抽象出來的計算節(jié)點而不是具體的物理計算資源,因而在用戶使用過程中,如果需要調(diào)整底層的物理資源,可以用已配置好的計算節(jié)點替換當(dāng)前節(jié)點,而不需要中止當(dāng)前服務(wù),也就是說,通過計算節(jié)點屏蔽了底層的物理資源,滿足虛擬化的要求。
針對多計算節(jié)點同時參與計算,需要考慮各計算節(jié)點的負載均衡。作業(yè)隊列管理進程是根據(jù)各計算節(jié)點速度的量化數(shù)據(jù)分配作業(yè)包,也就是基于計算節(jié)點的處理能力分配作業(yè)包,因而在理論上保證了計算節(jié)點間的負載均衡。實際測試如圖6所示??梢钥闯觯鞴?jié)點所處理的作業(yè)包個數(shù)與其處理能力成正比,具有相同能力的節(jié)點所處理的作業(yè)包個數(shù)相同,這樣既保證了負載隨節(jié)點處理能力的增加而增加,也保證了具有相同處理能力的節(jié)點具有相同的負載。
圖6 節(jié)點負載分布
本文基于QEMU-KVM技術(shù),提出了一種密碼計算資源的虛擬化方法,設(shè)計了一個虛擬化框架。通過將物理資源抽象成計算節(jié)點構(gòu)建資源虛擬化池,通過配置優(yōu)先級隊列使得作業(yè)可以根據(jù)任務(wù)的優(yōu)先級進行處理,通過為每個節(jié)點配置獨立的作業(yè)上下行隊列保證計算節(jié)點動態(tài)添加或刪除的可行性,通過添加身份驗證模塊保證整個虛擬化系統(tǒng)的安全。仿真實驗證明了本方法的正確性和可行性,利用該框架可以對密碼計算資源進行虛擬化,實現(xiàn)對密碼計算資源的動態(tài)配置。