企業私有云:虛擬化技術


企業私有云:虛擬化技術


虛擬化技術概述

虛擬化(Virtualization)技術最早出現在 20 世紀 60 年代的 IBM 大型機系統,在70年代的 System 370 系列中逐漸流行起來,這些機器通過一種叫虛擬機監控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成許多可以運行獨立操作系統軟件的虛擬機(Virtual Machine)實例。隨著近年多核系統、集群、網格甚至雲計算的廣泛部署,虛擬化技術在商業應用上的優勢日益體現,不僅降低了 IT 成本,而且還增強了系統安全性和可靠性,虛擬化的概念也逐漸深入到人們日常的工作與生活中。

虛擬化是一個廣義的術語,對於不同的人來說可能意味著不同的東西,這要取決他們所處的環境。在計算機科學領域中,虛擬化代表著對計算資源的抽象,而不僅僅侷限於虛擬機的概念。例如對物理內存的抽象,產生了虛擬內存技術,使得應用程序認為其自身擁有連續可用的地址空間(Address Space),而實際上,應用程序的代碼和數據可能是被分隔成多個碎片頁或段),甚至被交換到磁盤、閃存等外部存儲器上,即使物理內存不足,應用程序也能順利執行。

主流虛擬化方案介紹

虛擬化技術主要分為以下幾個大類:

平臺虛擬化(Platform Virtualization),針對計算機和操作系統的虛擬化。

資源虛擬化(Resource Virtualization),針對特定的系統資源的虛擬化,比如內存、存儲、網絡資源等。

應用程序虛擬化(Application Virtualization),包括仿真、模擬、解釋技術等。

我們通常所說的虛擬化主要是指平臺虛擬化技術,通過使用控制程序(Control Program,也被稱為 Virtual Machine Monitor 或Hypervisor),隱藏特定計算平臺的實際物理特性,為用戶提供抽象的、統一的、模擬的計算環境(稱為虛擬機)。虛擬機中運行的操作系統被稱為客戶機操作系統(Guest OS),運行虛擬機監控器的操作系統被稱為主機操作系統(Host OS),當然某些虛擬機監控器可以脫離操作系統直接運行在硬件之上(如 VMWARE 的 ESX 產品)。運行虛擬機的真實系統我們稱之為主機系統。

平臺虛擬化技術

平臺虛擬化技術又可以細分為如下幾個子類:

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

在傳統操作系統中,所有用戶的進程本質上是在同一個操作系統的實例中運行,因此內核或應用程序的缺陷可能影響到其它進程。操作系統級虛擬化是一種在服務器操作系統中使用的輕量級的虛擬化技術,內核通過創建多個虛擬的操作系統實例(內核和庫)來隔離不同的進程,不同實例中的進程完全不瞭解對方的存在。比較著名的有 Solaris Container,FreeBSD Jail 和 OpenVZ 等。

比如OPENVZ:這個平臺是最便宜的VPS平臺,在各個vps商哪裡都是價格最低的。OPENVZ本身運行在linux之上,它通過自己的虛擬化技術把一個服務器虛擬化成多個可以分別安裝操作系統的實例,這樣的每一個實體就是一個VPS,從客戶的角度來看這就是一個虛擬的服務器,可以等同看做一臺獨立的服務器。OPENVZ虛擬化出來的VPS只能安裝linux操作系統,不能安裝windows系統,比如Centos、Fedora、Gentoo、Debian等。不能安裝windows操作系統是openvz的第一個缺點,需要使用windows平臺的用戶不能使用OPENVZVPS。OPENVZ的第二個缺點是OPENVZ不是完全的虛擬化,每個VPS賬戶共用母機內核,不能單獨修改內核。好在絕大多少用戶根本不需要修改內核,所以這個缺點對多數人可以忽略不計。而這一點也正是openvz的優點,這一共用內核特性使得openvz的效率最高,超過KVM、Xen、VMware等平臺。在不超售的情況下,openvz是最快速效率最高的VPS平臺。

部分虛擬化(Partial Virtualization)

VMM 只模擬部分底層硬件,因此客戶機操作系統不做修改是無法在虛擬機中運行的,其它程序可能也需要進行修改。在歷史上,部分虛擬化是通往全虛擬化道路上的重要里程碑,最早出現在第一代的分時系統 CTSS 和 IBM M44/44X 實驗性的分頁系統中。

全虛擬化(Full Virtualization)

全虛擬化是指虛擬機模擬了完整的底層硬件,包括處理器、物理內存、時鐘、外設等,使得為原始硬件設計的操作系統或其它系統軟件完全不做任何修改就可以在虛擬機中運行。操作系統與真實硬件之間的交互可以看成是通過一個預先規定的硬件接口進行的。全虛擬化 VMM 以完整模擬硬件的方式提供全部接口(同時還必須模擬特權指令的執行過程)。舉例而言,x86 體系結構中,對於操作系統切換進程頁表的操作,真實硬件通過提供一個特權 CR3 寄存器來實現該接口,操作系統只需執行 "mov pgtable,%%cr3"彙編指令即可。全虛擬化 VMM 必須完整地模擬該接口執行的全過程。如果硬件不提供虛擬化的特殊支持,那麼這個模擬過程將會十分複雜:一般而言,VMM 必須運行在最高優先級來完全控制主機系統,而 Guest OS 需要降級運行,從而不能執行特權操作。當 Guest OS 執行前面的特權彙編指令時,主機系統產生異常(General Protection Exception),執行控制權重新從 Guest OS 轉到 VMM 手中。VMM 事先分配一個變量作為影子 CR3 寄存器給 Guest OS,將 pgtable 代表的客戶機物理地址(Guest Physical Address)填入影子 CR3 寄存器,然後 VMM 還需要 pgtable 翻譯成主機物理地址(Host Physical Address)並填入物理 CR3 寄存器,最後返回到 Guest OS中。隨後 VMM 還將處理複雜的 Guest OS 缺頁異常(Page Fault)。比較著名的全虛擬化 VMM 有 Microsoft Virtual PC、VMware Workstation、Sun Virtual Box、Parallels Desktop for Mac 和 QEMU。

超虛擬化(Paravirtualization)

這是一種修改 Guest OS 部分訪問特權狀態的代碼以便直接與 VMM 交互的技術。在超虛擬化虛擬機中,部分硬件接口以軟件的形式提供給客戶機操作系統,這可以通過 Hypercall(VMM 提供給 Guest OS 的直接調用,與系統調用類似)的方式來提供。例如,Guest OS 把切換頁表的代碼修改為調用 Hypercall 來直接完成修改影子 CR3 寄存器和翻譯地址的工作。由於不需要產生額外的異常和模擬部分硬件執行流程,超虛擬化可以大幅度提高性能,比較著名的 VMM 有 Denali、Xen。

硬件輔助虛擬化(Hardware-Assisted Virtualization)

硬件輔助虛擬化是指藉助硬件(主要是主機處理器)的支持來實現高效的全虛擬化。例如有了 Intel-VT 技術的支持,Guest OS 和 VMM 的執行環境自動地完全隔離開來,Guest OS 有自己的""套寄存器",可以直接運行在最高級別。因此在上面的例子中,Guest OS 能夠執行修改頁表的彙編指令。Intel-VT 和 AMD-V 是目前 x86 體系結構上可用的兩種硬件輔助虛擬化技術。

這種分類並不是絕對的,一個優秀的虛擬化軟件往往融合了多項技術。例如 VMware Workstation 是一個著名的全虛擬化的 VMM,但是它使用了一種被稱為動態二進制翻譯的技術把對特權狀態的訪問轉換成對影子狀態的操作,從而避免了低效的 Trap-And-Emulate 的處理方式,這與超虛擬化相似,只不過超虛擬化是靜態地修改程序代碼。對於超虛擬化而言,如果能利用硬件特性,那麼虛擬機的管理將會大大簡化,同時還能保持較高的性能。

KVM架構圖


企業私有云:虛擬化技術


分享到:


相關文章: