一種基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法
【專利摘要】本發(fā)明公開了一種基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法,與傳統(tǒng)嵌套虛擬化技術(shù)對物理資源進行虛擬化不同,主要側(cè)重于對物理資源的管理與監(jiān)控上,避免由于對物理資源進行虛擬化所帶來的額性能開銷。此外,通過基于NUMA節(jié)點的資源管控,避免了傳統(tǒng)虛擬化技術(shù)在NUMA架構(gòu)上的性能隔離問題。通過該方法,host?hypervisor將物理設(shè)備分組并且guest?hypervisor直接運行在不同的資源組上,這不僅能夠避免資源調(diào)度和共享造成的性能負載,而且還能夠充分地利用NUMA特性來提升系統(tǒng)性能以及保證不同guest?hypervisor間的性能隔離。
【專利說明】一種基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于嵌套虛擬化系統(tǒng)【技術(shù)領(lǐng)域】,具體涉及一種基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法。
【背景技術(shù)】
[0002]嵌套虛擬化技術(shù)是傳統(tǒng)虛擬化技術(shù)的一個延伸,使用該技術(shù)的host hypervisor可以同時在一臺物理計算機上同時運行多個guest hypervisor ο云服務提供商通過嵌套虛擬化技術(shù)不僅可以提供虛擬化系統(tǒng)的租賃服務,并且簡化了云遷移的復雜度。現(xiàn)有的虛擬化系統(tǒng)存在許多安全漏洞,研究人員通過嵌套虛擬化技術(shù)可以保證虛擬化系統(tǒng)的控制流完整性以及防止用戶隱私數(shù)據(jù)泄漏。嵌套虛擬化技術(shù)還可以使得虛擬機的開發(fā)和調(diào)試工作更加聞效地進行。
[0003]現(xiàn)有的嵌套虛擬化系統(tǒng)都是基于傳統(tǒng)的hypervisor來構(gòu)建,比如Xen可以同時運行多個Xen和KVM ;對于這種嵌套虛擬化系統(tǒng),研究人員通過將多級的攔截操作轉(zhuǎn)換成單級的攔截和轉(zhuǎn)發(fā)來優(yōu)化整個系統(tǒng)的性能。然而,該系統(tǒng)在運行過程需要對計算資源進行多級的調(diào)度和共享,從而造成了過多的虛擬機攔截和虛擬機陷入退出操作,帶來了明顯的性能負載。特別是在具有NUMA架構(gòu)的眾核服務器中,傳統(tǒng)hypervisor的處理器調(diào)度算法和內(nèi)存分配策略并不能有效地配合來充分利用NUMA本地內(nèi)存節(jié)點訪問延遲低的特性以提升系統(tǒng)的性能;這還導致了 hypervisor不能有效地避免不同虛擬機內(nèi)存訪問請求對內(nèi)存控制器和互聯(lián)總線的競爭,進而無法保證虛擬機間的性能隔離。所以,現(xiàn)有的嵌套虛擬化系統(tǒng)具有明顯的性能負載,阻礙了嵌套虛擬化技術(shù)的廣泛應用。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于解決傳統(tǒng)嵌套虛擬化系統(tǒng)中存在的性能負載以及NUMA架構(gòu)上的性能隔離問題,從而提供了一種在眾核服務器中基于物理資源穿透機制的基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法。
[0005]為達到上述目的,本發(fā)明采用的技術(shù)方案包括以下步驟:
[0006]I)系統(tǒng)啟動:
[0007]引導程序首先加載host hypervisor運行,host hypervisor通過模擬引導程序加載guest hypervisor啟動;host hypervisor對可用物理資源進行劃分,每一個guesthypervisor都穿透地運行在獨立的處理器、內(nèi)存和PCI網(wǎng)卡上,guest hypervisor之間沒有資源共享;
[0008]2)處理器信息的獲取:
[0009]通過ACPI提供的SRAT相關(guān)資源親和度表確定系統(tǒng)中的NUMA拓撲信息;探測多處理器表來獲取機器中可用的處理器信息;
[0010]3)外設(shè)信息的獲取:
[0011]通過BIOS int0xl5(EAX = 0xe820)來獲取機器的地址空間信息;通過掃描整個PCI設(shè)備的配置空間確定系統(tǒng)中可用的PCI網(wǎng)卡信息;分別通過偽造多處理器表和E820映射表來完成處理器和地址空間在不同guest hypervisor的分配,并利用硬件輔助虛擬化技術(shù)提供的嵌套頁表或擴展頁表來完成地址空間的隔離。
[0012]所述的步驟I)中,host hypervisor運行在處理器的host模式,而guesthypervisor則在guest模式下運行。
[0013]所述的步驟3)中,PCI網(wǎng)卡的分配方式:
[0014]host hypervisor通過攔截PCI配置空間的訪問來控制PCI網(wǎng)卡對不同guesthypervisor 可見性。
[0015]所述的步驟3)中,host hypervisor將所有的處理器間中斷都以物理目標模式發(fā)送,以保證處理器之間的隔離性,所有處理器間中斷的發(fā)射都需要host hypervisor的轉(zhuǎn)發(fā)。
[0016]所述的步驟3)中,host hypervisor利用IOMMU中的1/0頁表對PCI網(wǎng)卡的內(nèi)存訪問地址進行檢查和轉(zhuǎn)換,以保證不同guest hypervisor的PCI網(wǎng)卡在進行訪問內(nèi)存過程中的地址空間隔離性。
[0017]所述的步驟3)中,host hypervisor通過配置IOMMU中的消息中斷映射表來完成中斷的轉(zhuǎn)發(fā),以確保設(shè)備中斷的隔離性,轉(zhuǎn)發(fā)后的中斷都以物理模式發(fā)射到目標處理器。
[0018]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
[0019]本發(fā)明與傳統(tǒng)嵌套虛擬化技術(shù)對物理資源進行虛擬化不同,主要側(cè)重于對物理資源的管理與監(jiān)控上,避免由于對物理資源進行虛擬化所帶來的額性能開銷。此外,通過基于NUMA節(jié)點的資源管控,避免了傳統(tǒng)虛擬化技術(shù)在NUMA架構(gòu)上的性能隔離問題。通過該方法,host hypervisor將物理設(shè)備分組并且guest hypervisor直接運行在不同的資源組上,這不僅能夠避免資源調(diào)度和共享造成的性能負載,而且還能夠充分地利用NUMA特性來提升系統(tǒng)性能以及保證不同guest hypervisor間的性能隔離。
[0020]host hypervisor將計算機系統(tǒng)中可用的資源靜態(tài)地劃分成多個獨立資源節(jié)點,guest hypervisor可以直接獨立地運行在不同的資源節(jié)點上。通過物理資源穿透機制,host hypervisor可以有效地避免多級資源調(diào)度和共享造成的性能負載,使得guesthypervisor獲得接近單級虛擬化的性能;此外,物理資源穿透機制還可以有效地減少hosthypervisor的設(shè)計復雜度,提升了系統(tǒng)的可靠性和安全性。根據(jù)Mult1-processor規(guī)范,host hypervisor通過偽造多處理器表來完成處理器在不同guest hypervisor之間的劃分;利用硬件輔助虛擬化技術(shù)的支持,host hypervisor可以完成內(nèi)存地址空間的分配和隔離;基于PCI規(guī)范,host hypervisor可以攔截所有PCI配置空間的訪問來完成PCI網(wǎng)卡的物理劃分。同時,為了充分利用NUMA本地內(nèi)存節(jié)點訪問延遲低的特性,host hypervisor將處于同一 NUMA節(jié)點的處理器和內(nèi)存分配給同一個guest hypervisor使用;這不僅可以充分地提升嵌套虛擬化系統(tǒng)的性能,而且還能夠有效地比避免NUMA節(jié)點內(nèi)存控制器和互聯(lián)總線的競爭,保證了 guest hypervisor的性能隔離。
【專利附圖】
【附圖說明】
[0021]圖1為本發(fā)明的原理圖;
[0022]圖2為本發(fā)明的模型圖;[0023]圖3為本發(fā)明PCI網(wǎng)卡的分配流程圖。
【具體實施方式】
[0024]下面結(jié)合附圖對本發(fā)明作進一步說明。
[0025]參見圖1至圖2,本發(fā)明包括以下步驟:
[0026]I)系統(tǒng)啟動:
[0027]host hypervisor 運行在處理器的 host 模式,而 guest hypervisor 則在 guest 模式下運行。引導程序首先加載host hypervisor運行,host hypervisor通過模擬引導程序加載guest hypervisor啟動;host hypervisor對可用物理資源進行劃分,每一個guesthypervisor都穿透地運行在獨立的處理器、內(nèi)存和PCI網(wǎng)卡上,guest hypervisor之間沒有資源共享;
[0028]2)處理器信息的獲取:
[0029]通過ACPI提供的SRAT相關(guān)資源親和度表確定系統(tǒng)中的NUMA拓撲信息;探測多處理器表來獲取機器中可用的處理器信息;
[0030]3)外設(shè)信息的獲取:
[0031]通過BIOS int0xl5(EAX = 0xe820)來獲取機器的地址空間信息;通過掃描整個PCI設(shè)備的配置空間確定系統(tǒng)中可用的PCI網(wǎng)卡信息;分別通過偽造多處理器表和E820映射表來完成處理器和地址空間在不同guest hypervisor的分配,并利用硬件輔助虛擬化技術(shù)提供的嵌套頁表或擴展頁表來完成地址空間的隔離。嵌套頁表和擴展頁表是不同的硬件廠商對輔助虛擬化技術(shù)的不同稱呼,AMD稱之為嵌套頁表,Intel稱之為擴展頁表。
[0032]其中,host hypervisor通過攔截PCI配置空間的訪問來控制PCI網(wǎng)卡對不同guest hypervisor可見性。host hypervisor將所有的處理器間中斷都以物理目標模式發(fā)送,以保證處理器之間的隔離性,所有處理器間中斷的發(fā)射都需要host hypervisor的轉(zhuǎn)發(fā)。host hypervisor利用IOMMU中的1/0頁表對PCI網(wǎng)卡的內(nèi)存訪問地址進行檢查和轉(zhuǎn)換,以保證不同guest hypervisor的PCI網(wǎng)卡在進行訪問內(nèi)存過程中的地址空間隔離性。host hypervisor通過配置IOMMU中的消息中斷映射表來完成中斷的轉(zhuǎn)發(fā),以確保設(shè)備中斷的隔離性,轉(zhuǎn)發(fā)后的中斷都以物理模式發(fā)射到目標處理器。
[0033]本發(fā)明的原理:
[0034]本發(fā)明將計算機系統(tǒng)中可用的物理資源劃分成不同的資源節(jié)點,不同的guesthypervisor可以直接穿透地運行在獨立的資源節(jié)點上。整個技術(shù)方案可以分為兩部分:可用計算資源的探測以及資源的劃分。
[0035]host hypervisor直接運行在物理硬件之上,并且需要分別完成系統(tǒng)中可用處理器、內(nèi)存地址空間以及PCI網(wǎng)卡的探測。host hypervisor可以通過多處理器表來完成處理器的檢測;E820內(nèi)存地址空間映射表提供了整個計算機系統(tǒng)中相關(guān)地址空間信息,hosthypervisor可以分別通過引導程序提供的Multiboot啟動信息和BIOS提供的相關(guān)調(diào)用來獲取系統(tǒng)的E820映射表。對于系統(tǒng)中可用的PCI網(wǎng)卡,host hypervisor必須要以深度優(yōu)先的方式掃描整個PCI設(shè)備的配置空間來完成探測。為了能夠有效地利用NUMA本地節(jié)點內(nèi)存訪問延遲低的特性來提升嵌套虛擬化系統(tǒng)的性能,host hypervisor還需要完成系統(tǒng)中NUMA拓撲結(jié)構(gòu)信息的獲取,NUMA結(jié)構(gòu)的相關(guān)信息從ACPI BIOS提供的ACPI資源親和度表得到。
[0036]Host hypervisor通過控制guest hypervisor對可用計算資源的探測來完成計算資源的劃分。Host hypervisor首先根據(jù)BIOS提供的多處理器表為不同的guesthypervisor偽造相應的多處理器表,guest hypervisor在啟動時根據(jù)多處理器表來初始化相應的處理核心。Host hypervisor通過在multiboot啟動信息結(jié)構(gòu)中偽造E820內(nèi)存映射表來完成地址空間的分配,然后通過設(shè)定相關(guān)啟動參數(shù)來控制guest hypervisor跳過實模式啟動代碼并使用multiboot啟動信息結(jié)構(gòu)中的E820映射表來完成地址空間的初始化。為保證物理內(nèi)存的隔離性,host hypervisor使用硬件輔助虛擬化技術(shù)中的嵌套頁表或擴展頁表來完成guest hypervisor內(nèi)存地址的檢查和轉(zhuǎn)換。Host hypervisor通過攔截所有的PCI設(shè)備配置空間訪問請求來控制不同PCI設(shè)備的可見性,從而完成PCI網(wǎng)卡在不同guesthypervisor之間的分配。
[0037]當host hypervisor 啟動一個 guest hypervisor 時,host hypervisor 需要分別完成處理器、內(nèi)存以及PCI網(wǎng)卡的分配,過程如下:
[0038]處理器資源的分配
[0039]根據(jù)Intel的多處理器規(guī)范,系統(tǒng)通過在指定的內(nèi)存區(qū)域檢測多處理器表可以完成可用處理核心信息的探測;在啟動guest hypervisor之前,host hypervisor的處理器管理模塊在分配給guest hypervisor的內(nèi)存空間中偽造一份多處理器表,該表只包含了系統(tǒng)部分可用處理器核心的相關(guān)信息。Guest hypervisor根據(jù)探測到的多處理器表可以得到可用處理器的本地APIC物理ID,并通過INIT處理器間中斷來完成多處理器的啟動。為了保證處理器間的隔離性,host hypervisor需要對處理器間中斷(IPI)進行攔截,并將IPI以物理目標模式(Physical destination mode)進行轉(zhuǎn)發(fā)。
[0040]內(nèi)存地址空間的分配
[0041]Host hypervisor通過模擬引導程序來加載guest hypervisor執(zhí)行,并通過 Multiboot 啟動信息來控制 guest hypervisor 的啟動。Host hypervisor 在 guesthypervisor的內(nèi)存空間中間偽造E820映射表來完成內(nèi)存地址空間分配,并將該E820映射表的起始地址存放在Multiboot啟動信息的相關(guān)選項中;通過這種方式,guesthypervisor就能根據(jù)Multiboot啟動信息來獲取偽造的E820映射表。同時,為了避免guest hypervisor利用實模式下的BIOS調(diào)用函數(shù)來獲取整個系統(tǒng)的物理內(nèi)存地址空間信息,host hypervisor設(shè)定相關(guān)啟動參數(shù)來控制guest hypervisor跳過實模式啟動過程。為了保證guest hypervisor間物理地址空間的隔離性,host hypervisor使用嵌套頁表或者擴展頁表來完成guest hypervisor物理地址到機器物理地址的轉(zhuǎn)換。
[0042]PCI網(wǎng)卡的分配
[0043]Host hypervisor攔截所有的PCI設(shè)備配置空間訪問請求以控制不同PCI網(wǎng)卡的可見性,從而完成PCI網(wǎng)卡的分配。當guest hypervisor對某個PCI設(shè)備的配置空間進行掃描時,如果 host hypervisor 沒有分配該設(shè)備給 guest hypervisor, host hypervisor 直接返回錯誤信息,表明該設(shè)備不存在;否則,將該配置空間訪問請求轉(zhuǎn)發(fā)到相應的PCI設(shè)備上,由該設(shè)備向guest hypervisor返回相關(guān)的配置信息。host hypervisor使用IOMMU來保證設(shè)備訪存和中斷的隔離性;其中,1/0頁表完成設(shè)備訪存地址的檢查和轉(zhuǎn)換,中斷映射表將設(shè)備中斷以物理目標模式進行轉(zhuǎn)發(fā)。[0044]圖3是本發(fā)明中PCI網(wǎng)卡分配流程圖
[0045]下面結(jié)合附圖對本發(fā)明作進一步說明。
[0046]PCI 規(guī)范提供了 C0NFIG_ADDR(0xCF8)和 C0NFIG_DATA (OxCFC)兩個 I/O 端口,C0NFIG_ADDR指定配置空間的地址,C0NFIG_DATA返回C0NFIG_ADDR指定的配置信息;系統(tǒng)控制程序或者驅(qū)動程序可以利用這兩個端口完成PCI設(shè)備配置空間的訪問。
[0047]C0NFIG_ADDR由設(shè)備的PCI ID和配置空間偏移構(gòu)成。Guest hypervisor所看到的PCI設(shè)備ID為虛擬ID, Host hypervisor在guest hypervisor掃描PCI設(shè)備配置空間的過程中需要將虛擬ID轉(zhuǎn)換成PCI設(shè)備的物理ID。為了控制不同PCI網(wǎng)卡的可見性,host hypervisor攔截所有與C0NFIG_ADDR和C0NFIG_DATA端口有關(guān)的讀寫操作;當guesthypervisor使用這兩個端口時,處理器會陷入到運行在host模式中的host hypervisor。
[0048]PCI網(wǎng)卡的分配過程如下:
[0049]I) guest hypervisor中的PCI設(shè)備掃描程序向C0NFIG_ADDR端口設(shè)定所要讀寫的配置空間地址時,guest hypervisor 陷入 host hypervisor。
[0050]2)host hypervisor 根據(jù)C0NFIG_ADDR來判定 guest hypervisor 正在掃描的設(shè)備,如果將該設(shè)備分配給guest hypervisor,則跳到4)。
[0051]3) host hypervisor 退出到 guest hypervisor, guest hypervisor 在下一條指令繼續(xù)執(zhí)行。
[0052]4) host hypervisor將C0NFIG_ADDR中的虛擬PCI ID轉(zhuǎn)換成物理ID,并構(gòu)建新的C0NFIG_ADDR’,跳到步驟 3)。
[0053]5) guest hypervisor 中的 PCI 設(shè)備掃描程序從 C0NFIG_DATA 讀取 C0NFIG_ADDR 指定的配置信息,此時處理器由guest模式陷入host模式。
[0054]6)如果C0NFIG_ADDR指定的設(shè)備沒有分配給guest hypervisor,則返回FFFFFFFFh表明該設(shè)備不存在,然后跳到3);否則跳到7)。
[0055]7)host hypervisor根據(jù)步驟4)構(gòu)建的C0NFIG_ADDR’來讀取對應設(shè)備的配置信息,并返回給guest hypervisor,然后跳轉(zhuǎn)到3)。
[0056]以上內(nèi)容僅為說明本發(fā)明的技術(shù)思想,不能以此限定本發(fā)明的保護范圍,凡是按照本發(fā)明提出的技術(shù)思想,在技術(shù)方案基礎(chǔ)上所做的任何改動,均落入本發(fā)明權(quán)利要求書的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法,其特征在于,包括以下步驟: 1)系統(tǒng)啟動: 引導程序首先加載host hypervisor運行,host hypervisor通過模擬引導程序加載guest hypervisor啟動;host hypervisor對可用物理資源進行劃分,每一個guesthypervisor都穿透地運行在獨立的處理器、內(nèi)存和PCI網(wǎng)卡上,guest hypervisor之間沒有資源共享; 2)處理器信息的獲取: 通過ACPI提供的SRAT相關(guān)資源親和度表確定系統(tǒng)中的NUMA拓撲信息;探測多處理器表來獲取機器中可用的處理器信息; 3)外設(shè)信息的獲取: 通過BIOS int0xl5(EAX = 0xe820)來獲取機器的地址空間信息;通過掃描整個PCI設(shè)備的配置空間確定系統(tǒng)中可用的PCI網(wǎng)卡信息;分別通過偽造多處理器表和E820映射表來完成處理器和地址空間在不同guest hypervisor的分配,并利用硬件輔助虛擬化技術(shù)提供的嵌套頁表或擴展頁表來完成地址空間的隔離。
2.根據(jù)權(quán)利要求1所述的基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法,其特征在于:所述的步驟I)中,host hypervisor運行在處理器的host模式,而guesthypervisor則在guest模式下運行。
3.根據(jù)權(quán)利要求1或2所述的基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法,其特征在于:所述的步驟3)中,PCI網(wǎng)卡的分配方式: host hypervisor通過攔截PCI配置空間的訪問來控制PCI網(wǎng)卡對不同guesthypervisor 可見性。
4.根據(jù)權(quán)利要求1或2所述的基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法,其特征在于:所述的步驟3)中,host hypervisor將所有的處理器間中斷都以物理目標模式發(fā)送,以保證處理器之間的隔離性,所有處理器間中斷的發(fā)射都需要host hypervisor的轉(zhuǎn)發(fā)。
5.根據(jù)權(quán)利要求1或2所述的基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法,其特征在于:所述的步驟3)中,host hypervisor利用IOMMU中的I/O頁表對PCI網(wǎng)卡的內(nèi)存訪問地址進行檢查和轉(zhuǎn)換,以保證不同guest hypervisor的PCI網(wǎng)卡在進行訪問內(nèi)存過程中的地址空間隔離性。
6.根據(jù)權(quán)利要求1或2所述的基于物理資源穿透機制的輕量級嵌套虛擬化實現(xiàn)方法,其特征在于:所述的步驟3)中,host hypervisor通過配置IOMMU中的消息中斷映射表來完成中斷的轉(zhuǎn)發(fā),以確保設(shè)備中斷的隔離性,轉(zhuǎn)發(fā)后的中斷都以物理模式發(fā)射到目標處理器。
【文檔編號】G06F9/445GK103995733SQ201410228220
【公開日】2014年8月20日 申請日期:2014年5月27日 優(yōu)先權(quán)日:2014年5月27日
【發(fā)明者】齊勇, 宣宇, 戴月華, 任建寶, 徐作新 申請人:西安交通大學