一、計算虛擬化概述 隨著云計算的不斷普及,云計算、虛擬化等名詞逐漸被大眾所熟知,但是兩者的概念卻經(jīng)常會讓人混淆。云計算不是一項具體的技術(shù),而是一種資源交付模型,云計算1.0是以虛擬化為基礎(chǔ),并在此之上進一步發(fā)展的。那么虛擬化又是什么呢? 在早期的“煙囪式架構(gòu)”中,軟硬件是耦合的,物理服務(wù)器被一個操作系統(tǒng)占用,資源利用率非常低。虛擬化技術(shù)出現(xiàn)后,可以通過Hypervisor在同一物理服務(wù)器上運行多個虛擬機,每個虛擬機都是一個完整的系統(tǒng)。虛擬化技術(shù)將軟硬件解耦,大幅度提高了資源的利用率。 虛擬化中有以下重要概念: Hypervisor(虛擬化管理程序):位于物理機與虛擬機之間的“元”操作系統(tǒng),用于創(chuàng)建和執(zhí)行虛擬機。 Virtual Machine(虛擬機):在Hypervisor上運行的虛擬計算機,具有分區(qū)、隔離、封裝、獨立等特點。 Guest OS(客戶操作系統(tǒng)):運行在虛擬機上的操作系統(tǒng),與普通操作系統(tǒng)相同,不需要進行修改即可在虛擬機上運行。 前面提到的虛擬化是針對于CPU、內(nèi)存、IO設(shè)備等計算資源,因此稱為計算虛擬化。計算虛擬化可以將計算資源池化,而Hypervisor是虛擬化技術(shù)的核心,計算虛擬化就是通過Hypervisor向用戶提供標(biāo)準(zhǔn)的虛擬機。 二、Hypervisor概述 Hypervisor也稱為VMM(Virtual Machine Monitor,虛擬機監(jiān)視器),是一種運行在物理服務(wù)器和虛擬機系統(tǒng)之間的中間軟件層,可允許多個虛擬機共享一套物理基礎(chǔ)設(shè)施。當(dāng)Hypervisor被啟動并執(zhí)行時,會為虛擬機分配CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等硬件資源,并加載虛擬機的客戶操作系統(tǒng)。 Hypervisor的架構(gòu)主要分為兩種: 1.裸機型Hypervisor 裸機型是指Hypervisor運行在物理服務(wù)器上,Guest OS對硬件的訪問必須通過Hypervisor完成。Hypervisor作為底層硬件的直接操作者,擁有硬件的驅(qū)動程序,可以直接管理和調(diào)用硬件資源。 裸機型代表是ESXi、Xen、Hyper-V以及KVM。 2.宿主型Hypervisor 宿主型是指Hypervisor之下還有一層宿主操作系統(tǒng),Guest OS對硬件的訪問必須經(jīng)過宿主操作系統(tǒng)。虛擬機上的應(yīng)用程序調(diào)用硬件資源需要經(jīng)過多層(VM內(nèi)核→Hypervisor→主機內(nèi)核),但可以充分利用宿主操作系統(tǒng)提供設(shè)備驅(qū)動和底層服務(wù)來進行內(nèi)存管理、進程調(diào)度和資源管理等。 宿主型代表是Workstation、Virtual PC、Virtual Server以及GSX Server。 由于宿主型Hypervisor性能較低和開源生態(tài)優(yōu)勢等原因,目前很多廠商都是使用基于裸機型Hypervisor中KVM架構(gòu)的計算虛擬化。KVM(Kernel-based Virtual Machine,基于內(nèi)核的虛擬機)是一種基于Linux內(nèi)核的虛擬化開源技術(shù),其使用Linux調(diào)度器進行管理,因此核心源碼非常少。 KVM運行在內(nèi)核空間,屬于Linux內(nèi)核中的一個模塊,可以提供CPU和內(nèi)存的虛擬化,但還需要一個運行在用戶空間用于模擬虛擬機硬件的組件。QEMU是一個完整的開源模擬器軟件,可以作為模擬虛擬機硬件的用戶空間工具。 Linux內(nèi)核為內(nèi)核空間的程序,可以直接管理所有物理設(shè)備。Linux系統(tǒng)上的服務(wù)則為用戶空間的程序,需要使用內(nèi)核的接口提供服務(wù)。 三、Hypervisor的技術(shù)實現(xiàn) 計算虛擬化對物理資源的虛擬可分為CPU虛擬化、內(nèi)存虛擬化和I/O虛擬化,實現(xiàn)方式可分為全虛擬化、半虛擬化和硬件輔助虛擬化。 1.CPU虛擬化 x86架構(gòu)CPU有四個特權(quán)級(Ring0~Ring3),用來隔離系統(tǒng)軟件和應(yīng)用軟件執(zhí)行的指令。特權(quán)指令是指只能在CPU最高特權(quán)級(內(nèi)核態(tài))執(zhí)行的指令,而大部分的可讀寫關(guān)鍵資源的指令都是特權(quán)指令。如果不在CPU內(nèi)核態(tài)執(zhí)行特權(quán)指令,便會引發(fā)異常由系統(tǒng)軟件處理非法訪問(陷入)。 實現(xiàn)虛擬化的經(jīng)典方式是使用“特權(quán)解除、陷入模擬”,即將Hypervisor運行在最高特權(quán),Guest OS運行在非特權(quán)級。解除Guest OS的特權(quán)級后,大部分指令仍然可以直接在硬件上運行,只有執(zhí)行特權(quán)指令時,才會陷入到Hypervisor模擬執(zhí)行。 CPU全虛擬化是將Hypervisor運行在Ring0,Guest OS運行在Ring1。Hypervisor為Guest OS提供CPU模擬,將指令翻譯成真實的CPU指令,相當(dāng)于Guest OS運行在模擬的Ring0上。CPU全虛擬化的虛擬機具有完全的物理機特性,Guest OS無需進行修改即可運行,兼容性高,但是所有指令都需要經(jīng)過Hypervisor翻譯,因此性能較差。 CPU半虛擬化是通過修改Guest OS的代碼,將特權(quán)指令相關(guān)操作轉(zhuǎn)交給Hypercall(超級調(diào)用),由運行在Ring0的Hypervisor處理。CPU半虛擬化的性能要優(yōu)于CPU全虛擬化,但是需要修改Guest OS(Windows不支持修改),依賴于特定的Hypervisor,因此半虛擬化被很多虛擬化廠商放棄。 CPU硬件輔助虛擬化是通過引入新的CPU指令和運行模式,使Hypervisor和Guest OS運行在不同的模式,即Root模式和Non-root模式。這兩個模式都有Ring0~Ring3特權(quán)級,Hypervisor運行在Root模式的Ring0,Guest OS運行在Non-root模式的Ring0。CPU硬件輔助虛擬化提升了性能且無需修改Guest OS,因此成為了發(fā)展趨勢,而KVM就是基于硬件輔助虛擬化Intel-VT和AMD-V技術(shù)。 2.內(nèi)存虛擬化 虛擬內(nèi)存是一種計算機系統(tǒng)內(nèi)存管理機制,可以將物理內(nèi)存抽象化,為應(yīng)用程序提供連續(xù)的虛擬內(nèi)存地址(64位系統(tǒng)地址空間為2^64)。系統(tǒng)將虛擬地址空間和物理地址空間分別劃分為大小相同的頁,并通過頁表記錄地址之間的映射關(guān)系,MMU(內(nèi)存管理單元)根據(jù)頁表完成虛擬地址到物理地址的轉(zhuǎn)換。 在計算虛擬化中,Hypervisor管理系統(tǒng)的內(nèi)存資源,虛擬機也有內(nèi)存管理機制,因此有VA(客戶機虛擬地址)、PA(客戶機物理地址)、MA(宿主機機器地址)三層映射關(guān)系,而內(nèi)存虛擬化需要完成VA到MA的轉(zhuǎn)換。 內(nèi)存全虛擬化是使用SPT(影子頁表)實現(xiàn),Hypervisor為Guest OS的每個頁表維護一個VA到MA映射關(guān)系,并與Guest OS的頁表保持同步的影子頁表,Hypervisor通過影子頁表直接完成VA到MA的轉(zhuǎn)換。內(nèi)存全虛擬化中的Guest OS無需感知地址轉(zhuǎn)換,但是影子頁表需要由Hypervisor維護并與Guest OS頁表保持同步,因此性能較差。 內(nèi)存半虛擬化是由Hypervisor截獲Guest OS對頁表的寫入請求,直接將VA到MA的映射關(guān)系寫入到Guest OS的頁表中,Guest OS根據(jù)修改過的頁表直接完成VA到MA的轉(zhuǎn)換。內(nèi)存半虛擬化的性能有較大提升,但是需要修改Guest OS以寫入VA到MA的映射關(guān)系。 內(nèi)存硬件輔助虛擬化是由Hypervisor將PA到MA的映射關(guān)系設(shè)置到CPU中,Guest OS修改頁表無需Hypervisor的干擾,CPU自動查找兩張頁表完成VA到MA的轉(zhuǎn)換。內(nèi)存硬件輔助虛擬化提升了性能且無需修改Guest OS,相關(guān)技術(shù)有SLAT(Intel EPT、AMD NPT)。 3.I/O虛擬化 從CPU的角度來看,外設(shè)是通過一組I/O資源訪問的設(shè)備,因此設(shè)備相關(guān)的虛擬化被稱為I/O虛擬化。Hypervisor通過I/O虛擬化來復(fù)用有限的設(shè)備資源,包括顯卡、網(wǎng)卡和硬盤等。 I/O全虛擬化是通過Hypervisor截取虛擬機的I/O請求,以軟件的形式模擬虛擬機I/O設(shè)備。I/O全虛擬化無需修改Guest OS即可完成I/O操作,但是整個過程是通過軟件模擬,虛擬機的I/O請求需要與Hypervisor進行多次交互,因而開銷較大、性能較差。 I/O半虛擬化是由Guest OS提供前端驅(qū)動,Hypervisor提供后端驅(qū)動,前端驅(qū)動通過通信機制,將虛擬機的I/O請求發(fā)送給Hypervisor的后端驅(qū)動處理。I/O半虛擬化需要Guest OS實現(xiàn)前端驅(qū)動,后端驅(qū)動容易成為瓶頸,但是性能相當(dāng)于I/O全虛擬化有很大提升,相關(guān)技術(shù)有Virtio。 I/O硬件輔助虛擬化是指I/O直通或透傳技術(shù),其原理是將I/O設(shè)備直接分配給虛擬機,使虛擬機不需要經(jīng)過Hypervisor,可以直接訪問I/O設(shè)備。I/O硬件輔助虛擬化無需修改Guest OS且性能很好,但是需要硬件的支持,相關(guān)技術(shù)有IOMMU(Intel VT-d、SR-IOV等)。 |
|