最新文章
企業(yè)郵箱注冊(cè)如何一步到位?新網(wǎng)專(zhuān)業(yè)服務(wù)保障賬號(hào)安全與高效協(xié)同
企業(yè)備案信息實(shí)時(shí)可查:新網(wǎng)一站式ICP備案服務(wù)平臺(tái)上線
企業(yè)上云選型關(guān)鍵:為什么穩(wěn)定可靠的虛擬機(jī)服務(wù)比參數(shù)更重要
企業(yè)建站首選:新網(wǎng)網(wǎng)站空間購(gòu)買(mǎi)全指南
高效精準(zhǔn)選好域:新網(wǎng)智能域名搜索助力企業(yè)快速鎖定優(yōu)質(zhì)數(shù)字資產(chǎn)
企業(yè)域名管理為何越來(lái)越依賴(lài)專(zhuān)業(yè)服務(wù)商?新網(wǎng)解析三大關(guān)鍵動(dòng)因
計(jì)算虛擬化的硬件擴(kuò)展話題
??針對(duì)不同的資源,虛擬化主要包含三個(gè)方面的內(nèi)容:計(jì)算虛擬化、存儲(chǔ)虛擬化和網(wǎng)絡(luò)虛擬化,接下來(lái)咱們就分別詳細(xì)介紹這三類(lèi)資源的虛擬化手段和技術(shù)。今天主要聊虛擬化中的“計(jì)算虛擬化”,也就是主要針對(duì) CPU 的虛擬化。CPU 虛擬化可以說(shuō)是計(jì)算虛擬化最關(guān)鍵的核心,弄清楚了 VM Exit 和 VM Entry。后續(xù)的I/O 虛擬化,內(nèi)存虛擬化都是建立在這個(gè)基礎(chǔ)上。下面就由新網(wǎng)小編和大家講一講什么是計(jì)算虛擬化。
??計(jì)算虛擬化通常包括三方面的內(nèi)容
??1、CPU虛擬化:由于多個(gè) VM 共享 CPU 資源,需要對(duì) VM 中的敏感指令進(jìn)行截獲并模擬執(zhí)行。
??2、內(nèi)存虛擬化:由于多個(gè) VM 共享同一物理內(nèi)存,需要相互隔離
??3、I/O虛擬化:由于多個(gè) VM 共享一個(gè)物理設(shè)備,如磁盤(pán)、網(wǎng)卡,一般借用 TDMA 的思想,通過(guò)分時(shí)多路技術(shù)進(jìn)行復(fù)用。
??二、CPU虛擬化簡(jiǎn)介
??對(duì)于 X86 處理器來(lái)說(shuō),CPU 虛擬化的基礎(chǔ)是因?yàn)槠浔Wo(hù)模式下一共有 4 個(gè)不同優(yōu)先級(jí),分別從 Ring 0 直到 Ring3。這些 Ring 的優(yōu)先級(jí)隨其所執(zhí)行功能的不同也有所不同。其中Ring 0 用于操作系統(tǒng)內(nèi)核和驅(qū)動(dòng),優(yōu)先級(jí)最高,擁有最高的“特權(quán)”,Ring 1 和 Ring 2 用于操作系統(tǒng)服務(wù),優(yōu)先級(jí)次之,Ring 3 用于應(yīng)用程序,優(yōu)先級(jí)最低。一般應(yīng)用程序都放在 Ring 3 等級(jí),至于 Ring 1 和 2 則很少被使用。對(duì)于應(yīng)用程序與 OS 發(fā)出的命令要求,CPU 一律采取 Direct ExecuTIon,如下圖所示:
??如果要進(jìn)行虛擬化,Ring 0 這一層就必須交給 VMM來(lái)掌控,進(jìn)行硬件資源的分配處理。
??那么問(wèn)題來(lái)了,由于 OS 一定要在 Ring 0 進(jìn)行訪問(wèn),直接控制硬件,而現(xiàn)在 Ring 0 的部分已經(jīng)交給 VMM,操作系統(tǒng)則被調(diào)降到 Ring 1,但是由于 X86 CPU 最初定位為單個(gè)用戶(hù)使用,當(dāng)時(shí)并沒(méi)有考慮到將計(jì)算資源分配給不同 OS 的問(wèn)題;而且 X86 的指令集架構(gòu)(即ISA,是處理器的一個(gè)抽象描述,即設(shè)計(jì)規(guī)范,定義處理器能夠做什么。其本質(zhì)就是一系列的指令集綜合。當(dāng)前主流的 ISA 有 X86、ARM、MIPS、Power 等,這里我們僅講 X86 ISA)中有 19 條敏感指令不是特權(quán)指令,這些指令必須要在 Ring 0 這個(gè)層級(jí)才能作用,否則操作系統(tǒng)將會(huì)產(chǎn)生警告、終止掉應(yīng)用程序甚至導(dǎo)致系統(tǒng)崩潰。
??于是,經(jīng)過(guò)研究,我們的攻城獅們提出以下三種方法來(lái)解決這個(gè)問(wèn)題。
??(1)全虛擬化(Full VirtualizaTIon)
??這一方法最初由 VMware 在 1999 年提出,這是一種叫做二進(jìn)制翻譯(Binary TranslaTIon)的技術(shù),原理是通過(guò) VMM 來(lái)預(yù)先攔截這些 OS 當(dāng)中原本不能被虛擬化的命令(nonvirtualizable instrucTIons),并將其進(jìn)行二進(jìn)制轉(zhuǎn)譯的替換操作,使操作系統(tǒng)認(rèn)為自己可以直接掌控硬件,并不知道實(shí)際上已經(jīng)被虛擬化成為虛擬機(jī)了。如下圖所示:
??而應(yīng)用程序一般性的命令則還是直接向硬件請(qǐng)求,以維持良好的性能。全虛擬化的好處是 OS 不必做任何修改,直接安裝即可使用。而且所支持的 OS 種類(lèi)也最多,但若不靠硬件輔助(Hardware Assisted Virtualization),全虛擬化的實(shí)現(xiàn)難度是非常大。
??(2)半虛擬化( ParaVirtualization)
??半虛擬化的原理是修改 Guest OS 核心中部分代碼,植入了 Hypercall(超級(jí)調(diào)用),從而使 Guest OS 會(huì)將和特權(quán)指令相關(guān)的操作都轉(zhuǎn)換為發(fā)給 VMM 的 Hypercall(超級(jí)調(diào)用),由 VMM 繼續(xù)進(jìn)行處理。而 Hypercall 支持的批處理和異步這兩種優(yōu)化方式,使得通過(guò)Hypercall 能得到近似于物理機(jī)的速度。
??這樣就能讓原本不能被虛擬化的命令(nonvirtualizable instructions)可以經(jīng)過(guò) Hypercall interfaces 直接向硬件提出請(qǐng)求,Guest OS 的部分還是一樣在Ring 0,不用被調(diào)降到 Ring 1。如下圖所示:
??半虛擬化的優(yōu)點(diǎn)是 CPU、I/O 損耗減到最低,理論上性能勝過(guò)全虛擬化技術(shù),缺點(diǎn)則是必須要修改 OS 內(nèi)核才行,只有 SuSE、Ubuntu 等少數(shù) Linux 版本才支持,OS 兼容性不佳,因?yàn)槲④洸豢闲薷淖约业牟僮飨到y(tǒng)內(nèi)核,因此如果是 Windows 系統(tǒng),就無(wú)法使用半虛擬化了。
??VMware 在 2005 年發(fā)表了透明半虛擬化(Transparent Paravirtualization),針對(duì)支持半虛擬化的 OS 可以在 VMware 的平臺(tái)通過(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)化驅(qū)動(dòng)程序,以提高 I/O 性能,降低 CPU 使用率。這是一種在 VMware 平臺(tái)上可以支持半虛擬化 OS 的最佳方式,但是必須要注意的是,底層 CPU Virtualization 仍然是使用二進(jìn)制轉(zhuǎn)換(Binary Translation)的全虛擬化技術(shù)(Full Virtualization),而不是半虛擬化技術(shù)。
??(3)CPU 硬件輔助虛擬化( Hardware Assisted Virtualization)
??2005 年后,虛擬化漸漸成為潮流,勢(shì)不可擋。Intel 與 AMD 決定從 CPU 根本架構(gòu)著手,更改原來(lái)的特權(quán)等級(jí) Ring 0、1、2、3,將之歸類(lèi)為 Non-Root mode,又新增了一個(gè) Root Mode 特權(quán)等級(jí)(有人稱(chēng)為Ring -1),這樣一來(lái),OS 便可以在原來(lái)Ring 0 的等級(jí),而VMM 則調(diào)整到更底層的 Root Mode 等級(jí)。如下圖所示:
??目前主要有 Intel 的 VT-x 和 AMD 的 AMD-V 這兩種技術(shù)。其核心思想都是通過(guò)引入新的指令和運(yùn)行模式,使 VMM 和 Guest OS 分別運(yùn)行在不同模式(ROOT 模式和非 ROOT 模式)下,且 Guest OS 運(yùn)行在 Ring 0 下。通常情況下,Guest OS 的核心指令可以直接下達(dá)到計(jì)算機(jī)系統(tǒng)硬件執(zhí)行,而不需要經(jīng)過(guò) VMM。當(dāng) Guest OS 執(zhí)行到特殊指令的時(shí)候,系統(tǒng)會(huì)切換到 VMM,讓 VMM 來(lái)處理特殊指令。
??三、硬件輔助虛擬化擴(kuò)展話題
??在硬件輔助虛擬化中,虛擬機(jī)的指令集直接運(yùn)行在宿主機(jī)物理 CPU 上,當(dāng)虛擬機(jī)中的指令設(shè)計(jì)到 I/O 操作或者一些特殊指令的時(shí)候,控制權(quán)轉(zhuǎn)讓給了宿主機(jī)(這里其實(shí)是轉(zhuǎn)讓給了 VMM),也就是一個(gè)進(jìn)程,它在宿主機(jī)上的表現(xiàn)形式也就是一個(gè)用戶(hù)級(jí)進(jìn)程。
??下面我們僅針對(duì) VT-x 的一些重點(diǎn)概念展開(kāi)談一下。
??(1)兩種模式
??VT-x 為 IA 32 處理器增加了兩種操作模式:VMX root operation 和 VMX non-root operation。
??VMM 自己運(yùn)行在 VMX root operation 模式,VMX non-root operation 模式則由 Guest OS 使用。兩種操作模式都支持 Ring 0 ~ Ring 3 這 4 個(gè)特權(quán)級(jí),因此 VMM 和 Guest OS 都可以自由選擇它們所期望的運(yùn)行級(jí)別。
??(2)模式轉(zhuǎn)換 VM entry,運(yùn)行 Guest OS
??這兩種操作模式可以互相轉(zhuǎn)換。運(yùn)行在 VMX root operation 模式下的 VMM 通過(guò)顯式調(diào)用 VMLAUNCH 或 VMRESUME 指令切換到 VMX non-root operation 模式,硬件自動(dòng)加載 Guest OS 的上下文,于是 Guest OS 獲得運(yùn)行,這種轉(zhuǎn)換稱(chēng)為 VM entry。
??(3)模式轉(zhuǎn)換 VM exit,運(yùn)行 VMM
??Guest OS 運(yùn)行過(guò)程中遇到需要 VMM 處理的事件,例如外部中斷或缺頁(yè)異常,或者主動(dòng)調(diào)用 VMCALL 指令調(diào)用 VMM 的服務(wù)的時(shí)候(與系統(tǒng)調(diào)用類(lèi)似),硬件自動(dòng)掛起 Guest OS,切換到 VMX root operation 模式,恢復(fù) VMM 的運(yùn)行,這種轉(zhuǎn)換稱(chēng)為 VM exit。
??VMX root operation 模式下,軟件的行為與在沒(méi)有 VT-x 技術(shù)的處理器上的行為基本一致;而 VMX non-root operation 模式則有很大不同,最主要的區(qū)別是此時(shí)運(yùn)行某些指令或遇到某些事件時(shí),發(fā)生 VM exit。
??(4) VMM 的生命周期
??VMM 開(kāi)始于 VMXON 指令,結(jié)束與 VMXOFF 指令。
??第一次啟動(dòng) Guest,通過(guò) VMLAUNCH 指令加載 Guest,這時(shí)候一切都是新的,比如說(shuō)起始的 rip 寄存器等。后續(xù) Guest exit 后再 entry,是通過(guò) VMRESUME 指令,此指令會(huì)將VMCS(后面會(huì)介紹到)所指向的內(nèi)容加載到當(dāng)前 Guest 的上下文,以便 Guest 繼續(xù)執(zhí)行。
??(5)虛擬機(jī)控制塊 VMCS(Virtual-Machine control structure)
??VMCS 是一個(gè) 64 位的指針,指向一個(gè)真實(shí)的內(nèi)存地址,VMCS 是以 vCPU 為單位的,就是說(shuō)當(dāng)前有多少個(gè) vCPU,就有多少個(gè) VMCS 指針。
??VMM 和 Guest OS 共享底層的處理器資源,因此硬件需要一個(gè)物理內(nèi)存區(qū)域來(lái)自動(dòng)保存或恢復(fù)彼此執(zhí)行的上下文。這個(gè)區(qū)域稱(chēng)為虛擬機(jī)控制塊(VMCS),包括客戶(hù)機(jī)狀態(tài)區(qū)(Guest State Area),主機(jī)狀態(tài)區(qū)(Host State Area)和執(zhí)行控制區(qū)。小伙伴們要想獲得更多計(jì)算虛擬化的內(nèi)容,請(qǐng)關(guān)注新網(wǎng)!
聲明:免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)
送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)
需注明出處:新網(wǎng)idc知識(shí)百科

