李 帥,孫 磊,郭松輝
(信息工程大學(xué),鄭州 450001)(*通信作者電子郵箱2650536170@qq.com)
近年來(lái),隨著云計(jì)算的不斷發(fā)展,其重要性越來(lái)越受到科學(xué)界和工業(yè)界的關(guān)注,同時(shí)其安全性也面臨著重大的挑戰(zhàn)[1],尤其是虛擬資源可遷移性引發(fā)的云中數(shù)據(jù)不可控問(wèn)題[2],導(dǎo)致云中存在數(shù)據(jù)泄露的安全風(fēng)險(xiǎn)[3]。2016年云安全聯(lián)盟(Cloud Security Alliance, CSA)公布的十二大安全威脅中就包括數(shù)據(jù)泄露和用戶身份憑證被盜等重大安全風(fēng)險(xiǎn)。目前,各云服務(wù)提供商對(duì)于云計(jì)算面臨的安全風(fēng)險(xiǎn)也提出了各種解決方案。例如:阿里云安全解決方案在數(shù)據(jù)層提供了加密服務(wù),該服務(wù)可記錄、分析和匯報(bào)用戶訪問(wèn)數(shù)據(jù)庫(kù)的行為,并對(duì)生成的數(shù)據(jù)進(jìn)行加密,提高了數(shù)據(jù)安全。從云數(shù)據(jù)中心到云用戶,每一層都應(yīng)該對(duì)其安全性采取有效措施來(lái)降低安全風(fēng)險(xiǎn),提高數(shù)據(jù)的安全性[4]。密碼云[2]技術(shù)將對(duì)稱加密、數(shù)字簽名和完整性校驗(yàn)等密碼技術(shù)運(yùn)用到云計(jì)算中來(lái)提供密碼運(yùn)算,大幅度地提高了云環(huán)境下數(shù)據(jù)的安全性。密碼云采用虛擬化技術(shù)將密碼設(shè)備虛擬成多個(gè)虛擬密碼設(shè)備提供給上層虛擬密碼機(jī)(Virtual Cipher Machine, VCM)[2]使用,滿足了云環(huán)境下的密碼運(yùn)算需求。
為了使虛擬密碼機(jī)的密碼運(yùn)算性能更高,密碼設(shè)備采用了單根I/O虛擬化(Single-Root I/O Virtualization, SR-IOV)技術(shù)為虛擬密碼機(jī)提供高效密碼服務(wù)。SR-IOV技術(shù)采用Passthrough I/O傳輸方式,不需要虛擬機(jī)監(jiān)控器(Virtual Machine Monitor, VMM)對(duì)虛擬機(jī)進(jìn)行監(jiān)控,通過(guò)硬件直接與虛擬機(jī)進(jìn)行I/O傳輸[5],并且在傳輸過(guò)程中,通過(guò)輸入/輸出內(nèi)存管理單元(Input/Output Memory Management Unit, IOMMU)減少了存儲(chǔ)保護(hù)和地址轉(zhuǎn)換的開(kāi)銷,大幅度提高了傳輸效率[6],實(shí)現(xiàn)了虛擬密碼機(jī)的高效密碼服務(wù);但是,在實(shí)驗(yàn)過(guò)程中發(fā)現(xiàn),虛擬密碼機(jī)加密速度明顯低于主機(jī)加密速度,而且隨著加密字節(jié)塊的增大,虛擬密碼機(jī)加密速度和主機(jī)加密速度的差距逐漸增大,這說(shuō)明,當(dāng)外部中斷請(qǐng)求過(guò)多時(shí)會(huì)嚴(yán)重影響虛擬密碼機(jī)加密性能。而造成虛擬密碼機(jī)加密性能降低的根本原因是虛擬密碼機(jī)中斷請(qǐng)求需要陷入到主機(jī)內(nèi)核中進(jìn)行處理,該過(guò)程會(huì)導(dǎo)致至少兩次non-root到root模式切換即VM-exit。當(dāng)云環(huán)境下大量的外部中斷請(qǐng)求需要調(diào)用密碼算法時(shí)就會(huì)導(dǎo)致VCM和VMM之間頻繁的上下文切換[7],嚴(yán)重影響了中斷傳輸?shù)男?,繼而影響虛擬密碼機(jī)加密性能。
為了解決中斷傳輸路徑中上下文切換導(dǎo)致系統(tǒng)開(kāi)銷大的問(wèn)題,文獻(xiàn)[8]提出了一種直接中斷傳輸?shù)姆椒?,清除了虛擬機(jī)控制結(jié)構(gòu)(Virtual Machine Control Structure, VMCS)中的外部中斷退出位,那么外部中斷將不會(huì)觸發(fā)VM-exit;但是該方法需要判斷虛擬機(jī)是否正在運(yùn)行以及運(yùn)行時(shí)在哪個(gè)物理CPU核上運(yùn)行,增加了復(fù)雜度。文獻(xiàn)[9]提出了一種更少中斷退出的方法(Exit-Less Interrupt, ELI),采用軟件模擬的方式在客戶虛擬機(jī)內(nèi)建立影子中斷描述符表(Interrupt Description Table, IDT)直接處理中斷;但是在ELI機(jī)制中,影子IDT只能接收來(lái)自對(duì)應(yīng)用戶對(duì)應(yīng)的中斷,其他中斷仍需要主機(jī)的參與。文獻(xiàn)[10]提出了一種針對(duì)I/O虛擬化的高效和相應(yīng)事件系統(tǒng)(Efficient and reSponsive Event System for I/O virtualization, ES2),該系統(tǒng)改善了虛擬機(jī)和硬件設(shè)備之間的雙向I/O傳輸。該機(jī)制可以提供高效I/O請(qǐng)求交付和增強(qiáng)I/O響應(yīng)能力,并且不需要修改虛擬機(jī)操作系統(tǒng),但是該機(jī)制并沒(méi)有在SR-IOV環(huán)境中實(shí)現(xiàn)。本文對(duì)SR-IOV環(huán)境下虛擬密碼機(jī)的中斷機(jī)制進(jìn)行了優(yōu)化,提出了一種減少上下文切換(Reducing Context Switching, RCS)的中斷傳輸機(jī)制。該機(jī)制保留了第一次VM-exit,當(dāng)外部中斷陷入到主機(jī)內(nèi)核區(qū)時(shí),由主機(jī)判斷外部中斷是否發(fā)送給虛擬密碼機(jī),然后在虛擬密碼機(jī)內(nèi)核建立了一個(gè)由主機(jī)到虛擬密碼機(jī)的關(guān)系映射表,通過(guò)對(duì)注入到虛擬密碼機(jī)中未被分配的中斷進(jìn)行注冊(cè),注冊(cè)完成后直接在虛擬密碼機(jī)內(nèi)核對(duì)該中斷進(jìn)行處理,避免了中斷再次陷入主機(jī)內(nèi)核,優(yōu)化了虛擬密碼機(jī)的中斷傳輸路徑,提高了虛擬密碼機(jī)中斷傳輸?shù)男省?/p>
SR-IOV是PCI-SIG組織發(fā)布的PCIe規(guī)范的擴(kuò)展,它采用Passthrough I/O技術(shù)在數(shù)據(jù)傳輸過(guò)程中繞過(guò)VMM,使用IOMMU在虛擬內(nèi)存中直接尋址,即直接將虛擬地址轉(zhuǎn)換為物理地址[5],可讓實(shí)體設(shè)備在虛擬內(nèi)存環(huán)境中工作,擴(kuò)展了系統(tǒng)內(nèi)存容量,提升了性能。每一個(gè)PCIe設(shè)備可以配置1到8個(gè)物理功能(Physical Function, PF),各個(gè)PF之間是相互獨(dú)立的。每個(gè)PF都具有標(biāo)準(zhǔn)的PCIe功能,可以對(duì)其進(jìn)行完全的配置管理。可以通過(guò)PF配置或者控制PCIe設(shè)備,也可以通過(guò)PF對(duì)數(shù)據(jù)的輸入和輸出進(jìn)行管理。同時(shí),在PCIe設(shè)備中,具有SR-IOV功能的設(shè)備可創(chuàng)建多個(gè)虛擬功能(Virtual Function, VF)。相比PF,VF僅具有輕量級(jí)的PCIe功能,只能進(jìn)行數(shù)據(jù)的傳輸;但是每個(gè)VF對(duì)應(yīng)唯一的資源標(biāo)識(shí)符(Resource IDentifier, RID),每個(gè)RID可用于索引IOMMU頁(yè)表,因此,每個(gè)VF可以獨(dú)立接收和傳輸數(shù)據(jù)包。而且每個(gè)VF都擁有與性能相關(guān)的資源,比如傳輸和接收描述符,同時(shí)共享其他主要設(shè)備資源[11]。在SR-IOV中,每個(gè)PF關(guān)聯(lián)多個(gè)VF,由PF對(duì)多個(gè)VF進(jìn)行配置管理。在配置SR-IOV實(shí)驗(yàn)環(huán)境時(shí),可以對(duì)每一個(gè)VCM分配一個(gè)或者多個(gè)VF,由于每個(gè)VF都對(duì)應(yīng)唯一的RID,所以VCM之間是相互隔離的,這有效提高了I/O傳輸?shù)男阅堋?/p>
基于SR-IOV技術(shù),將每個(gè)VCM對(duì)應(yīng)于一個(gè)VF,VCM和VF之間通過(guò)VFIO驅(qū)動(dòng)進(jìn)行通信,并且不受VMM的干預(yù)[12]。其基于SR-IOV的密碼設(shè)備基本架構(gòu)如圖1所示。
圖1 基于SR-IOV的密碼設(shè)備基本架構(gòu)
x86服務(wù)器多采用消息信號(hào)中斷(Message Signaled Interrupt, MSI)和它的擴(kuò)展形式MSI-X發(fā)送中斷信號(hào)。服務(wù)器一旦啟動(dòng),本地高級(jí)可編程中斷控制器(Local Advanced Programmable Interrupt Controller, LAPIC)就會(huì)對(duì)每一個(gè)I/O設(shè)備分配MSI地址,其中描述中斷的MSI地址確定了中斷的目的CPU核地址。同時(shí),MSI數(shù)據(jù)存放了中斷向量號(hào)和中斷傳輸模式,通過(guò)執(zhí)行內(nèi)存寫操作觸發(fā)消息信號(hào)中斷[8]。目前絕大部分PCIe設(shè)備也使用MSI/MSI-X機(jī)制發(fā)送中斷請(qǐng)求。在PCIe設(shè)備中,觸發(fā)MSI中斷的每一個(gè)內(nèi)存寫操作都直接穿過(guò)PCIe層級(jí)進(jìn)入root模式進(jìn)行處理。每個(gè)CPU核上都配置一個(gè)LAPIC,同時(shí)在每個(gè)I/O子系統(tǒng)上也存在一個(gè)輸入輸出高級(jí)可編程中斷控制器(Input/Output Advanced Programmable Interrupt Controller, IOAPIC)。IOAPIC支持I/O重定向表,IOMMU支持中斷重映射表,兩者同時(shí)為每個(gè)PCIe設(shè)備中斷提供中斷目的地址、觸發(fā)模式和傳輸路徑。
當(dāng)一個(gè)I/O設(shè)備發(fā)出一個(gè)中斷消息,該中斷消息將對(duì)一個(gè)特殊地址執(zhí)行內(nèi)存寫操作來(lái)中斷CPU,這會(huì)導(dǎo)致一個(gè)物理中斷被發(fā)送到CPU。服務(wù)器當(dāng)前執(zhí)行的代碼被中斷,執(zhí)行將跳轉(zhuǎn)到一個(gè)預(yù)定義的處理程序,該處理程序由中斷描述符表指定。x86架構(gòu)CPU最多可定義256個(gè)中斷向量,每個(gè)表項(xiàng)都對(duì)應(yīng)于一個(gè)中斷處理函數(shù)的地址,當(dāng)觸發(fā)相應(yīng)的中斷時(shí),對(duì)應(yīng)函數(shù)將被調(diào)用。通常,I/O設(shè)備發(fā)出一個(gè)請(qǐng)求,該請(qǐng)求通過(guò)對(duì)一個(gè)特殊地址執(zhí)行內(nèi)存寫操作來(lái)中斷CPU,這會(huì)導(dǎo)致一個(gè)物理中斷被發(fā)送到CPU。當(dāng)一個(gè)MSI中斷傳輸?shù)侥康腃PU,在IDT中將觸發(fā)相應(yīng)的中斷處理器(Interrupt Handler)處理中斷。
然而,在虛擬環(huán)境下,外部中斷的處理依然需要VMM的參與。從外部中斷觸發(fā)VM-exit到整個(gè)中斷處理完成至少需要兩次VM-exit,每次VM-exit都會(huì)對(duì)應(yīng)于一次VM-entry,這樣在每次的中斷處理過(guò)程中便會(huì)引起至少4次上下文切換。當(dāng)同一時(shí)間存在大量的外部中斷請(qǐng)求時(shí),系統(tǒng)就會(huì)因?yàn)轭l繁的上下文切換產(chǎn)生大量的上下文開(kāi)銷和cache污染[13],使得在中斷密集的時(shí)候,虛擬密碼機(jī)的加密性能嚴(yán)重降低。虛擬環(huán)境下I/O中斷處理過(guò)程如圖2所示。
當(dāng)虛擬機(jī)收到外部中斷時(shí),IOMMU首先作出響應(yīng)并執(zhí)行相應(yīng)的中斷重映射,由于x86架構(gòu)本身VT-x技術(shù)的限制,VMM將截獲中斷引起VM-exit事件,該事件通過(guò)主機(jī)中斷描述符初始化相應(yīng)的中斷處理程序進(jìn)行傳送。當(dāng)中斷在主機(jī)中斷處理程序中處理完成,會(huì)生成一個(gè)結(jié)束中斷信號(hào)(End Of Interrupt, EOI),VMM識(shí)別到EOI信號(hào)后就把主機(jī)向量映射到相應(yīng)的虛擬機(jī)向量。然后,在目標(biāo)處理器的虛擬本地高級(jí)可編程中斷控制器(virtual Local Advanced Programmable Interrupt Controller, vLAPIC)上更新虛擬中斷請(qǐng)求注冊(cè)(virtual Interrupt Request Register, vIRR)和虛擬中斷服務(wù)注冊(cè)(virtual Interrupt Service Register, vISR),并且在虛擬機(jī)的虛擬機(jī)控制結(jié)構(gòu)中建立VM-entry中斷信息域。通過(guò)一個(gè)VM-entry注入把虛擬中斷傳輸給虛擬機(jī)。虛擬機(jī)內(nèi)核接收到中斷信號(hào)后,更新LAPIC,并在虛擬機(jī)IDT中運(yùn)行相應(yīng)的中斷處理程序。中斷請(qǐng)求在虛擬機(jī)內(nèi)核處理完成后,也會(huì)生成一個(gè)EOI信號(hào),該信號(hào)使中斷再次陷入VMM,重新更新vLAPIC后將生成一個(gè)虛擬EOI信號(hào),執(zhí)行VM-entry,恢復(fù)虛擬機(jī)的正常運(yùn)行[7]。在虛擬環(huán)境下的中斷處理過(guò)程中,每次I/O中斷處理過(guò)程都會(huì)導(dǎo)致至少兩次VM-exit,如果大量的外部中斷請(qǐng)求到來(lái)時(shí),過(guò)多的上下文切換必將嚴(yán)重影響整個(gè)系統(tǒng)的性能。
圖2 虛擬環(huán)境下的中斷處理
在SR-IOV環(huán)境中,VMM和虛擬機(jī)操作系統(tǒng)共享硬件資源,因此底層硬件需要一個(gè)物理內(nèi)存區(qū)域來(lái)自動(dòng)保存或恢復(fù)彼此執(zhí)行的上下文,這個(gè)區(qū)域稱為虛擬機(jī)控制結(jié)構(gòu)區(qū)。該區(qū)域包括虛擬機(jī)狀態(tài)區(qū)、主機(jī)狀態(tài)區(qū)和執(zhí)行控制區(qū)。當(dāng)發(fā)生VM-exit時(shí),硬件自動(dòng)將虛擬機(jī)操作系統(tǒng)的上下文保存在虛擬機(jī)狀態(tài)區(qū),并且從主機(jī)狀態(tài)區(qū)中加載VMM的通用事件處理函數(shù)地址,之后VMM執(zhí)行相應(yīng)的操作。由圖2可知,虛擬環(huán)境下的中斷處理過(guò)程導(dǎo)致了至少兩次VM-exit,每次VM-exit都會(huì)有VMM的參與,這嚴(yán)重影響了中斷傳輸?shù)男?。在SR-IOV環(huán)境中,雖然VF直連虛擬密碼機(jī),但是由于VMM具有對(duì)處理器和平臺(tái)硬件完全的控制權(quán),在對(duì)處理器資源、物理內(nèi)存、中斷處理和I/O的處理中同時(shí)也具有選擇控制的權(quán)利,也就是說(shuō),如果外部中斷的控制權(quán)在虛擬密碼機(jī)手中,那么虛擬密碼機(jī)向量就可以對(duì)應(yīng)于物理設(shè)備中斷服務(wù)注冊(cè)在虛擬密碼機(jī)描述符的位置,即物理設(shè)備ISR完全由虛擬密碼機(jī)執(zhí)行;如果外部中斷的控制權(quán)掌握在VMM手中,那么當(dāng)發(fā)生外部中斷時(shí),將觸發(fā)VM-exit,VMM執(zhí)行其控制權(quán),所以密碼設(shè)備的VF產(chǎn)生的某些中斷依然需要VMM處理。其處理方式是VMM觸發(fā)相應(yīng)的虛擬中斷并將該中斷注入虛擬密碼機(jī),因此,有必要對(duì)密碼設(shè)備的中斷機(jī)制進(jìn)行優(yōu)化以此來(lái)進(jìn)一步提高密碼設(shè)備的性能。
假設(shè)系統(tǒng)中的每一臺(tái)虛擬密碼機(jī)僅對(duì)應(yīng)一個(gè)VF,在這種情況下,VF只能中斷它所對(duì)應(yīng)的虛擬密碼機(jī)。為了減少在每次中斷過(guò)程中由于VMM的介入導(dǎo)致的上下文切換次數(shù),本文提出了一種減少上下文切換的中斷傳輸機(jī)制——RCS中斷傳輸機(jī)制。RCS中斷傳輸機(jī)制過(guò)程如圖3所示。
該中斷傳輸機(jī)制基于KVM實(shí)現(xiàn)。由于虛擬密碼機(jī)中斷請(qǐng)求的處理需要進(jìn)入到KVM內(nèi)核進(jìn)行實(shí)現(xiàn),因此該機(jī)制保留了第一次VM-exit。這樣做的好處是:當(dāng)發(fā)送給虛擬密碼機(jī)的外部中斷請(qǐng)求到來(lái)時(shí),直接將該中斷交給KVM內(nèi)核進(jìn)行處理,從而避免不能識(shí)別的中斷類型以及大量中斷到來(lái)時(shí)可能會(huì)造成的錯(cuò)誤傳輸。當(dāng)該中斷在KVM內(nèi)核注冊(cè)完成并找到對(duì)應(yīng)的中斷類型后會(huì)觸發(fā)虛擬機(jī)所對(duì)應(yīng)的vCPU,由vCPU執(zhí)行VM-entry,之后中斷開(kāi)始進(jìn)入虛擬機(jī)執(zhí)行。為了避免EOI寫操作導(dǎo)致的再次VM-exit,該機(jī)制在虛擬機(jī)內(nèi)核建立了由主機(jī)到虛擬密碼機(jī)內(nèi)核的關(guān)系映射表。關(guān)系映射表有兩個(gè)功能:第一是判斷該中斷類型是否已在虛擬密碼機(jī)IDT中存在,如果存在則直接交由虛擬密碼機(jī)的中斷處理器進(jìn)行處理;第二是如果該中斷類型在虛擬密碼機(jī)IDT中不存在,那么該映射將對(duì)該中斷進(jìn)行注冊(cè),重新分配中斷類型號(hào),然后交由虛擬密碼機(jī)中斷處理器進(jìn)行處理。在虛擬密碼機(jī)內(nèi)核直接處理中斷比中斷再次陷入主機(jī)內(nèi)核進(jìn)行處理效率更高,可明顯減少大量中斷請(qǐng)求帶來(lái)的頻繁上下文切換。
圖3 RCS中斷傳輸機(jī)制
RCS中斷傳輸機(jī)制是在KVM環(huán)境下提出的。KVM本身是集成到Linux內(nèi)核的虛擬機(jī)監(jiān)控器,是一種全虛擬化解決方案。在Linux內(nèi)核中,KVM是其中一個(gè)很小的模塊,可利用Linux實(shí)現(xiàn)硬件設(shè)備交互、任務(wù)調(diào)度和內(nèi)存管理等功能。其中,QEMU作為一個(gè)獨(dú)立的虛擬化解決方案,可以模擬一個(gè)完全不同的系統(tǒng)環(huán)境,但是QEMU模擬本身性能比較低,一般結(jié)合KVM提供的功能來(lái)提升性能[14]。系統(tǒng)架構(gòu)如圖4所示。
在KVM環(huán)境下,當(dāng)密碼設(shè)備接收到外部中斷信號(hào)時(shí),首先加載相應(yīng)的驅(qū)動(dòng)程序,然后向主機(jī)CPU發(fā)送中斷請(qǐng)求信號(hào),主機(jī)CPU接收到中斷信號(hào)后,判斷中斷請(qǐng)求類型是發(fā)給主機(jī)還是虛擬密碼機(jī),如果是發(fā)給主機(jī),則直接交給主機(jī)的中斷處理器進(jìn)行處理;如果是發(fā)送給虛擬密碼機(jī),中斷將陷入KVM內(nèi)核,由KVM內(nèi)核進(jìn)行處理。在中斷注入KVM過(guò)程中,會(huì)加載驅(qū)動(dòng)程序中ioctl函數(shù),其功能是專門對(duì)設(shè)備的I/O通道進(jìn)行管理,也可對(duì)設(shè)備的一些特性進(jìn)行控制,并且具有傳輸中斷的作用。
圖4 系統(tǒng)架構(gòu)
在KVM內(nèi)核區(qū),首先提取中斷路由表中對(duì)應(yīng)的實(shí)體,觸發(fā)對(duì)應(yīng)路由實(shí)體的觸發(fā)函數(shù);然后進(jìn)行中斷的注冊(cè)、中斷類型的檢查、中斷請(qǐng)求的發(fā)送和處理。當(dāng)中斷在主機(jī)KVM內(nèi)核執(zhí)行結(jié)束后,進(jìn)入虛擬密碼機(jī)內(nèi)核執(zhí)行。中斷進(jìn)入虛擬密碼機(jī)內(nèi)核后先觸發(fā)關(guān)系映射表,通過(guò)關(guān)系映射表中的IOAPIC來(lái)判斷中斷類型,如果該中斷類型在虛擬密碼機(jī)IDT中已存在,則退出中斷映射表,直接在虛擬密碼機(jī)內(nèi)核中由虛擬密碼機(jī)中斷處理器處理中斷;如果該中斷類型在虛擬密碼機(jī)IDT中不存在,則在關(guān)系映射表中進(jìn)行中斷注冊(cè),注冊(cè)完成后退出關(guān)系映射表,然后更新LAPIC,再交由虛擬密碼機(jī)中斷處理器處理中斷。關(guān)系映射表的中斷處理過(guò)程偽代碼如下:
Process interruption handling of relational mapping table
1) procedure relational mapping
2)notification: //Label 1
3) waked up by an interrupt request
4)handling:
5) judge the interrupt type
6) if the interrupt type is not exist then //Label 2
7) register by relational mapping
8) handle the interrupt
9) else handle the interrupt directly
10) end if
11) ifnotify_enabledthen
12) execute thehandling
13) end if
14)workload← 0
15) While this queue is not empty do
16) polling one interrupt request from this queue
17)workload←workload+1
18) ifworkload>=quotathen
19) gotohandling//Wait for next turn
20) end if
21) end while
22)enable_notify//Return to notification mode
23) gotonotification
24) end procedure
在中斷注冊(cè)過(guò)程中,會(huì)調(diào)用與IOAPIC相關(guān)的一些函數(shù),其主要的功能除了進(jìn)行中斷的注冊(cè)和中斷類型的檢查外,IOAPIC還將通過(guò)APIC總線將中斷信息分配給每顆CPU的LAPIC,然后由LAPIC決定是否接收總線上傳送來(lái)的中斷信息。在中斷信息發(fā)送到LAPIC之前,需要通過(guò)IOAPIC設(shè)置中斷請(qǐng)求的目的地址、中斷請(qǐng)求向量和中斷傳輸模式等請(qǐng)求信息,然后將中斷請(qǐng)求發(fā)送給LAPIC。LAPIC根據(jù)傳入的irq參數(shù)獲取目標(biāo)LAPIC編號(hào)目的地址,再根據(jù)目的地址找到其對(duì)應(yīng)的vCPU,然后設(shè)置目標(biāo)LAPIC的中斷請(qǐng)求寄存器,根據(jù)其傳送模式向當(dāng)?shù)氐腖APIC添加一個(gè)即將到來(lái)的中斷,最后vCPU檢查這個(gè)中斷請(qǐng)求并將中斷注入虛擬密碼機(jī)內(nèi)核,即執(zhí)行VM-entry。
中斷在虛擬密碼機(jī)內(nèi)核處理完成后,恢復(fù)虛擬密碼機(jī)執(zhí)行當(dāng)前的操作。該過(guò)程避免了由EOI寫操作帶來(lái)的VM-exit,減少了上下文切換,在中斷密集時(shí)可有效降低性能開(kāi)銷。
為了驗(yàn)證RCS機(jī)制提高了虛擬密碼機(jī)密碼運(yùn)算能力,本章針對(duì)對(duì)稱密碼算法AES和雜湊算法SHA256分別在主機(jī)、SR-IOV方式和RCS方式下的加密速度進(jìn)行了測(cè)試,并對(duì)不同機(jī)制下的加密速度進(jìn)行了對(duì)比分析,通過(guò)加密速度提升來(lái)體現(xiàn)RCS機(jī)制性能優(yōu)勢(shì)。實(shí)驗(yàn)并沒(méi)有測(cè)試非對(duì)稱密碼算法的加密速度,因?yàn)閷?duì)于非對(duì)稱密碼算法來(lái)說(shuō),其加密運(yùn)算不是傳輸密集型的操作,只能作為計(jì)算密集型的操作,I/O中斷傳輸路徑的優(yōu)化對(duì)其體現(xiàn)并不明顯。而對(duì)于對(duì)稱密碼算法和雜湊算法,其加密運(yùn)算是傳輸密集型的操作,因此實(shí)驗(yàn)研究對(duì)對(duì)稱密碼算法和雜湊算法在中斷路徑上的優(yōu)化具有實(shí)際意義。
本實(shí)驗(yàn)環(huán)境為:主機(jī)和虛擬密碼機(jī)操作系統(tǒng)均為CentOS7.1,內(nèi)核版本為L(zhǎng)inux 3.10.0,處理器Intel Xeon CPU E5- 2620 v3 @2.40 GHz 12核,內(nèi)存128 GB,支持VT-x技術(shù),支持SR-IOV,密碼設(shè)備為Intel Corporation DH895XCC Series QAT。測(cè)試工具為crytodev,crytodev是調(diào)用密碼設(shè)備的一個(gè)benchmark工具,可以測(cè)試密碼設(shè)備中密碼算法的運(yùn)算速度,其中包含AES、SHA256等加密算法。測(cè)試過(guò)程是:通過(guò)對(duì)不同字節(jié)塊大小進(jìn)行加密,選取5 s內(nèi)的總加密字節(jié)數(shù),求其平均值作為該加密字節(jié)塊大小下的加密速度。
首先,為了驗(yàn)證當(dāng)存在大量中斷請(qǐng)求時(shí),VCM的性能會(huì)顯著降低,對(duì)VCM進(jìn)行空轉(zhuǎn)測(cè)試,僅測(cè)試其中斷傳輸效率。由VCM向主機(jī)發(fā)出中斷請(qǐng)求,測(cè)試不同加密字節(jié)下主機(jī)和虛擬密碼機(jī)的加密速度。其測(cè)試結(jié)果如圖5所示。從圖5實(shí)驗(yàn)結(jié)果中可以看到:隨著加密字節(jié)塊的增大,主機(jī)加密速度和虛擬密碼機(jī)加密速度差距越來(lái)越大。由于只是空轉(zhuǎn)測(cè)試,不存在加密運(yùn)算的影響,因此造成該差距的主要因素即中斷傳輸過(guò)程中導(dǎo)致的頻繁上下文切換,恰恰驗(yàn)證了本文要解決的問(wèn)題。
圖5 加密空字節(jié)時(shí)的加密速度
然后,為了比較RCS機(jī)制相對(duì)于SR-IOV方式在加密性能上有一定的提升,本文分別對(duì)兩種加密算法在SR-IOV方式下和在RCS方式下的加密速度進(jìn)行了對(duì)比分析。實(shí)驗(yàn)測(cè)試結(jié)果如圖6(a)和圖6(b)所示。
對(duì)圖6(a)中數(shù)據(jù)進(jìn)行分析,結(jié)果表明:采用AES算法加密時(shí),RCS方式下虛擬密碼機(jī)加密速度比SR-IOV方式下虛擬密碼機(jī)加密速度平均提高了16.35%;對(duì)圖6(b)中數(shù)據(jù)進(jìn)行分析,結(jié)果表明:采用SHA256算法加密時(shí),RCS方式下虛擬密碼機(jī)加密速度比SR-IOV方式下虛擬密碼機(jī)加密速度平均提高了12.25%。而且,從實(shí)驗(yàn)結(jié)果中可以看出,加密字節(jié)塊越大,加密速度提高越明顯。
圖6 虛擬密碼機(jī)使用SR-IOV和RCS加密時(shí)的加密速度
為了進(jìn)一步驗(yàn)證RCS機(jī)制下虛擬密碼機(jī)密碼運(yùn)算能力能達(dá)到接近主機(jī)的密碼運(yùn)算性能,實(shí)驗(yàn)分別測(cè)試了主機(jī)和RCS方式下虛擬密碼機(jī)在AES和SHA256加密算法下的加密速度,其測(cè)試結(jié)果如圖7(a)和圖7(b)所示。
圖7 主機(jī)和虛擬密碼機(jī)RCS加密時(shí)的加密速度
分析圖7(a)和圖7(b)的實(shí)驗(yàn)測(cè)試結(jié)果,可得出結(jié)論:在RCS機(jī)制下,虛擬密碼機(jī)使用AES加密算法加密的速度達(dá)到了主機(jī)的88.37%~98.48%,用SHA256加密算法加密的速度達(dá)到了主機(jī)的90.44%~95.63%。而且,加密字節(jié)塊越大,該機(jī)制下的加密速度越接近于主機(jī)加密速度,該結(jié)果對(duì)于云環(huán)境下高效密碼服務(wù)的要求具有良好的現(xiàn)實(shí)意義。
同時(shí),從圖6(a)和圖7(a)中也可以看出:加密字節(jié)在32 768之前,主機(jī)加密速度和虛擬密碼機(jī)加密速度一直在增大,當(dāng)加密字節(jié)為32 768時(shí),主機(jī)加密速度和虛擬密碼機(jī)加密速度達(dá)到最大。當(dāng)加密字節(jié)再繼續(xù)增大時(shí)主機(jī)加密速度和虛擬密碼機(jī)加密速度開(kāi)始減小,說(shuō)明此時(shí)由于中斷頻率的增加只能導(dǎo)致性能的下降,這正是由于大量中斷導(dǎo)致的VM-exit使中斷處理過(guò)程多次陷入KVM內(nèi)核導(dǎo)致的頻繁上下文切換引起的性能降低[15]。同時(shí),在32 768 B之前,主機(jī)加密速度和虛擬密碼機(jī)加密速度并不是線性增長(zhǎng),而是隨著字節(jié)塊的增大,其增長(zhǎng)速度變化越來(lái)越平緩,這也驗(yàn)證了大量中斷導(dǎo)致的虛擬密碼機(jī)性能降低問(wèn)題。
針對(duì)虛擬化環(huán)境下密碼設(shè)備中斷傳輸開(kāi)銷過(guò)大影響密碼運(yùn)算性能的問(wèn)題,在SR-IOV技術(shù)的基礎(chǔ)上,本文提出了一種減少上下文切換的虛擬密碼設(shè)備中斷路徑優(yōu)化方法,實(shí)現(xiàn)了虛擬密碼機(jī)直接處理中斷的功能,降低了虛擬中斷處理過(guò)程中上下文切換次數(shù),有效解決了由于主機(jī)和虛擬密碼機(jī)之間頻繁上下文切換導(dǎo)致的系統(tǒng)過(guò)高開(kāi)銷,提高了虛擬密碼機(jī)加密性能。下一步將在現(xiàn)有硬件平臺(tái)的基礎(chǔ)上,研究加密字節(jié)塊、加密速度和中斷頻率之間的關(guān)系,進(jìn)一步優(yōu)化虛擬密碼機(jī)加密性能。