嵌入式虛擬機(jī)管理器Xvisor對(duì)比分析
時(shí)間:2023-07-14 03:39:01 | 來源:網(wǎng)站運(yùn)營
時(shí)間:2023-07-14 03:39:01 來源:網(wǎng)站運(yùn)營
嵌入式虛擬機(jī)管理器Xvisor對(duì)比分析:虛擬化(Virtualization)這種起源于上世紀(jì)60年代IBM大型機(jī)系統(tǒng)的技術(shù)在處理器性能大幅度提升的當(dāng)下,再次迅速發(fā)展起來,并從最初的的
裸機(jī)虛擬化(Type-I虛擬化)技術(shù)開始,演化出主機(jī)虛擬化(Type-II虛擬化)、
混合虛擬化(Hybrid虛擬化)等更復(fù)雜的虛擬化模型,并在此基礎(chǔ)山發(fā)展出了當(dāng)下最熱門的云計(jì)算技術(shù),極大地降低了IT成本,增強(qiáng)了系統(tǒng)的安全性,可靠性和擴(kuò)展性。
嵌入式系統(tǒng)則是虛擬化技術(shù)在嵌入式領(lǐng)域的應(yīng)用。文中的Xvisor正是一款開源的采用
裸機(jī)虛擬化技術(shù)的輕量級(jí)嵌入式Hypervisor,具有良好的代碼架構(gòu)和和可移植性,支持ARM和X86處理器的
半虛擬化和
基于硬件的全虛擬化技術(shù)。
文中圍繞嵌入式Hypervisor的5個(gè)核心部分 - 客戶機(jī)IO事件模擬、主機(jī)中斷、 鎖同步延遲、內(nèi)存管理和內(nèi)存占用,基于當(dāng)下最流行的ARM處理器架構(gòu),進(jìn)行了深入的闡述和對(duì)比。
本文翻譯自Embedded Hypervisor Xvisor: A Comparative Analysis。譯者在翻譯時(shí)盡量逐詞翻譯,但是某些語句為了更清楚的表述根據(jù)譯者的理解進(jìn)行了轉(zhuǎn)述。若有不妥,請(qǐng)參考原文。
- 摘要
- 1. 介紹
- 2. 虛擬化技術(shù)分類
- 2.1 Hypervisor設(shè)計(jì)
- 2.2 虛擬化模式
- 3. 嵌入式系統(tǒng)的開源Hypervisor
- 4. 客戶機(jī)IO事件模擬
- 4.1 Xen ARM
- 4.2 KVM ARM
- 4.3 Xvisor ARM
- 5. 主機(jī)中斷
- 5.1 Xen ARM
- 5.2 KVM ARM
- 5.3 Xvisor ARM
- 6. 鎖同步延遲
- 7. 內(nèi)存管理
- 7.1 Xen ARM
- 7.2 KVM ARM
- 7.3 Xvisor ARM
- 8. 內(nèi)存占用比較
- 9. 基準(zhǔn)測(cè)試程序
- 9.1 Dhrystone
- 9.2 Cachebench
- 9.3 Stream
- 9.4 Hackbench
- 10. 實(shí)驗(yàn)
- 11. 結(jié)論
- 參考文獻(xiàn)
摘要
由于與減少費(fèi)用、提高資源利用率和更高的性能直接相關(guān),虛擬化技術(shù)已經(jīng)在嵌入式系統(tǒng)中廣泛流行。為了在嵌入式系統(tǒng)的嚴(yán)格時(shí)間約束和低內(nèi)存占用的虛擬化環(huán)境中獲得高效的性能,我們需要高效的Hypervisor(虛擬機(jī)管理器)。雖然現(xiàn)在已經(jīng)有了一些開源的Hypervisor,例如Xen,Linux KVM和OKL4 Microvisor,這仍然是第一篇介紹開源嵌入式虛擬機(jī)管理器Xvisor(eXtensible Versatile hypervisor),并從對(duì)整個(gè)系統(tǒng)性能的影響上,與兩個(gè)常用虛擬機(jī)管理器KVM和Xen進(jìn)行對(duì)比的論文。實(shí)驗(yàn)證明,在ARM處理器架構(gòu)上,Xvisor具有更低的CPU開銷,更高的內(nèi)存帶寬,更低的鎖同步延遲和虛擬定時(shí)器中斷開銷,并且能夠全面提升嵌入式系統(tǒng)性能。
關(guān)鍵詞:嵌入式系統(tǒng); 虛擬化; Xen, Linux KVM; Xvisor;ARM;Hypervisor(虛擬機(jī)管理器);
1. 介紹
近年來,多核嵌入式系統(tǒng)需求的增長已經(jīng)開始引領(lǐng)虛擬化技術(shù)在嵌入式系統(tǒng)中的研究。嵌入式系統(tǒng)通常具有資源有限,實(shí)時(shí)性約束,高性能要求,增長的應(yīng)用程序棧需求(必須使用有限外設(shè))等特點(diǎn)[參考文獻(xiàn)1]。
虛擬化技術(shù)提供了在單核或多核處理器上以虛擬機(jī)(VM或客戶機(jī))方式運(yùn)行多個(gè)操作系統(tǒng)的方法。每個(gè)客戶機(jī)運(yùn)行在一個(gè)或多個(gè)虛擬處理單元(vCPU)上。進(jìn)而,一個(gè)客戶機(jī)的所有vCPU(虛擬CPU)同另外一個(gè)客戶機(jī)的vCPU完全隔離,但是共享同一套外設(shè)。
因此,虛擬化的應(yīng)用提供了如下優(yōu)勢(shì)[參考文獻(xiàn)2]:
- 過去運(yùn)行在不同設(shè)備上的服務(wù)現(xiàn)在可以作為多個(gè)VM運(yùn)行在同一個(gè)設(shè)備上;
- 在同一個(gè)設(shè)備上合并操作系統(tǒng)的實(shí)時(shí)特性和通用目的特性,即在不同的VM中執(zhí)行實(shí)時(shí)程序和通用程序[參考文獻(xiàn)3];
- 更好的容錯(cuò)性;
- 提供高可靠應(yīng)用間的隔離性。
同樣的,嵌入式虛擬化已經(jīng)有在如下方面有力的證明了它的能力:
- 摩托羅拉Evoke,第一個(gè)虛擬化手機(jī)[參考文獻(xiàn)4];
- 工業(yè)自動(dòng)化,虛擬化允許添加額外的應(yīng)用而不需要增加更多的處理單元[參考文獻(xiàn)5];
- 汽車可以通過在若干個(gè)互相隔離的VM(虛擬機(jī))上分別運(yùn)行娛樂信息操作系統(tǒng)、AUTOSAR(汽車開放系統(tǒng)架構(gòu))操作系統(tǒng)和RTOS(實(shí)時(shí)操作系統(tǒng)),從而使得多個(gè)服務(wù)可以在同一套硬件上運(yùn)行[參考文獻(xiàn)6];
- 其他用戶案例,例如零售和博彩行業(yè)。
基于下面的考慮,文中的分析性研究將新的嵌入式Hypervisor - Xvisor與2個(gè)現(xiàn)存的嵌入式開源Hypervisor - KVM/Xen進(jìn)行對(duì)比:
- 本次研究基于ARM架構(gòu)。這是由于最新的ARM處理器架構(gòu)已經(jīng)提供了硬件虛擬化擴(kuò)展,并且ARM處理器在嵌入式系統(tǒng)中已經(jīng)得到了廣泛應(yīng)用。另外,這3個(gè)Hypervisor共有的的大部分板級(jí)支持包(BSP)都使用了ARM架構(gòu)處理器。
- KVM和Xen被選中作為對(duì)比的虛擬機(jī)管理器,是基于如下原因:
- ARM架構(gòu)支持[參考文獻(xiàn)7,8];
- 允許我們沒有任何限制的收集性能數(shù)據(jù)的開源特性[參考文獻(xiàn)9];
- 與Xvisor支持同樣的單板;
- 在嵌入式系統(tǒng)中得到了應(yīng)用。
- 實(shí)驗(yàn)使用小型基準(zhǔn)測(cè)試工具在客戶機(jī)上進(jìn)行測(cè)試。這些測(cè)試工具測(cè)試內(nèi)存訪問,Cache(高速緩存)訪問,整形操作,任務(wù)處理等。這些操作上的性能增強(qiáng)能夠提升系統(tǒng)的整體性能,不像是那些專注于測(cè)試某種特殊工作負(fù)荷(例如Web服務(wù)器,內(nèi)核編譯,圖形渲染等)的宏基準(zhǔn)測(cè)試工具。
- 實(shí)驗(yàn)僅使用通用目的操作系統(tǒng)(GPOS)Linux作為客戶機(jī)。因?yàn)椋@是唯一可被這3種Hypervisor支持的客戶機(jī)操作系統(tǒng)。目前沒有一個(gè)通用的實(shí)時(shí)操作系統(tǒng)可以同時(shí)為這3種ypervisor所支持。因此時(shí)間約束測(cè)試將通過如下因素的吞吐量測(cè)試來實(shí)施:
- Hypervisor的低內(nèi)存和CPU開銷;
- Hypervisor最小負(fù)荷情況下的客戶機(jī)調(diào)度效率。
Xen,KVM和Xvisor實(shí)現(xiàn)的說明和限制的討論如下所示:
- 本文第2章解釋了虛擬化技術(shù)的分類;
- 本文第3章介紹了Xvisor并提供一個(gè)開源虛擬機(jī)管理器Xen和KVM的概況。影響到對(duì)比因素的主要組件的實(shí)現(xiàn)細(xì)節(jié)的解釋在后續(xù)章節(jié)中會(huì)被顯著說明。后續(xù)章節(jié)將包括一個(gè)基于ARM處理器架構(gòu)的上述3種Hypervisor的對(duì)比分析[參考文獻(xiàn)10]。
- 我們?cè)诘?講述客戶機(jī)IO模擬,而在第5,6,7,8章講述主機(jī)中斷處理,鎖同步機(jī)制,內(nèi)存管理和內(nèi)存占用。
- 我們分析測(cè)試時(shí)用到的應(yīng)用程序基準(zhǔn)測(cè)試程序的簡(jiǎn)單說明放在第9章,測(cè)試結(jié)果放在隨后的第10章,而結(jié)論則放在文末。
2. 虛擬化技術(shù)分類
基于如下兩個(gè)特征[參考文獻(xiàn)11],我們把虛擬化技術(shù)劃分為5類:
- Hypervisor設(shè)計(jì);
- 圖1所示的虛擬化模式。
相應(yīng)的,虛擬化技術(shù)分類在通過客戶機(jī)獲取的性能測(cè)量中扮演著重要角色。
2.1 Hypervisor設(shè)計(jì)
Hypervisor的角色是硬件和虛擬機(jī)之間的接口。這些Hypervisor的實(shí)現(xiàn)風(fēng)格決定了他們作為虛擬化管理器的操作效率。給予他們的實(shí)現(xiàn),所有Hypervisor都屬于下面3種設(shè)計(jì)分類之一:
- 完全宏內(nèi)核設(shè)計(jì)
完全宏內(nèi)核Hypervisor使用一個(gè)單一的軟件層來負(fù)責(zé)主機(jī)硬件訪問,CPU虛擬化和客戶機(jī)IO模擬。例如Xvisor和VMware ESXi Server[參考文獻(xiàn)12]。 - 部分宏內(nèi)核設(shè)計(jì)
部分宏內(nèi)核Hypervisor通常是一個(gè)通用目的宏內(nèi)核操作系統(tǒng)(例如Linux,F(xiàn)reeBSD,NETBSD,Windows等)的擴(kuò)展。他們?cè)诓僮飨到y(tǒng)內(nèi)核支持主機(jī)硬件訪問和CPU虛擬化,并通過用戶空間軟件支持客戶機(jī)IO模擬。例如Linux KVM和VMware Workstation[參考文獻(xiàn)13]。 - 微內(nèi)核設(shè)計(jì)
微內(nèi)核Hypervisor通常是在Hypervisor內(nèi)核種提供基本的主機(jī)硬件訪問和CPU虛擬化功能的輕量級(jí)微內(nèi)核。它們依賴于一個(gè)管理VM來支持整個(gè)主機(jī)的硬件訪問,客戶機(jī)IO模擬和其他服務(wù)。這些微內(nèi)核Hypervisor中的一些在一個(gè)分離的驅(qū)動(dòng)VM上運(yùn)行每一個(gè)主機(jī)設(shè)備驅(qū)動(dòng)程序而不是在通用管理VM上運(yùn)行。例如Xen,微軟Hyper-V[參考文獻(xiàn)14],OKL4 Microvisor[參考文獻(xiàn)15]和INTEGRITY Multivisor[參考文獻(xiàn)16]。
2.2 虛擬化模式
虛擬化模式?jīng)Q定了能夠在Hypervisor上運(yùn)行的客戶機(jī)的類型[參考文獻(xiàn)17,18]:
- 全虛擬化
通過提供系統(tǒng)虛擬機(jī)(例如模擬類似于真實(shí)硬件的整個(gè)系統(tǒng)),允許未經(jīng)修改的客戶機(jī)操作系統(tǒng)作為客戶機(jī)運(yùn)行。(譯者注:該模式需要借助硬件的虛擬化支持,例如X86架構(gòu)AMD-V/Intel VT,ARMv8和Power架構(gòu)的虛擬化profile等。) - 半虛擬化
通過提供Hypercall(虛擬機(jī)調(diào)用接口),允許修改過的的客戶機(jī)操作系統(tǒng)作為客戶機(jī)運(yùn)行。這個(gè)模式要求客戶機(jī)使用Hypercall來進(jìn)行各種IO操作(例如,網(wǎng)絡(luò)收發(fā),塊讀寫,終端讀寫等等)和在某些時(shí)候執(zhí)行某些關(guān)鍵指令。這些Hypercall會(huì)觸發(fā)一個(gè)trap(陷阱)中斷以進(jìn)入Hypervisor。這些trap中斷基于Hypercall參數(shù),使得Hypervisor為客戶機(jī)提供期待的服務(wù)。
3. 嵌入式系統(tǒng)的開源Hypervisor
下面是兩個(gè)開源虛擬機(jī)管理器Xen和KVM的一個(gè)簡(jiǎn)單介紹,用于在Hypervisor研究中跟Xvisor進(jìn)行對(duì)照。
由于我們研究中對(duì)性能比較的關(guān)系,我們講述了這些Hypervisor中已知的招致客戶機(jī)運(yùn)行并由此影響整個(gè)虛擬化嵌入式系統(tǒng)性能的系統(tǒng)組件的實(shí)現(xiàn)細(xì)節(jié)。這包括每個(gè)Hypervisor如何處理CPU虛擬化,客戶機(jī)IO模擬和主機(jī)硬件訪問。另外,每個(gè)Hypervisor的某些主要優(yōu)勢(shì)也會(huì)被提及。
2.1 XEN
如圖2所示,Xen Hypervisor是一個(gè)
支持全虛擬化和半虛擬化客戶機(jī)的微內(nèi)核Hypervisor。Xen Hypervisor內(nèi)核是一個(gè)
輕量級(jí)微內(nèi)核,提供:
- CPU虛擬化;
- MMU虛擬化:
- 虛擬中斷處理;
- 客戶機(jī)間通訊[參考文獻(xiàn)19]。
Domain(域)是Xen內(nèi)核相應(yīng)于虛擬機(jī)或客戶機(jī)的概念。
Domain0(
Dom0)是一個(gè)特殊類型的域,運(yùn)行著一個(gè)Linux內(nèi)核的修改版本。Dommain0必須運(yùn)行在一個(gè)比任何其他VM或客戶機(jī)更高的優(yōu)先級(jí)上,并且具有對(duì)主機(jī)硬件的完全訪問權(quán)限。Dom0的主要目的是利用Linux內(nèi)核提供IO虛擬化和客戶機(jī)管理服務(wù)。
DomainU(
DomU)相應(yīng)于運(yùn)行著一個(gè)客戶機(jī)操作系統(tǒng)的客戶虛擬機(jī)??蛻魴C(jī)的IO事件模擬和半虛擬化通過DomU和Dom0之間的通訊來實(shí)現(xiàn)。這一目的通過使用Xen事件通道來完成。半虛擬化客戶機(jī),相應(yīng)于DomU PVM,使用Xen事件通道來訪問Dom0半虛擬化IO服務(wù)??墒?,全虛擬化客戶機(jī),相應(yīng)于DomU HVM,使用運(yùn)行在Dom0用戶空間中的QEMU來模擬客戶機(jī)IO事件。
所有用來管理客戶機(jī)或域的用戶接口都通過運(yùn)行在Dom0用戶控件的Xen工具棧來完成。沒有Dom0,Xen不能提供DomU PVM或者DomU HVM。
Xen最重要的優(yōu)勢(shì)是使用Linux內(nèi)核作為Dom0,因?yàn)檫@能幫助Xen重用Linux內(nèi)核現(xiàn)有的設(shè)備驅(qū)動(dòng)和其他部分??墒?,這個(gè)優(yōu)勢(shì)帶來了后面章節(jié)將會(huì)提到的額外代價(jià)。也就是說,作為Dom0運(yùn)行的Linux內(nèi)核比直接運(yùn)行在真實(shí)硬件上(沒有Xen)稍微慢了一點(diǎn)。這是因?yàn)?,Dom0只是Xen的另一個(gè)域,有它自己的嵌套頁表,并且可能被Xen調(diào)度器調(diào)度出去。
2.2 KVM
KVM(基于內(nèi)核的虛擬機(jī))是一個(gè)
支持全虛擬化和半虛擬化技術(shù)的部分宏內(nèi)核Hypervisor。KVM主要提供全虛擬化客戶機(jī),并以可選的VirtIO設(shè)備[參考文獻(xiàn)20]的形式提供半虛擬化支持。
KVM擴(kuò)展Linux內(nèi)核的執(zhí)行模式以允許Linux作為一個(gè)Hypervisor來工作。除了已有的2種執(zhí)行模式(內(nèi)核模式和用戶模式),客戶機(jī)模式被作為一種新的模式添加到Linux內(nèi)核中。這種方式允許客戶機(jī)操作系統(tǒng)與主機(jī)操作系統(tǒng)運(yùn)行在相同的執(zhí)行模式下(除了某些特殊指令和寄存器訪問),并且IO訪問將陷入到主機(jī)Linux內(nèi)核。主機(jī)Linux內(nèi)核將把一個(gè)虛擬機(jī)視作一個(gè)QEMU進(jìn)程。KVM只能在主機(jī)內(nèi)核上虛擬化CPU,并且依賴于運(yùn)行在用戶控件的QEMU來處理客戶機(jī)IO事件的模擬和半虛擬化。
如圖2所示,KVM包含2個(gè)主要組件:
- 內(nèi)核空間字符設(shè)備驅(qū)動(dòng),通過一個(gè)字符設(shè)備文件/dev/kvm提供CPU虛擬化服務(wù)和內(nèi)存虛擬化服務(wù);
- 提供客戶機(jī)硬件模擬的用戶空間模擬器(通常是QEMU)。
與這兩個(gè)組件之間的服務(wù)請(qǐng)求通訊,例如虛擬機(jī)和vCPU的創(chuàng)建,通常通過/dev/kvm設(shè)備文件的IOCTRL操作來處理。
KVM最重要的
優(yōu)勢(shì)(類似于Xen)是使用Linux內(nèi)核作為主機(jī)內(nèi)核。這樣有助于KVM重用Linux內(nèi)核現(xiàn)有的設(shè)備驅(qū)動(dòng)和其他部分。然而,由于KVM依賴于嵌套頁表故障機(jī)制的客戶機(jī)模式到主機(jī)模式的虛擬機(jī)切換,特殊指令陷阱(Trap),主機(jī)中斷,客戶機(jī)IO事件,和另一個(gè)從主機(jī)模式喚醒客戶機(jī)執(zhí)行的虛擬機(jī)切換,這個(gè)優(yōu)勢(shì)也導(dǎo)致了KVM整體性能本質(zhì)上的降低。
2.3 Xvisor
圖4中的Xvisor是一個(gè)
支持全虛擬化和半虛擬化技術(shù)的完全宏內(nèi)核Hypervisor。它的目的是提供一個(gè)僅需少量系統(tǒng)開銷和很小內(nèi)存占用的在嵌入式系統(tǒng)中使用的輕量級(jí)Hypervisor。Xvisor主要提供全虛擬化客戶機(jī),并以VirtIO設(shè)備[參考文獻(xiàn)20]的形式提供半虛擬化支持。
Xvisor的所有核心組件,例如CPU虛擬化,客戶機(jī)IO模擬,后端線程,半虛擬化服務(wù),管理服務(wù)和設(shè)備驅(qū)動(dòng),都作為一個(gè)獨(dú)立的軟件層運(yùn)行,不需要任何必備的工具或者二進(jìn)制文件。
客戶機(jī)操作系統(tǒng)運(yùn)行在Xvisor上,具有更少的特權(quán);而Xvisor的實(shí)現(xiàn)負(fù)責(zé)調(diào)用標(biāo)準(zhǔn)vCPU。此外,所有設(shè)備驅(qū)動(dòng)和管理功能的后端處理運(yùn)行在不具有最高優(yōu)先級(jí)的孤兒vCPU(沒有分配給某個(gè)客戶機(jī)的vCPU)上??蛻魴C(jī)配置信息以設(shè)備樹(Device Tree)[參考文獻(xiàn)21]的形式維護(hù)。這種方式通過使用設(shè)備樹腳本(DTS),使得客戶機(jī)硬件信息的維護(hù)更加容易。換句話說,為嵌入式系統(tǒng)定制一個(gè)虛擬機(jī)時(shí)不需要修改代碼。
Xvisor最重要的優(yōu)勢(shì)是運(yùn)行在提供所有虛擬化相關(guān)服務(wù)的最高特權(quán)等級(jí)上的單一軟件層。不像KVM,Xvisor的上下文切換非常輕量級(jí)(參見第5章),因此嵌套頁表、特殊指令陷阱、主機(jī)中斷和客戶機(jī)IO事件等的處理也非??焖?。進(jìn)而,所有設(shè)備驅(qū)動(dòng)都作為Xvisor的一部分直接運(yùn)行,具有完全的特權(quán)并且沒有嵌套頁表,以確保不會(huì)出現(xiàn)性能退化。另外,Xvisor的vCPU調(diào)度器是基于單CPU的,不處理多核系統(tǒng)的負(fù)載均衡。在Xvisor中,多核系統(tǒng)的負(fù)載均衡器是一個(gè)分離的部分,獨(dú)立于vCPU調(diào)度器(不像KVM和XEN)。在Xvisor中,vCPU調(diào)度器和負(fù)載均衡器都是可擴(kuò)展的。
Xvisor唯一的限制是缺少Linux那樣豐富的單板和設(shè)備驅(qū)動(dòng)。為了處理這個(gè)限制,Xvisor提供了Linux兼容層頭文件以方便從Linux內(nèi)核移植設(shè)備驅(qū)動(dòng)框架和設(shè)備驅(qū)動(dòng)。盡管不能完全解決問題,移植成本也可以大幅度減少。
4. 客戶機(jī)IO事件模擬
嵌入式系統(tǒng)需要作為虛擬機(jī)(VM)或客戶機(jī)運(yùn)行傳統(tǒng)軟件。傳統(tǒng)嵌入式軟件可能期待需要Hypervisor模擬的特殊硬件。這就是為什么Hypervisor必須盡可能減小客戶機(jī)IO事件模擬的開銷。后面的小章節(jié)解釋了前面提及的Hypervisor在ARM處理器架構(gòu)上模擬的客戶機(jī)IO事件的生命周期。
注意,這非常重要。因?yàn)樵谶@些Hypervisor中,客戶機(jī)IO事件流在所有處理器架構(gòu)包括ARM上都是相同的。
4.1 Xen ARM
圖5展示了Xen ARM用于DomU HVM(全虛擬化客戶機(jī))的客戶機(jī)IO事件模擬的生命周期。從標(biāo)志1開始,一個(gè)客戶機(jī)IO事件被觸發(fā),然后使用標(biāo)志2和標(biāo)志3所示的Xen事件通道轉(zhuǎn)發(fā)到Dom0內(nèi)核。隨后,運(yùn)行在Dom0用戶空間的QEMU在標(biāo)志4模擬客戶機(jī)IO事件。最后在標(biāo)志5,控制返回到DomU。
圖中所示流程導(dǎo)致了一定數(shù)目的開銷。首先,盡管已經(jīng)進(jìn)行過優(yōu)化,基于域間通信的Xen事件通道還是具有非零開銷。其次,Dom0內(nèi)核到用戶空間和相反方向的上下文切換增加了客戶機(jī)IO事件模擬的開銷。
4.2 KVM ARM
圖6展示了客戶機(jī)IO事件模擬在KVM ARM上的處理流程。圖中場(chǎng)景開始在標(biāo)志1,即一個(gè)客戶機(jī)IO事件被觸發(fā)的時(shí)刻??蛻魴C(jī)IO事件引起一個(gè)VM-Exit事件,引起KVM從客戶機(jī)模式切換到主機(jī)模式。然后,如標(biāo)志2和3所示,客戶機(jī)IO事件被運(yùn)行在用戶空間的QEMU處理。最后,在標(biāo)志4處,VM-enter發(fā)生,引起KVM從主機(jī)模式切換到客戶機(jī)模式。
處理開銷主要由VM-exit和Vm-ente上下文切換引起,而這正是KVM眾所周知的嚴(yán)重開銷。
4.3 Xvisor ARM
不像其他Hypervisor,Xvisor ARM在客戶機(jī)IO事件模擬上不會(huì)引發(fā)額外的調(diào)度或者上下文切換的開銷。如圖7所示,流程開始在標(biāo)志1,一個(gè)客戶機(jī)IO事件被Xvisor ARM捕獲時(shí)。隨后,事件在標(biāo)志2處的不可睡眠的通用上下文中被處理以確保時(shí)間被處理,并具有預(yù)期的開銷。
5. 主機(jī)中斷
嵌入式系統(tǒng)在處理主機(jī)中斷時(shí),必須遵守嚴(yán)格的時(shí)間約束。在虛擬化環(huán)境中,Hypervisor在處理主機(jī)中斷時(shí)可能會(huì)有額外的開銷,轉(zhuǎn)而影響主機(jī)IO性能。
請(qǐng)重點(diǎn)注意,文中所述的Hypervisor的主機(jī)中斷處理流程對(duì)所有處理器架構(gòu)包括ARM都是相同的。
5.1 Xen ARM
在Xen中,主機(jī)設(shè)備驅(qū)動(dòng)作為Dom0 Linux內(nèi)核的一部分運(yùn)行。因此所有主機(jī)中斷都被轉(zhuǎn)發(fā)到Dom0。如圖8所示,流程開始在標(biāo)志1,一個(gè)主機(jī)IRQ(中斷請(qǐng)求)被觸發(fā),然后在標(biāo)志2處被轉(zhuǎn)發(fā)到Dom0。如圖中標(biāo)志3和4所示,所有主機(jī)中斷由Dom0處理。如果一個(gè)主機(jī)中斷在DomU運(yùn)行時(shí)被觸發(fā),那么它將在Dom0被調(diào)度進(jìn)來后才能得到處理,因此主機(jī)中斷處理引發(fā)了調(diào)度開銷。
5.2 KVM ARM
圖9所示為KVM ARM上客戶機(jī)正在運(yùn)行時(shí)的主機(jī)中斷處理流程[參考文獻(xiàn)22]。如圖中標(biāo)志1所示,每個(gè)主機(jī)中斷觸發(fā)一個(gè)VM-exit。一旦中斷如圖中標(biāo)志2和3所示,被主機(jī)內(nèi)核處理,KVM通過標(biāo)志4處的VM-entry恢復(fù)客戶機(jī)。當(dāng)某個(gè)KVM客戶機(jī)處于運(yùn)行狀態(tài)時(shí),VM-exit和VM-entry增加了相當(dāng)大的主機(jī)中斷處理開銷。進(jìn)而,如果主機(jī)中斷被轉(zhuǎn)發(fā)到KVM客戶機(jī),那么調(diào)度開銷也會(huì)存在。
5.3 Xvisor ARM
Xvisor的主機(jī)設(shè)備驅(qū)動(dòng)通常作為Xvisor的一部分以最高權(quán)限運(yùn)行。因此,圖10中,處理主機(jī)中斷時(shí)是不需要引發(fā)調(diào)度和上下文切換開銷的。只有當(dāng)主機(jī)中斷被轉(zhuǎn)發(fā)到一個(gè)當(dāng)前沒有運(yùn)行的客戶機(jī)時(shí),才會(huì)引發(fā)調(diào)度開銷。
6. 鎖同步延遲
在虛擬化環(huán)境中,鎖同步延遲問題是[參考文獻(xiàn)23]中提到的一個(gè)眾所周知的問題。這個(gè)問題因如下2個(gè)調(diào)度器的存在而產(chǎn)生:
- Hypervisor調(diào)度器
- 客戶機(jī)OS調(diào)度器
這里,兩個(gè)調(diào)度器互相意識(shí)不到對(duì)方,導(dǎo)致客戶機(jī)vCPU被Hypervisor隨意搶占。我們給出了一個(gè)關(guān)于這種延遲和所有3個(gè)Hypervisor如何處理它們的一個(gè)簡(jiǎn)要介紹。
同一個(gè)客戶機(jī)中vCPU之間鎖同步的低效處理導(dǎo)致了圖11和12中顯示的兩個(gè)不確定場(chǎng)景:vCPU搶占和vCPU堆積問題。兩種問題都可能導(dǎo)致在獲取同一個(gè)客戶機(jī)的vCPU鎖時(shí)增加等待時(shí)間。
當(dāng)一個(gè)運(yùn)行在持有鎖的某主機(jī)CPU(pCPU0)上的vCPU(vCPU0)被搶占,而同時(shí)另一個(gè)運(yùn)行在其他主機(jī)CPU(pCPU1)上的vCPU(vCPU1)正在等待這個(gè)鎖,那么vCPU搶占問題就會(huì)發(fā)生。另外,發(fā)生在一個(gè)運(yùn)行著多個(gè)vCPU的單主機(jī)CPU上的鎖調(diào)度沖突問題也會(huì)導(dǎo)致vCPU堆積問題發(fā)生。也就是說,希望獲取某個(gè)鎖的vCPU(vCPU1)搶占了運(yùn)行在同一個(gè)主機(jī)CPU上的vCPU(vCPU0),但是vCPU0正在持有這個(gè)鎖。
在ARM機(jī)構(gòu)上,操作系統(tǒng)典型的使用WFE(等待事件)指令來等待請(qǐng)求一個(gè)鎖,并使用SEV(發(fā)送事件)指令來釋放一個(gè)鎖。ARM架構(gòu)允許WFE指令被Hypervisor捕獲,但是SEV指令不能被捕獲。為了解決vCPU堆積問題,所有3種Hypervisor(Xen ARM,KVM ARM和Xvisor ARM)都使用捕獲WFE指令的方法使得vCPU讓出時(shí)間片。ARM架構(gòu)的vCPU搶占問題能夠通過使用半虛擬化鎖的方式來解決,但是需要對(duì)客戶機(jī)操作系統(tǒng)進(jìn)行源碼級(jí)的修改。
7. 內(nèi)存管理
嵌入式系統(tǒng)要求有效的內(nèi)存處理。對(duì)于嵌入式Hypervisor來說,內(nèi)存管理的開銷需要慎重考慮。ARM架構(gòu)提供2級(jí)翻譯表(或者說嵌套頁表),用于客戶機(jī)內(nèi)存虛擬化,即圖13所示的2階段MMU??蛻魴C(jī)操作系統(tǒng)負(fù)責(zé)編程第1階段頁表,將客戶機(jī)虛擬地址(GVA)翻譯到間接物理地址(IPA)。ARM Hypervisor負(fù)責(zé)編程第2階段頁表來從將間接物理地址(IPA)翻譯成實(shí)際物理地址(PA)。
TLB-miss(Translation Look-aside Buffers miss,即頁表緩沖缺失)時(shí)必須檢索翻譯表。這個(gè)過程中使用的第2階段頁表的級(jí)數(shù)影響內(nèi)存帶寬和虛擬化系統(tǒng)的整體性能。比如最糟糕的情況下,N級(jí)第1階段翻譯表和M級(jí)第2階段翻譯表需要NxM次內(nèi)存訪問。對(duì)任何虛擬化系統(tǒng)上的客戶機(jī)來說,TLB-miss損失都是非常昂貴的。為了減少2階段MMU中的TLB-miss損失,ARM Hypervisor在第2階段創(chuàng)建更大的頁。
7.1 Xen ARM
Xen ARM為每個(gè)客戶機(jī)或域(Dom0或DomU)創(chuàng)建一個(gè)獨(dú)立的3級(jí)第2階段翻譯表。Xen ARM能創(chuàng)建4K字節(jié),2M字節(jié)或1G字節(jié)的第2階段翻譯表項(xiàng)。Xen ARM也按需分配客戶機(jī)內(nèi)存,并試圖基于IPA和PA對(duì)齊構(gòu)造盡可能最大的第2階段翻譯表項(xiàng)。
7.2 KVM ARM
KVM用戶空間工具(QEMU)預(yù)先分配作為客戶機(jī)RAM使用的用戶空間內(nèi)存,并向KVM內(nèi)核模塊通知其位置。KVM內(nèi)核模塊為每個(gè)客戶機(jī)vCPU創(chuàng)建一個(gè)獨(dú)立的3級(jí)第2階段翻譯表。典型的,KVM ARM將創(chuàng)建4K字節(jié)大小的第2階段翻譯表項(xiàng),但是也能夠使用巨大化TLB優(yōu)化模式創(chuàng)建2M字節(jié)大小的第2階段翻譯表項(xiàng)。
7.3 Xvisor ARM
Xvisor ARM在客戶機(jī)創(chuàng)建時(shí),預(yù)先分配連續(xù)的主機(jī)內(nèi)存以做為客戶機(jī)RAM。它為每個(gè)客戶機(jī)創(chuàng)建一個(gè)獨(dú)立的3級(jí)第2階段翻譯表。Xvisor ARM能創(chuàng)建4K字節(jié),2M字節(jié)或1G字節(jié)的第2階段翻譯表項(xiàng)。另外,Xvisor ARM總是基于IPA和PA對(duì)齊創(chuàng)建盡可能最大的第2階段翻譯表項(xiàng)。最后,客戶機(jī)RAM是扁平化和連續(xù)的(不像其它Hypervisor)。這有助于緩存預(yù)取訪問,從而進(jìn)一步提升客戶機(jī)內(nèi)存訪問性能。
8. 內(nèi)存占用比較
嵌入式系統(tǒng)要求小內(nèi)存占用([參考文獻(xiàn)[24])。下表I,II和III顯示Cubieboard2([參考文獻(xiàn)[25])上的安裝需求和最小內(nèi)存占用。因此后面問題答復(fù)如下:
- 需要滿足什么條件才能使Xen ARM,KVM ARM和Xvisor ARM運(yùn)行在系統(tǒng)上?
- Xen ARM,KVM ARM和Xvisor ARM需要消耗的的最小內(nèi)存是多少?
上圖中:
- a) Xen工具棧與其它依賴庫單獨(dú)安裝。這個(gè)工具棧允許用戶管理虛擬機(jī)創(chuàng)建、銷毀和配置。它可以通過命令行終端和圖形接口使用([參考文獻(xiàn)[10])。
- b) Xen保留大量?jī)?nèi)存,用于事件通道。
上圖中:
- c) Xvisor內(nèi)核在單個(gè)二進(jìn)制文件中包含完整的虛擬化功能,并且隨著更多新特性的增加從而增長到2~3M字節(jié);
- d) Xvisor使用編譯選項(xiàng)來限制自己的內(nèi)存占用,ARM架構(gòu)默認(rèn)設(shè)置為16M字節(jié)。
9. 基準(zhǔn)測(cè)試程序
我們實(shí)驗(yàn)中使用的基準(zhǔn)測(cè)試程序?qū)W⒂趶腃PU開銷、內(nèi)存帶寬和鎖同步機(jī)制方面比較Hypervisor。
9.1 Dhrystone
Dhrystone是一個(gè)用于測(cè)量處理器整形性能的簡(jiǎn)單基準(zhǔn)測(cè)試([參考文獻(xiàn)[26])。Dhrystone基準(zhǔn)測(cè)試的每秒總迭代次數(shù)被稱為每秒Dhrystones。進(jìn)而,Dhrystone結(jié)果的另外一個(gè)表示是DMIPS(每秒百萬條Dhrystone指令數(shù)),也就是每秒Dhrystones除以1757。DMIPS只不過是與VAX 11/780,,典型的1 MIPS機(jī)器([參考文獻(xiàn)[27])進(jìn)行比較的計(jì)算機(jī)系統(tǒng)的性能。
9.2 Cachebench
Cachebench來評(píng)估計(jì)算機(jī)系統(tǒng)內(nèi)存體系的性能。它專注于把處理器內(nèi)外的高速緩存的多個(gè)級(jí)別參數(shù)化。Cachebench進(jìn)行不同緩沖區(qū)大小的測(cè)試:內(nèi)存設(shè)置、內(nèi)存復(fù)制、整數(shù)讀取,整數(shù)寫入和整數(shù)讀取-修改-寫入。對(duì)于我們的實(shí)驗(yàn),我們將生成以兆字節(jié)每秒為單位的內(nèi)存復(fù)制和整數(shù)讀取-修改-寫入測(cè)試的結(jié)果。
9.3 Stream
內(nèi)存帶寬已經(jīng)被認(rèn)為能夠影響系統(tǒng)性能([參考文獻(xiàn)[29])。STREAM是一個(gè)設(shè)計(jì)用來測(cè)量持續(xù)內(nèi)存帶寬(以兆字節(jié)每秒為單位)的簡(jiǎn)單復(fù)合基準(zhǔn)測(cè)試程序。STREAM基準(zhǔn)測(cè)試被明確的設(shè)計(jì)在任何系統(tǒng)的非常大的數(shù)據(jù)集合上工作,而不是可用的高速緩沖上。我們實(shí)驗(yàn)中使用的STREAM版本是v5.10,2000000數(shù)組大?。ù蠹s45.8M字節(jié))
9.4 Hackbench
Hackbench通過確定調(diào)度給定數(shù)目任務(wù)花費(fèi)的時(shí)間來測(cè)量系統(tǒng)調(diào)度器性能。Hackbench的主要工作是調(diào)度線程和進(jìn)程。調(diào)度實(shí)體通過套接字或管道收發(fā)數(shù)據(jù)來通訊。運(yùn)行測(cè)試程序時(shí)能夠?qū)?shù)據(jù)大小和消息數(shù)目進(jìn)行設(shè)置。
10. 實(shí)驗(yàn)
后面的實(shí)驗(yàn)?zāi)康脑谟谠u(píng)估近期提議的嵌入式Hypervisor - Xvisor相較KVM和Xen的效率。本文試圖在Cubieboard2([參考文獻(xiàn)[25])上的客戶機(jī)Linux上運(yùn)行4個(gè)基準(zhǔn)測(cè)試程序。Cubieboard2是一塊包含1GB RAM的ARM Cortex-A7雙核1GHz單板。試驗(yàn)中使用了如下Hypervisor版本:
- KVM: 最新的Linux-3.16-rc3被用作主機(jī)KVM內(nèi)核??蛻魴C(jī)內(nèi)核是Linux-3.16-rc3。
- Xen:2014年8月3日發(fā)布的最新的Xen-4.5-unstable內(nèi)核被用作Hypervisor。Dom0內(nèi)核和DomU均為Linux-3.16-rc3。
- Xvisor:2014年7月18日發(fā)布的最新的Xvisor-0.2.4+被用作Hypervisor??蛻魴C(jī)內(nèi)核是Linux-3.16-rc3。
實(shí)驗(yàn)結(jié)果通過兩個(gè)測(cè)試向量獲取。第一個(gè)運(yùn)行在一個(gè)單核上,而另一個(gè)運(yùn)行在一個(gè)雙核上。測(cè)試系統(tǒng)(SUT,systems under test)如下:
- 沒有任何Hypervisor的主機(jī);
- Xvisor客戶機(jī);
- KVM客戶機(jī);
- HugeTLB模式KVM客戶機(jī);
- Xen客戶機(jī)。
為了確保只有CPU開銷,內(nèi)存帶寬和鎖同步延遲被引入測(cè)試結(jié)果,兩個(gè)測(cè)試向量都有一個(gè)具有2個(gè)vCPU的半虛擬化客戶機(jī)。而且,所有Hypervisor都進(jìn)行了如下優(yōu)化:
- 沒有來自于通用中斷控制器的維護(hù)中斷;
- Xen ARM超級(jí)頁支持;
- WFE指令捕獲-出讓vCPU機(jī)制。
表IV和V顯示以DMIPS為單位的Dhrystone結(jié)果。Xvisor客戶機(jī)的DMIPS比KVM客戶機(jī)高大約0.2%,比HugeTLB模式KVM客戶機(jī)高0.19%,比Xen DomU高0.46%。Dhrystone基準(zhǔn)測(cè)試很小,在運(yùn)行時(shí)幾乎可以放在高速緩存中,因此內(nèi)存訪問開銷不會(huì)對(duì)其產(chǎn)生影響。盡管只有2個(gè)DMIPS的提升,這仍然提升了整個(gè)系統(tǒng)性能,因?yàn)?個(gè)DMIPS等于每秒1757次迭代。所以,使肌體上將是每秒數(shù)千次迭代(通常是幾百萬條機(jī)器指令)。
表VI, VII, VIII和IX顯示內(nèi)存復(fù)制和整數(shù)讀取-修改-寫入兩種操作的Cachebench結(jié)果。Xvisor客戶機(jī)的內(nèi)存復(fù)制結(jié)果比KVM客戶機(jī)高大約18%,比HugeTLB模式KVM客戶機(jī)高1.2%,比Xen DomU高0.67%。Xvisor客戶機(jī)的整數(shù)讀取-修改-寫入結(jié)果也比KVM客戶機(jī)高大約1.14%,比HugeTLB模式KVM客戶機(jī)高1.2%,比Xen DomU高1.64%。
表X和XI顯示Xvisor客戶機(jī)的持續(xù)性內(nèi)存帶寬比KVM客戶機(jī)高大約0.72%,比HugeTLB模式KVM客戶機(jī)高1.57%,比Xen DomU高1.2%。
表XII和XIII中的Hackbench結(jié)果顯示示Xvisor客戶機(jī)的任務(wù)分發(fā)延遲比KVM客戶機(jī)低大約12.5%,比HugeTLB模式KVM客戶機(jī)低5.62%,比Xen DomU低6.39%。
11. 結(jié)論
這篇論文介紹了作為開源Hypervisor - Xen和KVM性能缺點(diǎn)解決方案的新嵌入式Hypervisor - Xvisor。Xvisor的實(shí)現(xiàn)優(yōu)點(diǎn)體現(xiàn)在如下幾個(gè)方面:
- 客戶機(jī)IO模擬;
- 主機(jī)中斷處理;
- 鎖同步延遲;
- 內(nèi)存占用;
- 內(nèi)存管理。
而且,4種不同基礎(chǔ)準(zhǔn)測(cè)試的顯示結(jié)果支撐了Xvisor的實(shí)現(xiàn)優(yōu)勢(shì)。
實(shí)驗(yàn)結(jié)果顯示Dhrystone,Cachebench和Stream基準(zhǔn)測(cè)試在Xvisor ARM客戶機(jī)上具有更高的速率。這證明Xvisor ARM客戶機(jī)具有相對(duì)于KVM ARM客戶機(jī)和Xen ARM DomU更低的CPU開銷和更高的內(nèi)存帶寬。進(jìn)而,Hackbench在Xvisor ARM客戶機(jī)上具有更少的執(zhí)行時(shí)間。這說明Xvisor ARM客戶機(jī)具有相對(duì)于KVM ARM客戶機(jī)和Xen ARM DomU更低的鎖同步延遲和虛擬定時(shí)器中斷開銷。這些結(jié)果意味著Xvisor ARM下的客戶機(jī)相對(duì)于KVM ARM和Xen ARM更接近原生性能。最后, Xvisor ARM更小的內(nèi)存占用允許它在嵌入式系統(tǒng)上更有效的利用有限的內(nèi)存。
Xvisor允許額外的板級(jí)支持包(BSP)。更多的多核體驗(yàn)(不止是雙核)也是可能的。而且,基于上述測(cè)量數(shù)據(jù)已經(jīng)證明的性能提升,Xvisor將來在網(wǎng)絡(luò)和存儲(chǔ)虛擬化方面的實(shí)現(xiàn)也能具有更好的性能。
參考文獻(xiàn)
- Motivation for running a Hypervisor on Embedded Systems
- R.Kaiser, "Complex embedded systems-A case for virtualization," in Intelligent solutions in Embedded Systems, 2009 Seventh Workshop on, pp. 135-140. IEEE, 2009.
- Heiser, Gernot. "The role of virtualization in embedded systems," in Proceedings of the 1st workshop on Isolation and integration in embedded systems, pp. 11-16. ACM, 2008.
- Heiser, Gernot. "The Motorola Evoke QA4-A Case Study in Mobile Virtualization." Open Kernel Labs (2009).
- “Case Study: The Use of Virtualization in Embedded Systems,” white paper,2013.
- G.Heiser, "Virtualizing embedded systems: why bother?," in Proceedings of the 48th Design Automation Conference, pp. 901-905. ACM, 2011.
- Dall, Christoffer, and Jason Nieh. "KVM/ARM: Experiences Building the Linux ARM Hypervisor." (2013).
- Rossier, Daniel. "EmbeddedXEN: A Revisited Architecture of the XEN hypervisor to support ARM-based embedded virtualization." White paper, Switzerland (2012).
- Soriga, Stefan Gabriel, and Mihai Barbulescu. "A comparison of the performance and scalability of Xen and KVM hypervisors." In Networking in Education and Research, 2013 RoEduNet International Conference 12th Edition, pp. 1-6. IEEE, 2013.
- [ARMv7-AR architecture reference manual](http://infocenter.arm.com/help/topic/com.arm.doc.ddi0406c/index.
html) - Xvisor open-source bare metal monolithic hypervisor
- The Architecture of VMware ESXi
- E. Bugnion, S. Devine, M. Rosenblum, J. Sugerman, and E. Y.Wang, “Bringing Virtualization to the x86 Architecture the Origiinal VMware Workstation,” ACM Transactions on Computer Systems, 30(4):12:1-12:51, Nov 2012.
- OKL4 Microvisor
- H. Fayyad-Kazan, L. Perneel and M. Timerman, “Benchmarking the Performance of Microsoft Hyper-V server, VMware ESXi, and Xen Hypervisors”, Journal of Emerging Trends in Computing and Information Sciences, Vol. 4, No. 12, Dec 2013.
- INTEGRITY Multivisor
- Full Virtualization
- Paravirtualization
- Xen Project Beginners Guide
- R. Russell. Virtio PCI Card Specification v0.9.5 DRAFT, May
- G.Likely, and J.Boyer, "A symphony of flavours: Using the device tree to describe embedded hardware," in Proceedings of the Linux Symposium, vol. 2, pp. 27-37. 2008.
- R.Ma, F.Zhou, E.Zhu, and H.GUAN, "Performance Tuning Towards a KVM-based Embedded Real-Time Virtualization System." Journal of Information Science and Engineering 29, no. 5 (2013): 1021-1035.
- X.Song, J.Shi, H.Chen, and B.Zang, "Schedule processes, not vcpus," in Proceedings of the 4th Asia-Pacific Workshop on Systems, p. 1. ACM, 2013.
- Memory Footprint
- Cubiboard
- RP.Weicker, "Dhrystone: a synthetic systems programming benchmark," Communications of the ACM 27, no. 10 (1984):1013-1030.
- Dhrystone
- PJ.Mucci, K.London, and J.Thurman. "The cachebench report."University of Tennessee, Knoxville, TN 19 (1998).
- Stream
- Hackbench Ubuntu Manuals
本文使用 WPL/s 發(fā)布 @GitHub,首發(fā)于本人簡(jiǎn)書專欄。
關(guān)鍵詞:對(duì)比,分析,管理,虛擬