1. 程式人生 > >虛擬化技術簡介

虛擬化技術簡介

簡單而言,虛擬化(Virtulization)是表示計算機資源的抽象方法。通過虛擬化可以對包括基礎設施,系統和軟體等計算機資源的表示,訪問和管理進行簡化,併為這些資源提供標準的介面來接受輸入和提供輸出。

虛擬化技術有很多種,比如,網路虛擬化,記憶體的虛擬化,桌面虛擬化,應用虛擬化和虛擬記憶體等等。因為篇幅的原因,本系列將重點關注系統虛擬化,特別是X86平臺。今後此係列當中提到的虛擬化皆指系統虛擬化。

系統虛擬化的目的 通過使用虛擬化管理器(Virtual Machine Monitor,簡稱VMM)是在一臺物理機上虛擬和執行一臺或多臺虛擬機器(Virtual Machine,簡稱VM)。VMM主要有兩種形式:

  1. Hypervisor VM ,它直接執行在硬體(Bare Metal)上面,提供接近於物理機的效能,並在I/O上面做了特別多的優化,主要用於伺服器類的應用,也被稱為“Type 1”。
  2. Hosted (託管)VM ,它執行在物理機的作業系統上,雖然其本身效能不如Hypervisor(因為它和硬體之間隔了一層OS),但是其安裝和使用非常方便,而且功能豐富,比如支援三維加速等特性,常用於桌面應用,也被稱為“Type 2”。

系統虛擬機器的分類

由於採用技術的不同,可以將系統虛擬化分為五大類:

硬體模擬(Emulation)

簡介 :屬於Hosted模式,在物理機的作業系統上建立一個模擬硬體的程式(Hardware VM)來模擬所想要的硬體,並在此程式上跑虛擬機器,而且虛擬機器內部的客戶作業系統(Guest OS)無需修改。知名的產品有Bochs,QEMU和微軟的Virtual PC(它還使用少量的全虛擬化技術)。

圖1. 硬體模擬架構圖

優點 :Guest OS無需修改,而且非常適合用於作業系統開發,也利於進行韌體和硬體的協作開發。韌體開發人員可以使用目標硬體 VM 在模擬環境中對自己的實際程式碼進行驗證,而不需要等到硬體實際可用的時候。

缺點 :速度非常慢,有時速度比物理情況慢100倍以上。

未來 :因為速度的問題,漸趨頹勢,但是還應該有一席之地。

全虛擬化 (Full Virtulization)

簡介 :主要是在客戶作業系統和硬體之間捕捉和處理那些對虛擬化敏感的特權指令,使客戶作業系統無需修改就能運 行,速度會根據不同的實現而不同,但大致能滿足使用者的需求。這種方式是業界現今最成熟和最常見的,而且屬於 Hosted 模式和 Hypervisor 模式的都有,知名的產品有IBM CP/CMS,VirtualBox,KVM,VMware Workstation和VMware ESX(它在其4.0版,被改名為VMware vSphere)。

圖2. 全虛擬化架構圖

優點 :Guest OS無需修改,速度和功能都非常不錯,更重要的是使用非常簡單,不論是 VMware 的產品,還是Sun(Oracle?)的 VirtualBox。

缺點 :基於Hosted模式的全虛擬產品效能方面不是特別優異,特別是I/O方面。

未來 :因為使用這種模式,不僅Guest OS免於修改,而且將通過引入硬體輔助虛擬化技術來提高其效能,我個人判斷,在未來全虛擬化還是主流。

半虛擬化(Parairtulization)

簡介 :它與完全虛擬化有一些類似,它也利用Hypervisor來實現對底層硬體的共享訪問,但是由於在 Hypervisor 上面執行的Guest OS已經整合與半虛擬化有關的程式碼,使得Guest OS能夠非常好地配合Hyperivosr來實現虛擬化。通過這種方法將無需重新編譯或捕獲特權指令,使其效能非常接近物理機,其最經典的產品就是 Xen,而且因為微軟的Hyper-V所採用技術和Xen類似,所以也可以把Hyper-V歸屬於半虛擬化。

圖3. 半虛擬化架構圖

優點 :這種模式和全虛擬化相比,架構更精簡,而且在整體速度上有一定的優勢。

缺點 :需要對Guest OS進行修改,所以在使用者體驗方面比較麻煩。

未來 :我覺得其將來應該和現在的情況比較類似,在公有云(比如Amazon EC2)平臺上應該繼續佔有一席之地,但是很難在其他方面和類似VMware vSphere這樣的全虛擬化產品競爭,同時它也將會利用硬體輔助虛擬化技術來提高速度,並簡化架構。

硬體輔助虛擬化 (Hardware Assisted Virtualization)

簡介 :Intel/AMD等硬體廠商通過對部分全虛擬化和半虛擬化使用到的軟體技術進行硬體化(具體將在下文詳 述)來提高效能。硬體輔助虛擬化技術常用於優化全虛擬化和半虛擬化產品,而不是獨創一派,最出名的例子莫過於VMware Workstation,它雖然屬於全虛擬化,但是在它的6.0版本中引入了硬體輔助虛擬化技術,比如Intel的VT-x和AMD的AMD-V。現在市 面上的主流全虛擬化和半虛擬化產品都支援硬體輔助虛擬化,包括VirtualBox,KVM,VMware ESX和Xen。

優點 :通過引入硬體技術,將使虛擬化技術更接近物理機的速度。

缺點 :現有的硬體實現不夠優化,還有進一步提高的空間。

未來 :因為通過使用硬體技術不僅能提高速度,而且能簡化虛擬化技術的架構,所以預見硬體技術將會被大多數虛擬化產品所採用。

作業系統級虛擬化 (Operating System Level Virtualization)

簡介 :這種技術通過對伺服器作業系統進行簡單地隔離來實現虛擬化,主要用於VPS。主要的技術有Parallels Virtuozzo Containers,Unix-like系統上的chroot和Solaris上的Zone等。

圖4. 作業系統級架構圖

優點 :因為它是對作業系統進行直接的修改,所以實現成本低而且效能不錯。

缺點 :在資源隔離方面表現不佳,而且對Guest OS的型號和版本有限定。

未來 :不明朗,我覺得除非有革命性技術誕生,否則還應該屬於小眾,比如VPS。

五大類之間比較

根據個人的經驗,我在效能,使用者體驗和使用場景這三方面對這五大類進行了比較,具體請看下圖:

效能(和物理機速度之比) 使用者體驗 形式
硬體模擬 30%- 簡單 Hosted
全虛擬化 30%-80%+ 簡單 Hosted/Hypervisor
半虛擬化 80%+ 困難 Hypervisor
硬體輔助虛擬化 80%+ 一般 Hosted/Hypervisor
作業系統級虛擬化 80% 困難 類似於Hypervisor

表1. 系統虛擬化五大類之間的比較

因為這表只是我籠統的經驗之談,僅供參考,特別在作業系統級虛擬化這塊。

系統虛擬化的用處

主要有那些用處呢?

  1. 軟體測試 ,通過使用VirtualBox和VMware Workstation來配置測試環境,不僅比物理方式快捷很多,而且無需購買很多昂貴的硬體,更重要的是,通過它們自帶的SnapShot/Pause 功能可以非常方便地將錯誤發生的狀態儲存起來,這樣將極有利於測試員和程式設計師之間的溝通。現在已經有很多軟體都通過虛擬機器的形式進行測試,最著名的例子, 莫過於以VirtualBox虛擬機器形式釋出的Chrome OS測試版。我第一次接觸到虛擬化技術強大威力就是在軟體測試方面。
  2. 桌面應用 ,通過諸如VirtualBox和VMware Workstation等桌面虛擬化軟體能讓使用者使用其他平臺的專屬軟體,比如使用Linux的使用者能夠通過VirtualBox上虛擬的Windows環境來訪問使用ActiveX技術的網上銀行。
  3. 伺服器整合 ,通過 VMware ESX 和 Xen 能夠將多臺物理機上的工作量整合到一臺物理機上。現有普遍的整合率在1:8左右,也就是使用這些軟體能將原本需要八臺物理機的工作量整合到一臺物理機上。 伺服器整合不僅能減低硬體,能源和場地等開支,還能極大地簡化IT架構的複雜度。
  4. 自動化管理 ,通過使用類似DRS(Distributed Resource Scheduling,分散式資源排程),Live Migration(動態遷移),DPM(Distributed Power Management,分散式電源管理)和HA(High Availability,高可用性) 等高階虛擬化管理技術,能極大地提高整個資料中心的自動化管理程度。
  5. 加快應用部署 ,通過引入虛擬化應用釋出格式OVF(Open Virtualization Format),不僅能使第三方應用供應商更方便地釋出應用,而且使系統管理員非常簡單地部署這個應用(大多數情況下只要輕輕一個點選就可以完成整套部署工作)。