計算虛擬化的硬件擴展話(huà)題
發(fā)布時(shí)間:2022-05-20 10:12
來(lái)源:好主機
閱讀:169
作者:新網(wǎng)知識社區
欄目: 虛擬主機
歡迎投稿:712375056
??針對不同的資源,主要包含三個(gè)方面的內容:計算虛擬化、存儲虛擬化和網(wǎng)絡(luò )虛擬化,接下來(lái)咱們就分別詳細介紹這三類(lèi)資源的虛擬化手段和技術(shù)。今天主要聊虛擬化中的“計算虛擬化”,也就是主要針對 CPU 的虛擬化。CPU 虛擬化可以說(shuō)是計算虛擬化最關(guān)鍵的核心,弄清楚了 VM Exit 和 VM Entry。后續的I/O 虛擬化,內存虛擬化都是建立在這個(gè)基礎上。下面就由小編和大家講一講什么是計算虛擬化。
??一、計算虛擬化
??計算虛擬化通常包括三方面的內容
??1、CPU虛擬化:由于多個(gè) VM 共享 CPU 資源,需要對 VM 中的敏感指令進(jìn)行截獲并模擬執行。
??2、內存虛擬化:由于多個(gè) VM 共享同一物理內存,需要相互隔離
??3、I/O虛擬化:由于多個(gè) VM 共享一個(gè)物理設備,如磁盤(pán)、網(wǎng)卡,一般借用 TDMA 的思想,通過(guò)分時(shí)多路技術(shù)進(jìn)行復用。
??二、CPU虛擬化簡(jiǎn)介
??對于 X86 處理器來(lái)說(shuō),CPU 虛擬化的基礎是因為其保護模式下一共有 4 個(gè)不同優(yōu)先級,分別從 Ring 0 直到 Ring3。這些 Ring 的優(yōu)先級隨其所執行功能的不同也有所不同。其中Ring 0 用于內核和驅動(dòng),優(yōu)先級最高,擁有最高的“特權”,Ring 1 和 Ring 2 用于操作系統服務(wù),優(yōu)先級次之,Ring 3 用于應用程序,優(yōu)先級最低。一般應用程序都放在 Ring 3 等級,至于 Ring 1 和 2 則很少被使用。對于應用程序與 OS 發(fā)出的命令要求,CPU 一律采取 Direct ExecuTIon,如下圖所示:
??如果要進(jìn)行虛擬化,Ring 0 這一層就必須交給 VMM來(lái)掌控,進(jìn)行硬件資源的分配處理。
??那么問(wèn)題來(lái)了,由于 OS 一定要在 Ring 0 進(jìn)行訪(fǎng)問(wèn),直接控制硬件,而現在 Ring 0 的部分已經(jīng)交給 VMM,操作系統則被調降到 Ring 1,但是由于 X86 CPU 最初定位為單個(gè)用戶(hù)使用,當時(shí)并沒(méi)有考慮到將計算資源分配給不同 OS 的問(wèn)題;而且 X86 的指令集架構(即ISA,是處理器的一個(gè)抽象描述,即設計規范,定義處理器能夠做什么。其本質(zhì)就是一系列的指令集綜合。當前主流的 ISA 有 X86、ARM、MIPS、Power 等,這里我們僅講 X86 ISA)中有 19 條敏感指令不是特權指令,這些指令必須要在 Ring 0 這個(gè)層級才能作用,否則操作系統將會(huì )產(chǎn)生警告、終止掉應用程序甚至導致系統崩潰。
??于是,經(jīng)過(guò)研究,我們的攻城獅們提出以下三種方法來(lái)解決這個(gè)問(wèn)題。
??(1)全虛擬化(Full VirtualizaTIon)
??這一方法最初由 VMware 在 1999 年提出,這是一種叫做二進(jìn)制翻譯(Binary TranslaTIon)的技術(shù),原理是通過(guò) VMM 來(lái)預先攔截這些 OS 當中原本不能被虛擬化的命令(nonvirtualizable instrucTIons),并將其進(jìn)行二進(jìn)制轉譯的替換操作,使操作系統認為自己可以直接掌控硬件,并不知道實(shí)際上已經(jīng)被虛擬化成為了。如下圖所示:
??而應用程序一般性的命令則還是直接向硬件請求,以維持良好的性能。全虛擬化的好處是 OS 不必做任何修改,直接安裝即可使用。而且所支持的 OS 種類(lèi)也最多,但若不靠硬件輔助(Hardware Assisted Virtualization),全虛擬化的實(shí)現難度是非常大。
??(2)半虛擬化( ParaVirtualization)
??半虛擬化的原理是修改 Guest OS 核心中部分代碼,植入了 Hypercall(超級調用),從而使 Guest OS 會(huì )將和特權指令相關(guān)的操作都轉換為發(fā)給 VMM 的 Hypercall(超級調用),由 VMM 繼續進(jìn)行處理。而 Hypercall 支持的批處理和異步這兩種優(yōu)化方式,使得通過(guò)Hypercall 能得到近似于物理機的速度。
??這樣就能讓原本不能被虛擬化的命令(nonvirtualizable instructions)可以經(jīng)過(guò) Hypercall interfaces 直接向硬件提出請求,Guest OS 的部分還是一樣在Ring 0,不用被調降到 Ring 1。如下圖所示:
??半虛擬化的優(yōu)點(diǎn)是 CPU、I/O 損耗減到最低,理論上性能勝過(guò)全虛擬化技術(shù),缺點(diǎn)則是必須要修改 OS 內核才行,只有 SuSE、Ubuntu 等少數 Linux 版本才支持,OS 兼容性不佳,因為微軟不肯修改自家的操作系統內核,因此如果是 Windows 系統,就無(wú)法使用半虛擬化了。
??VMware 在 2005 年發(fā)表了透明半虛擬化(Transparent Paravirtualization),針對支持半虛擬化的 OS 可以在 VMware 的平臺通過(guò) VMI(Virtual Machine Interface)打開(kāi)半虛擬化來(lái)增加 I/O 性能,降低CPU 的使用率。
??其原理是在支持半虛擬化的 Guest OS 上面由 VMware tools 開(kāi)一道后門(mén),與 VMM 進(jìn)行溝通,然后在 OS 上安裝半虛擬優(yōu)化驅動(dòng)程序,以提高 I/O 性能,降低 CPU 使用率。這是一種在 VMware 平臺上可以支持半虛擬化 OS 的最佳方式,但是必須要注意的是,底層 CPU Virtualization 仍然是使用二進(jìn)制轉換(Binary Translation)的全虛擬化技術(shù)(Full Virtualization),而不是半虛擬化技術(shù)。
??(3)CPU 硬件輔助虛擬化( Hardware Assisted Virtualization)
??2005 年后,虛擬化漸漸成為潮流,勢不可擋。Intel 與 AMD 決定從 CPU 根本架構著(zhù)手,更改原來(lái)的特權等級 Ring 0、1、2、3,將之歸類(lèi)為 Non-Root mode,又新增了一個(gè) Root Mode 特權等級(有人稱(chēng)為Ring -1),這樣一來(lái),OS 便可以在原來(lái)Ring 0 的等級,而VMM 則調整到更底層的 Root Mode 等級。如下圖所示:
??目前主要有 Intel 的 VT-x 和 AMD 的 AMD-V 這兩種技術(shù)。其核心思想都是通過(guò)引入新的指令和運行模式,使 VMM 和 Guest OS 分別運行在不同模式(ROOT 模式和非 ROOT 模式)下,且 Guest OS 運行在 Ring 0 下。通常情況下,Guest OS 的核心指令可以直接下達到計算機系統硬件執行,而不需要經(jīng)過(guò) VMM。當 Guest OS 執行到特殊指令的時(shí)候,系統會(huì )切換到 VMM,讓 VMM 來(lái)處理特殊指令。
??三、硬件輔助虛擬化擴展話(huà)題
??在硬件輔助虛擬化中,虛擬機的指令集直接運行在宿物理 CPU 上,當虛擬機中的指令設計到 I/O 操作或者一些特殊指令的時(shí)候,控制權轉讓給了宿
主機(這里其實(shí)是轉讓給了 VMM),也就是一個(gè)進(jìn)程,它在
宿主機上的表現形式也就是一個(gè)用戶(hù)級進(jìn)程。
??下面我們僅針對 VT-x 的一些重點(diǎn)概念展開(kāi)談一下。
??(1)兩種模式
??VT-x 為 IA 32 處理器增加了兩種操作模式:VMX root operation 和 VMX non-root operation。
??VMM 自己運行在 VMX root operation 模式,VMX non-root operation 模式則由 Guest OS 使用。兩種操作模式都支持 Ring 0 ~ Ring 3 這 4 個(gè)特權級,因此 VMM 和 Guest OS 都可以自由選擇它們所期望的運行級別。
??(2)模式轉換 VM entry,運行 Guest OS
??這兩種操作模式可以互相轉換。運行在 VMX root operation 模式下的 VMM 通過(guò)顯式調用 VMLAUNCH 或 VMRESUME 指令切換到 VMX non-root operation 模式,硬件自動(dòng)加載 Guest OS 的上下文,于是 Guest OS 獲得運行,這種轉換稱(chēng)為 VM entry。
??(3)模式轉換 VM exit,運行 VMM
??Guest OS 運行過(guò)程中遇到需要 VMM 處理的事件,例如外部中斷或缺頁(yè)異常,或者主動(dòng)調用 VMCALL 指令調用 VMM 的服務(wù)的時(shí)候(與系統調用類(lèi)似),硬件自動(dòng)掛起 Guest OS,切換到 VMX root operation 模式,恢復 VMM 的運行,這種轉換稱(chēng)為 VM exit。
??VMX root operation 模式下,軟件的行為與在沒(méi)有 VT-x 技術(shù)的處理器上的行為基本一致;而 VMX non-root operation 模式則有很大不同,最主要的區別是此時(shí)運行某些指令或遇到某些事件時(shí),發(fā)生 VM exit。
??(4) VMM 的生命周期
??VMM 開(kāi)始于 VMXON 指令,結束與 VMXOFF 指令。
??第一次啟動(dòng) Guest,通過(guò) VMLAUNCH 指令加載 Guest,這時(shí)候一切都是新的,比如說(shuō)起始的 rip 寄存器等。后續 Guest exit 后再 entry,是通過(guò) VMRESUME 指令,此指令會(huì )將VMCS(后面會(huì )介紹到)所指向的內容加載到當前 Guest 的上下文,以便 Guest 繼續執行。
??(5)虛擬機控制塊 VMCS(Virtual-Machine control structure)
??VMCS 是一個(gè) 64 位的指針,指向一個(gè)真實(shí)的內存地址,VMCS 是以 vCPU 為單位的,就是說(shuō)當前有多少個(gè) vCPU,就有多少個(gè) VMCS 指針。
??VMM 和 Guest OS 共享底層的處理器資源,因此硬件需要一個(gè)物理內存區域來(lái)自動(dòng)保存或恢復彼此執行的上下文。這個(gè)區域稱(chēng)為虛擬機控制塊(VMCS),包括客戶(hù)機狀態(tài)區(Guest State Area),主機狀態(tài)區(Host State Area)和執行控制區。小伙伴們要想獲得更多計算虛擬化的內容,請關(guān)注特網(wǎng)!