Linux Virtualiztion—概述

Linux Virtualiztion

首先計算機虛擬化技術是多種技術的綜合實現,它包括硬件平臺、操作系統、存儲及網絡等。
簡單來說,虛擬化技術就是在單臺主機上虛擬多個虛假主機,並可以在這些虛擬機上運行不同的操作系統平臺。虛擬化技術的出現可以節約大量的硬件資源與能源資源消耗,降低資金成本,虛擬化現在已經是每個企業必有的項目。目前所提供的比較成熟的虛擬化解決方案主要有VMware、Xen、KVM和Kyper-V等。虛擬化技術是通過Hypervsion動態模擬於分配計算機硬件資源給虛擬機操作系統Guest OS,由於Hypervsion可以模擬多個硬件資源給多個Guest OS,所以對於Guest OS來說,它們就像是運行在獨立、真實的硬件資源上一樣。

Linux Virtualiztion—概述

虛擬化技術的類型有主機虛擬化,容器虛擬化,系統庫虛擬化和應用程序級虛擬化;

主機虛擬化類型分爲Type-I和Type-II兩種,Type-I物理硬件上直接運行的不是操作系統而是一個專門的虛擬化管理器(VMM,Hypervisor),在此基礎上所有操作系統都是運行於虛擬機實例之中;Type-II是於硬件級別上運行一個OS,通常稱爲“HOST OS”,就是宿主機的操作系統;而後在這個宿主機操作系統上安裝並運行一個虛擬化管理器(VMM,Hypervisor),在VMM上再創建並安裝虛擬機和對應的OS,通常稱爲“Guest OS”,即虛擬機操作系統; 主機虛擬化所用到的主要技術有CPU虛擬化、內存虛擬化、和IO虛擬化。

按照虛擬化程度可分爲全虛擬化、半虛擬化、硬件輔助虛擬化。

CPU全虛擬化技術主要採用優先級壓縮技術(Ring Compression)和 二進制代碼翻譯技術(Binary Translation)。優先級壓縮技術讓VMM和Guest 運行在不同的特權級下
CPU半虛擬化技術主要採用Hypercall 技術。Guest OS 的部分代碼被改變,從而使Guest OS會將和特權指令相關的操作都轉換爲發給VMM的Hypercall(超級調用),由VMM繼續進行處理。而Hypercall支持的批處理和異步這兩種優化方式,使得通過Hypercall 能得到近似於物理機的速度
CPU硬件輔助虛擬化技術
目前主要有Intel 的VT-x和AMD的AMD-V這兩種技術。其核心思想都是通過引入新的指令和運行模式,使VMM和Guest OS分別運行在不同模式(ROOT 模式和非ROOT模式)下,且Guest OS 運行在Ring 0 下。通常情況下,Guest OS 的核心指令可以直接下達到計算機系統硬件執行,而不需要經過VMM。當Guest OS執行到特殊指令的時候,系統會切換到VMM,讓VMM來處理特殊指令。CPU的虛擬化技術可以單CPU模擬多CPU並行,允許一個平臺同時運行多個操作系統,並且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。

內存虛擬化,KVM 通過內存虛擬化共享物理系統內存,動態分配給虛擬機,爲了在一臺機器上運行多個虛擬機,KVM 需要實現 VA(虛擬內存) -> PA(物理內存) -> MA(機器內存)直接的地址轉換。虛機 OS 控制虛擬地址到客戶內存物理地址的映射 (VA -> PA),但是虛機 OS 不能直接訪問實際機器內存,因此 KVM 需要負責映射客戶物理內存到實際機器內存 (PA -> MA)。

內存全虛擬化技術通過使用影子頁表(Shadow Page Table)實現虛擬化。VMM 爲每個Guest 都維護一個影子頁表,影子頁表維護虛擬地址(VA)到機器地址(MA)的映射關係。而Guest頁表維護VA到客戶機物理地址(GPA)的映射關係。當VMM捕獲到Guest 頁表的修改後,VMM 會查找負責GPA 到MA 映射的P2M 頁表或者哈希函數,找到與該GPA對應的MA,再將MA填充到真正在硬件上起作用的影子頁表,從而形成 VA 到 MA 的映射關係。而 Guest 的頁表則無需變動。
內存半虛擬化技術通過使用頁表寫入法實現虛擬化。Guest OS 在創建一個新的頁表時,會向VMM註冊該頁表。之後在 Guest 運行的時候,VMM 將不斷的管理和維護這個表,使Guest 上面的程序能直接訪問到合適的地址。
 內存硬件輔助虛擬化技術通過擴展頁表EPT(extended page table)實現虛擬化。
 EPT通過使用硬件虛擬化技術,使其能在原有的頁表的基礎上,增加一個EPT頁表,用於記錄GPA到MA的映射關係。VMM預先把EPT頁表設置到CPU中。Guest 修改Guest 頁表,無需VMM干預。地址轉換時,CPU 自動查找兩張頁表完成 Guest 虛擬地址到機器地址的轉換,從而降低整個內存虛擬化所需的開銷。

IO虛擬化:服務器單個千兆以太網端口肯定能夠支持單個應用,但是當被分割爲10個、15個或者更多的服務器負載時(這其中包括網絡、存儲以及服務器之間的流量)可能就不夠用了。當遇到I/O瓶頸時,CPU會空閒下來等待數據,計算效率會大大降低--I/O瓶頸最終會打敗虛擬化所帶來的資源使用效率的提升。故虛擬化也必須擴展至I/O系統,在工作負載、存儲以及服務器之間動態共享帶寬,能夠最大化地利用網絡接口。通過緩解服務器I/O潛在的性能瓶頸,服務器能夠承載更多的工作負載並提升其性能。

常見的IO虛擬化主要有三種方案:基於軟件模擬的方案,這種方案裏, 中斷、DMA的訪問都是通過軟件實現的,優點是可以模擬任何硬件的模型,缺點是性能不會太好;半虛擬化技術,主要是爲了解決軟件模擬性能問題,比如串口對性能要求不高可以採用軟件模擬,但是磁盤設備、網卡設備對性能要求高,主流方案是採用半虛擬化技術,前後端相互感知,通過Shared Memory控制請求的傳輸,兩個設備之間的通知也是基於快速消息傳遞,性能很高;設備直通模式,比如PCIE的直通、網卡SROV直通,對性能更高的可以採用此模式,可以達到和物理機上直接使用接近的性能,但是設備和虛擬機的耦合會對管理造成影響

Linux目前流行的開源虛擬化技術解決方案:主機虛擬化:Type-I:Xen;Type-II:kvm,virtualbox。容器級虛擬化:lxc(Linux Container),docker,libcontainer,openvz(VMS)等等

Xen(半虛擬化)

Xen由XenSource開發, 一個開源免費的操作系統級準虛擬技術. 回顧一下半虛擬技術, Hypervisor和操作系統共同協作, 雖然操作系統需要做一些修改, 但是性能上比較接近於原始性能.
Xen需要與系統共同協作(客戶操作系統需要修改), 只有打過補丁的系統才能使用Xen. 從Linux角度來看, Linux本身是開源的, 結果是Xen的性能要好於全虛擬化技術. 但是從系統支持(比如支持其它非開源的操作系統)的角度來看, 這顯然是一個不足之處.
在Xen上可以運行Windows客戶機, 但需要Intel Vanderpool或AMD Pacifica處理器的支持. 其它支持的操作系統包括Minix, Plan 9, NetBSD, FreeBSD, 和OpenSolaris.

KVM虛擬化技術

KVM是基於x86架構上Linux操作系統的全虛擬化解決方案,kvm就工作在內核環境之中,所以它的執行效率很高,它需要Intel VT-x和AMD AMD-v的技術支持。
KVM的組件:
兩類組件:
/dev/kvm:工作爲Hypervisor,在用戶空間中可以通過ioctl()系統調用與內核中的kvm模塊進行交互,從而完成虛擬機的創建、刪除、啓動、停止等各種管理功能;
qemu-kvm進程:工作於用戶空間,用於實現IO設備的模擬,也是kvm進行各種IO訪問的加速器;
kvm模塊被裝載至內核,系統的運行模式:
Hypervisor模式:裝載了kvm模塊的原操作系統內核,將運行爲Hypervisor模式;
用戶模式:Host OS的原用戶模式,用於代Guest OS發送IO請求;
內核模式:Guest OS執行IO類的操作或其他特殊指令操作時的工作模式;也被稱爲"Guest-Kernel"模式;
來賓模式:Guest OS的用戶模式,用於所有的非IO類請求;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章