虚拟化技术简述
虛擬化簡(jiǎn)介
- 前言
- 一、虛擬化簡(jiǎn)介
- 二、軟件虛擬化和硬件虛擬化
- 2.1 軟件虛擬化技術(shù)
- 2.2 硬件虛擬化
- 2.3 QEMU
- 三、全虛擬化和半虛擬化
- 3.1 全虛擬化
- 3.2 半虛擬化
- 3.3 敏感指令
- 3.4 小結(jié)
- 四、Type1和Type2虛擬化
- 4.1 Type 1
- 4.2 Type 2
- 總結(jié)
- 參考資料
前言
這周開始研究 Intel 的虛擬化技術(shù)了,寫寫這周學(xué)的一些知識(shí)吧,算是入門的吧,因?yàn)槲乙彩莿倢W(xué)習(xí)虛擬化技術(shù),可能描述的不太準(zhǔn)備,但是文章還是要寫的。
關(guān)于虛擬化我們?cè)缇徒佑|到了,大家在學(xué)習(xí)linux時(shí)候的開始階段,通常都會(huì)再window平臺(tái)下安裝vmware workstation(或virtualbox),然后在這兩個(gè)桌面虛擬化軟件上面安裝linux內(nèi)核鏡像,運(yùn)行一個(gè)完整的Linux內(nèi)核,這樣我們就可以在windows系統(tǒng)上面使用linux系統(tǒng)了,進(jìn)行學(xué)習(xí)了。如果沒有虛擬化,那我們只能在我們的電腦上安裝雙系統(tǒng),每次在開機(jī)啟動(dòng)時(shí)選擇是windows系統(tǒng)還是linux 系統(tǒng),這非常不方便。
比如大家在vmware workstation上安裝linux時(shí),得配置linux的一些硬件資源,這些硬件資源由我們用戶自定義,并且還可以隨時(shí)更改,非常方便,如下圖:
可以看出一個(gè)操作系統(tǒng)能正常運(yùn)行所需要的硬件資源基本都需要,如最重要的處理器,內(nèi)存,磁盤,網(wǎng)絡(luò),OS鏡像這些都不可缺少。
一、虛擬化簡(jiǎn)介
隨著計(jì)算硬件、網(wǎng)絡(luò)技術(shù)、存儲(chǔ)技術(shù)的飛速發(fā)展,人們發(fā)現(xiàn),每個(gè)人獨(dú)自擁有一臺(tái)計(jì)算機(jī)似乎有些浪費(fèi),因?yàn)樗蠖鄶?shù)時(shí)候是空閑的。那么,如果將計(jì)算資源集中起來,大家共享,類似現(xiàn)代操作系統(tǒng)那樣分時(shí)復(fù)用,將是對(duì)資源的極大節(jié)省和效率的極大提升。
虛擬化是一種資源管理技術(shù),將計(jì)算機(jī)物理資源(CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等)轉(zhuǎn)化為更通用更強(qiáng)的更容易使用的虛擬形式,多個(gè)操作系統(tǒng)共享這些硬件物理資源,提升單機(jī)的利用率,最大化的利用物理資源。并且提供與主機(jī)操作系統(tǒng)和其他虛擬機(jī)的完全隔離,更安全。如果沒有虛擬化技術(shù),那么這些硬件資源只能被單個(gè)操作系統(tǒng)使用。
虛擬機(jī)運(yùn)行所需要的環(huán)境可以說與物理機(jī)上毫無差異,可能會(huì)由于所分配得到的物理資源大小、競(jìng)爭(zhēng)、或宿主機(jī)的限制而導(dǎo)致運(yùn)行速度可能低于在真實(shí)的物理機(jī)上運(yùn)行的速度。
現(xiàn)在給出虛擬機(jī)的一個(gè)簡(jiǎn)單模型:物理硬件資源 + 虛擬機(jī)監(jiān)視器(VMM)+ 客戶軟件(Guest software)。
Guest software包括:一個(gè)完整的邏輯硬件運(yùn)行環(huán)境、OS、應(yīng)用等,就是一個(gè)虛擬機(jī)器。
如下圖所示:
Virtual Machine Monitor(VMM,虛擬機(jī)監(jiān)控器,也稱為Hypervisor)層,充當(dāng)主機(jī),完全控制處理器和其他平臺(tái)硬件,并為客戶軟件提供虛擬處理器的抽象,并允許它直接在邏輯處理器上執(zhí)行,VMM能夠保留對(duì)處理器資源、物理內(nèi)存、中斷管理和I/O的選擇性控制。簡(jiǎn)單點(diǎn)說就是為了達(dá)到虛擬化而引入的一個(gè)軟件層。它向下管理實(shí)際的物理資源,向上給虛擬機(jī)提供邏輯資源。
二、軟件虛擬化和硬件虛擬化
2.1 軟件虛擬化技術(shù)
軟件虛擬化:就是通過軟件模擬來實(shí)現(xiàn)VMM層,通過純軟件的環(huán)境來模擬執(zhí)行客戶機(jī)里的指令。
比如QEMU:在沒有啟用硬件虛擬化輔助的時(shí)候,它通過軟件的二進(jìn)制翻譯仿真出目標(biāo)平臺(tái)呈現(xiàn)給客戶機(jī),客戶機(jī)的每一條目標(biāo)平臺(tái)指令都會(huì)被QEMU截取,并翻譯成宿主機(jī)平臺(tái)的指令,然后交給實(shí)際的物理平臺(tái)執(zhí)行。
客戶機(jī)完全不知道自己運(yùn)行在虛擬化環(huán)境中,還以為自己運(yùn)行在原生環(huán)境里。
缺點(diǎn):每一條目標(biāo)指令都會(huì)被QEMU截取,翻譯成宿主機(jī)平臺(tái)的指令,然后交給實(shí)際的物理平臺(tái)執(zhí)行,其虛擬化性能是比較差的,同時(shí)其軟件復(fù)雜度也大大增加。
優(yōu)點(diǎn):可以呈現(xiàn)各種平臺(tái)給客戶機(jī),只要其二進(jìn)制翻譯支持。每個(gè)虛擬器都可以仿真一個(gè)不同架構(gòu)的處理器,比如在Intel x86的處理器架構(gòu)上虛擬化的處理器架構(gòu)可以是ARM架構(gòu)的的(即:物理CPU是x86的,而guest是基于ARM的)。
以虛擬化CPU來說:CPU是計(jì)算機(jī)系統(tǒng)最核心的模塊,我們的程序執(zhí)行到最后都是翻譯為機(jī)器語(yǔ)言在CPU上執(zhí)行的。在沒有CPU硬件虛擬化技術(shù)之前,通常使用指令的二進(jìn)制翻譯(binary translation)來實(shí)現(xiàn)虛擬客戶機(jī)中CPU指令的執(zhí)行,很早期的VMware就使用這樣的方案,其指令執(zhí)行的翻譯比較復(fù)雜,效率比較低。所以Intel最早發(fā)布的虛擬化技術(shù)就是CPU虛擬化方面的。
2.2 硬件虛擬化
硬件虛擬化技術(shù)就是指計(jì)算機(jī)硬件本身提供能力讓客戶機(jī)指令獨(dú)立執(zhí)行,不完全需要VMM截獲重定向(大部分指令集就可以在自己的邏輯處理器上執(zhí)行,即在自己的VM上進(jìn)行處理大部分的指令集,只有少部分特權(quán)指令才需要被VMM截獲并做相應(yīng)處理,VMM需要監(jiān)控這些特權(quán)指令)。
這里簡(jiǎn)單的介紹下Intel的VMX技術(shù):
VMX(virtual-machine extensions):從硬件層面上來為多個(gè)軟件運(yùn)行環(huán)境提供處理器硬件虛擬化支持:即Intel 的VT-x技術(shù)( AMD 相應(yīng)的虛擬技術(shù)稱為: AMD-V )。
VT:Virtualization Technology。
VMX主要支持兩種類型的軟件:
(1)Virtual-machine monitors (VMM):虛擬機(jī)監(jiān)控器。
(2)Guest software(VM):虛擬機(jī)。
VMX提供了有兩種類型的處理器的操作(VMX operation):
(1)VMX root operation: VMM運(yùn)行在root mode。
(2)VMX non-root operation:VM運(yùn)行在 non-root mode。
VM-Entry :VMM可以使用 VM-entry instructions,進(jìn)入到VM, 從root mode 切換到 non-root mode, CPU 上運(yùn)行的是虛擬機(jī)。
VM-Exit :當(dāng)VM執(zhí)行了某些特權(quán)指令后, CPU 從 non-root mode切換到root mode,并退出VM。
VMX提供一個(gè)略微受限制的硬件運(yùn)行環(huán)境供客戶機(jī)運(yùn)行,在絕大多數(shù)情況下,客戶機(jī)在此受限環(huán)境中運(yùn)行與原生系統(tǒng)在非虛擬化環(huán)境中運(yùn)行沒有什么兩樣,不需要像軟件虛擬化那樣每條指令都先翻譯再執(zhí)行,而VMM運(yùn)行在root mode,擁有完整的硬件訪問控制權(quán)限。僅僅在少數(shù)必要的時(shí)候,某些客戶機(jī)指令的運(yùn)行才需要被VMM截獲并做相應(yīng)處理,之后客戶機(jī)返回并繼續(xù)在non-root mode中運(yùn)行。可以想見,硬件虛擬化技術(shù)的性能接近于原生系統(tǒng),并且,極大地簡(jiǎn)化了VMM的軟件設(shè)計(jì)架構(gòu)。
比如 QEMU+ KVM。
kvm:KVM虛擬化全稱為kernel-based Virtual Machine,是一個(gè)開源的系統(tǒng)虛擬化模塊,基于內(nèi)核的虛擬機(jī) (KVM) 是針對(duì)包含虛擬化擴(kuò)展(Intel VT 或 AMD-V)的 x86 硬件上的 Linux 的完全原生的虛擬化解決方案。KVM已經(jīng)成為L(zhǎng)inux 內(nèi)核里面的一種加速虛擬機(jī)的功能擴(kuò)展。
KVM 是一個(gè)獨(dú)特的管理程序,通過將 KVM 作為一個(gè)內(nèi)核模塊實(shí)現(xiàn),在虛擬環(huán)境下 Linux 內(nèi)核集成管理程序?qū)⑵渥鳛橐粋€(gè)可加載的模塊可以簡(jiǎn)化管理和提升性能。
2.3 QEMU
這里簡(jiǎn)單的介紹下QEMU:
QEMU(Quick Emulator)最初實(shí)現(xiàn)的虛擬機(jī)是一個(gè)純軟件的實(shí)現(xiàn),通過二進(jìn)制翻譯來實(shí)現(xiàn)虛擬化客戶機(jī)中的CPU指令模擬,所以性能比較低。但是,其優(yōu)點(diǎn)是跨平臺(tái),QEMU支持在Linux、Windows、FreeBSD、Solaris、MacOS等多種操作系統(tǒng)上運(yùn)行,能支持在QEMU本身編譯運(yùn)行的平臺(tái)上就實(shí)現(xiàn)虛擬機(jī)的功能,甚至可以支持客戶機(jī)與宿主機(jī)并不是同一個(gè)架構(gòu)(比如在x86平臺(tái)上運(yùn)行ARM客戶機(jī))。
QEMU也可以基于硬件虛擬化的KVM結(jié)合,為它們提供客戶機(jī)的設(shè)備模擬。通過與KVM結(jié)合,讓虛擬化的性能提升得非常高,即:QEMU+KVM
總結(jié),它有兩種模式:
(1)模擬器:模擬各種硬件,使用的是二進(jìn)制翻譯技術(shù)。
(2)虛擬機(jī):通過ioctl與KVM內(nèi)核模塊進(jìn)行交互,完成虛擬化功能。
三、全虛擬化和半虛擬化
3.1 全虛擬化
全虛擬化(Full Virtualization):客戶機(jī)完全不知道自己運(yùn)行在虛擬化環(huán)境中,還以為自己運(yùn)行在原生環(huán)境里。
客戶機(jī)的操作系統(tǒng)完全不需要改動(dòng)。敏感指令在操作系統(tǒng)和硬件之間被VMM捕捉處理,客戶操作系統(tǒng)無須修改,所有軟件都能在虛擬機(jī)中運(yùn)行。因此,全虛擬化需要模擬出完整的、和物理平臺(tái)一模一樣的平臺(tái)給客戶機(jī),這在達(dá)到了第一個(gè)目標(biāo)的同時(shí)也增加了虛擬化層(VMM)的復(fù)雜度。
注意:
CPU廠商沒有支持硬件虛擬化前:Guest OS的特權(quán)指令無法直接下達(dá)到計(jì)算機(jī)系統(tǒng)硬件執(zhí)行,需要經(jīng)過VMM的捕獲和模擬執(zhí)行(部分難以虛擬化的指令需要通過二進(jìn)制翻譯技術(shù)進(jìn)行轉(zhuǎn)換),由于所有的特權(quán)指令都會(huì)導(dǎo)致 trap,所以在虛擬環(huán)境下特權(quán)指令的執(zhí)行開銷要遠(yuǎn)遠(yuǎn)高于在 原生環(huán)境下。
即:guest os特權(quán)指令->捕獲異常->翻譯->模擬
Guest OS 一條簡(jiǎn)單的特權(quán)指令要通過復(fù)雜的異常處理過程,性能開銷很大。
CPU廠商開始支持硬件虛擬化后::即Intel 的VT-x技術(shù)( AMD : AMD-V ),引入了VMX root operation和VMX non-root operation,這樣host os 和 guest 都有了ring 0和ring 3,硬件這層做了些區(qū)分,這樣全虛擬化下,有些guest os的特權(quán)指令的“捕獲異常-翻譯-模擬”實(shí)現(xiàn)就不需要了,性能得到很大的提升。
KVM、VMware一直都是全虛擬化技術(shù)(目前都是基于硬件輔助的全虛擬化技術(shù))。
3.2 半虛擬化
半虛擬化(Para-Virtualization):客戶機(jī)意識(shí)到自己是運(yùn)行在虛擬化環(huán)境里,并做相應(yīng)修改以配合VMM。
一方面,可以提升性能和簡(jiǎn)化VMM軟件復(fù)雜度;另一方面,也不需要太依賴硬件虛擬化的支持,從而使得其軟件設(shè)計(jì)(至少是VMM這一側(cè))可以跨平臺(tái)且是優(yōu)雅的。
本質(zhì)上,半虛擬化弱化了對(duì)虛擬機(jī)特殊指令的被動(dòng)截獲要求,將其轉(zhuǎn)化成客戶機(jī)操作系統(tǒng)的主動(dòng)通知。但是,半虛擬化需要修改客戶機(jī)操作系統(tǒng)的源代碼來實(shí)現(xiàn)主動(dòng)通知。
典型的半虛擬化技術(shù)就是virtio,使用virtio需要在宿主機(jī)/VMM和客戶機(jī)里都相應(yīng)地裝上驅(qū)動(dòng)。
XEN是最典型的半虛擬化,不過現(xiàn)在XEN也支持硬件輔助的全虛擬化。
3.3 敏感指令
一般來說敏感指令都是特權(quán)指令,但是x86_64系架構(gòu)下有些敏感指令不是特權(quán)指令,有些敏感指令在非特權(quán)模式下執(zhí)行時(shí)不會(huì)拋出異常,此時(shí)VMM無法攔截處理VM的行為。
為了解決這個(gè)問題,提出了二進(jìn)制翻譯的方案(軟件層面):
(1)靜態(tài)翻譯:運(yùn)行前掃描可執(zhí)行的文件,對(duì)敏感指令及進(jìn)行翻譯,形成一個(gè)新的文件。然而靜態(tài)翻譯必須提前處理,而有些指令只有在運(yùn)行時(shí)才會(huì)產(chǎn)生副作用,無法靜態(tài)處理。
(2)動(dòng)態(tài)翻譯:運(yùn)行時(shí)以代碼塊為單元?jiǎng)討B(tài)地修改二進(jìn)制代碼。
后來Intel 從硬件層面解決這個(gè)問題,引入VMX,也就是VT-x技術(shù)。并不是所有的特權(quán)指令都需要VMM攔截處理,只處理敏感指令。當(dāng)guest 內(nèi)部執(zhí)行敏感指令時(shí),就會(huì)從VMX non-root operation 切換到 VMX root operation,即:VM exit。有的特權(quán)指令不需要由VMM介入處理。
3.4 小結(jié)
目前主流的CPU廠商都支持了硬件虛擬化技術(shù),硬件輔助的全虛擬化技術(shù)的性能逐漸逼近半虛擬化,甚至超過了半虛擬化,同時(shí)全虛擬化不需要修改客戶操作系統(tǒng),目前越來越受歡迎。
以virtio為代表的半虛擬化技術(shù)也一直在演進(jìn)發(fā)展,性能上只是略遜于全虛擬化,加之其較少的平臺(tái)依賴性,依然受到廣泛的歡迎。
四、Type1和Type2虛擬化
從軟件框架的角度上,根據(jù)虛擬化層(VMM)是直接位于硬件之上還是在一個(gè)宿主操作系統(tǒng)之上,將虛擬化劃分為Type1和Type2。
4.1 Type 1
Type1 Hypervisor也叫 bare-metal Hypervisor。這類虛擬化層直接運(yùn)行在硬件之上,沒有所謂的宿主機(jī)操作系統(tǒng)。它們直接控制硬件資源以及客戶機(jī)。如下圖所示:
比較出名的就是VMware ESXi:專門構(gòu)建的裸機(jī) Hypervisor,主要面向服務(wù)器。
VMware ESX是可以直接安裝到您的物理服務(wù)器的、可靠的裸機(jī) Hypervisor。通過直接訪問并控制底層資源,VMware ESXi 可有效地對(duì)硬件進(jìn)行分區(qū),以便整合應(yīng)用并降低成本。
功能特性(來源于VMware ESX官網(wǎng)介紹):
ESXi 可將多臺(tái)服務(wù)器整合到較少物理設(shè)備中,從而減少對(duì)空間、電力和 IT 管理的要求,同時(shí)提升性能。
(1)占用空間小
盡管 ESXi 占用空間僅為 150 MB,卻可實(shí)現(xiàn)更多功能,同時(shí)還能最大限度地降低 Hypervisor 的安全風(fēng)險(xiǎn)。
(2)可靠的性能
適應(yīng)任何規(guī)模的應(yīng)用。虛擬機(jī)配置最高可達(dá) 128 個(gè)虛擬 CPU、6 TB 的 RAM 和 120 臺(tái)設(shè)備,以滿足您的所有應(yīng)用需求。咨詢各項(xiàng)解決方案限制以確保您不會(huì)超過您環(huán)境的受支持配置。
(3)增強(qiáng)的安全性
利用強(qiáng)大的加密功能保護(hù)敏感的虛擬機(jī)數(shù)據(jù)。基于角色的訪問可簡(jiǎn)化管理,而廣泛的日志記錄和審核可以更好地落實(shí)責(zé)任,還可更加輕松地進(jìn)行取證分析。
(4)卓越的生態(tài)系統(tǒng)
獲取對(duì)由硬件 OEM 供應(yīng)商、技術(shù)服務(wù)合作伙伴、應(yīng)用和客戶機(jī)操作系統(tǒng)組成的廣泛生態(tài)系統(tǒng)的支持。
(5)方便用戶使用的體驗(yàn)
利用基于 HTML5 標(biāo)準(zhǔn)的內(nèi)置現(xiàn)代 UI 管理日常行政操作。對(duì)于需要實(shí)現(xiàn)運(yùn)維自動(dòng)化的客戶,VMware 提供 vSphere 命令行界面和便于開發(fā)人員使用、基于 REST 的 API。
我自己這周也是第一次接觸這個(gè)VMware ESXi,可以直接安裝在Intel x86_64的物理機(jī)上,不再依存于宿主操作系統(tǒng)。然后直接通過網(wǎng)頁(yè)連上ESXi 服務(wù)器,通過網(wǎng)頁(yè)界面來創(chuàng)建VM(虛擬機(jī)),界面簡(jiǎn)單易用,我自己的感覺就是操作十分簡(jiǎn)單。
4.2 Type 2
Type2 Hypervisor運(yùn)行在一個(gè)宿主機(jī)操作系統(tǒng)之上,這類Hypervisor通常就是宿主機(jī)操作系統(tǒng)的一個(gè)應(yīng)用程序,像其他應(yīng)用程序一樣受宿主機(jī)操作系統(tǒng)的管理。如:
(1)VMwareWorkstation,桌面級(jí)虛擬化產(chǎn)品,運(yùn)行在Windows、Linux和Mac操作系統(tǒng)上。
這也就是我們是經(jīng)常學(xué)習(xí)Linux時(shí)使用的場(chǎng)景:Intel X86_64物理主機(jī)上裝的windows操作系統(tǒng),然后再windows桌面上安裝VMwareWorkstation,VMwareWorkstation也就是windows一個(gè)普通的應(yīng)用程序,然后我們?cè)賄MwareWorkstation創(chuàng)建虛擬機(jī),安裝其他的操作系統(tǒng),并給其分配硬件資源。
(2)Linux系統(tǒng)里,如KVM。
KVM在上面已經(jīng)介紹過一次了,現(xiàn)在梅開二度:
KVM全稱是Kernel-based Virtual Machine,即基于內(nèi)核的虛擬機(jī),是采用硬件虛擬化技術(shù)的全虛擬化解決方案。由于KVM是在硬件虛擬化支持下的完全虛擬化技術(shù),所以它能支持在相應(yīng)硬件上能運(yùn)行的幾乎所有的操作系統(tǒng),如:Linux、Windows、FreeBSD、MacOS等。
這里以QEMU+Linux舉例,如下圖所示:
PS:由于我也是這周才開始看虛擬化,描述的可能不太準(zhǔn)確,請(qǐng)見諒。
CPU和內(nèi)存:
Qemu 將 KVM 整合進(jìn)來,將有關(guān) CPU 指令的部分交由內(nèi)核模塊來做,就是 qemu-kvm。
Guest QMEU + host Linux kernel KVM內(nèi)核模塊用來實(shí)現(xiàn)CPU的虛擬化、內(nèi)存的虛擬化。
KVM 內(nèi)核模塊通過 /dev/kvm 暴露接口,Guest QMEU 可以通過 ioctl 來訪問這個(gè)接口。來提升CPU性能。
只有對(duì)性能要求很高的虛擬設(shè)備才需要由KVM內(nèi)核模塊來負(fù)責(zé)。
網(wǎng)絡(luò)和硬盤:
如果采用全虛擬化的方式會(huì)影響這些設(shè)備的性能。
QMEU 采取半虛擬化的方式,讓 Guest OS 加載驅(qū)動(dòng)VirtIO。然后數(shù)據(jù)會(huì)直接發(fā)送給半虛擬化設(shè)備,經(jīng)過處理,最終發(fā)送給真正的物理硬件。
Guest QMEU中的半虛擬化的驅(qū)動(dòng)程序允許虛擬機(jī)使用優(yōu)化的I/O接口而不使用模擬的設(shè)備,從而為網(wǎng)絡(luò)和塊設(shè)備提供高性能的I/O。
這部分內(nèi)容后面還會(huì)詳細(xì)介紹,這篇文章就到這里結(jié)束了。
總結(jié)
結(jié)束了,畫圖畫的好辛苦…
參考資料
Intel官方手冊(cè) vol3
KVM實(shí)戰(zhàn):原理、進(jìn)階與性能調(diào)優(yōu)
深度探索Linux系統(tǒng)虛擬化
極客時(shí)間:趣談操作系統(tǒng)
https://www.cnblogs.com/LoyenWang/p/13510925.html
https://www.vmware.com/cn/products/esxi-and-esx.html
https://zhuanlan.zhihu.com/p/69629212
https://blog.csdn.net/u011389746/article/details/79948514
https://blog.csdn.net/tony_vip/article/details/105890376
總結(jié)
- 上一篇: 在IE11下设置SharePoint S
- 下一篇: 人生如梦