虛擬化軟件架構分類
服務器虛擬化是云計算非常關鍵的技術之一,虛擬化的含義很廣泛,包括服務器、存儲、網絡以及數據中心虛擬化。其宗旨就是將任何一種形式的資源抽象成另一種形式的技術都是虛擬化。今天我們討論一下服務器虛擬化架構的分類。
寄居虛擬化: 虛擬化管理軟件作為底層操作系統(Windows或Linux等)上的一個普通應用程序,然后通過其創建相應的虛擬機,共享底層服務器資源。
裸金屬虛擬化: Hypervisor是指直接運行于物理硬件之上的虛擬機監控程序。它主要實現兩個基本功能:首先是識別、捕獲和響應虛擬機所發出的CPU特權指令或保護指令;其次,它負責處理虛擬機隊列和調度,并將物理硬件的處理結果返回給相應的虛擬機。
操作系統虛擬化: 沒有獨立的hypervisor層。相反,主機操作系統本身就負責在多個虛擬服務器之間分配硬件資源,并且讓這些服務器彼此獨立。一個明顯的區別是,如果使用操作系統層虛擬化,所有虛擬服務器必須運行同一操作系統(不過每個實例有各自的應用程序和用戶賬戶),Virtuozzo/OpenVZ/Docker等等。
混合虛擬化: 混合虛擬化模型同寄居虛擬化一樣使用主機操作系統,但不是將管理程序放在主機操作系統之上,而是將一個內核級驅動器插入到主機操作系統內核。這個驅動器作為虛擬硬件管理器(VHM)協調虛擬機和主機操作系統之間的硬件訪問。可以看到,混合虛擬化模型依賴于內存管理器和現有內核的CPU調度工具。就像裸金屬虛擬化和操作系統虛擬化架構,沒有冗余的內存管理器和CPU調度工具使這個模式的性能大大提高。
各種架構對比
裸金屬虛擬化架構與混合虛擬化架構將是未來虛擬化架構發展的趨勢,配合硬件輔助虛擬化可以達到接近物理機的運行性能。KVM、Hyper-V、VMware等主流服務器虛擬化都支持硬件輔助虛擬化。
內存虛擬化
在虛擬環境里,虛擬化管理程序就要模擬使得虛擬出來的內存仍符合客戶機OS對內存的假定和認識。在虛擬機看來,物理內存要被多個客戶OS同時使用;解決物理內存分給多個系統使用,客戶機OS內存連續性問題。
要解決以上問題引入了一層新的客戶機物理地址空間來讓虛擬機OS看到一個虛擬的物理地址,并由虛擬化管理程序負責轉化成物理地址給物理處理器執行。即給定一個虛擬機,維護客戶機物理地址到宿主機物理地址之間的映射關系;截獲虛擬機對客戶機物理地址的訪問,將其轉化為物理地址。
內存全虛擬化: 虛擬化管理程序為每個Guest都維護一個影子頁表,影子頁表維護虛擬地址(VA)到機器地址(MA)的映射關系。
內存半虛擬化技術: 當Guest OS創建一個新的頁表時,其會向VMM注冊該頁表,之后在Guest運行的時候,VMM將不斷地管理和維護這個表,使Guest上面的程序能直接訪問到合適的地址。
硬件輔助內存虛擬化: 在原有的頁表的基礎上,增加了一個EPT(擴展頁表)頁表,通過這個頁表能夠將Guest的物理地址直接翻譯為主機的物理地址。