漫談虛擬化之一虛擬化綜述
前面咱比較全面的介紹了云計算,趁熱打鐵,咱們索性把云計算的基礎(chǔ)技術(shù) —“虛擬化”展開來聊一下,以便各位小伙伴對云計算有更為完整的認識。
1. 概述
我們常說云計算是一種按使用量付費的模式,這種模式能夠快速的提供可用的、便捷的、按需的網(wǎng)絡(luò)訪問,進入可配置的資源共享池(包括計算、網(wǎng)絡(luò)、存儲、應(yīng)用和服務(wù)),并,用戶只需投入很少的管理工作。云計算是將 IT 資源作為一種服務(wù)的業(yè)務(wù)模式,是產(chǎn)業(yè)形態(tài),它不是一種具體的技術(shù),云計算通常通過互聯(lián)網(wǎng)來提供動態(tài)易擴展且經(jīng)常是虛擬化的資源,旨在降低 IT 成本并幫助用戶專注于他們的核心業(yè)務(wù),而不是讓 IT 成為他們的阻礙。
“虛擬化”可以被認為是云計算主要的支撐技術(shù)之一。虛擬化將應(yīng)用程序和數(shù)據(jù)在不同層次以不同的面貌展現(xiàn),讓用戶能夠更加便捷的使用、開發(fā)及維護這些應(yīng)用程序及數(shù)據(jù)。虛擬化不但允許 IT 部門添加、減少移動硬件和軟件到它們想要的地方。虛擬化還為組織帶來靈活性,從而改善 IT 運維和減少成本支出。
需要注意的是,云計算和虛擬化雖然是密切相關(guān)的,但是虛擬化對于云計算來說并不是必須的。云計算將各種 IT 資源以服務(wù)的方式通過互聯(lián)網(wǎng)交付給用戶,然而虛擬化本身并不能給用戶提供服務(wù)。二者可以通過優(yōu)勢互補為用戶提供更優(yōu)質(zhì)的服務(wù)。云計算方案使用虛擬化技術(shù)使整個 IT 基礎(chǔ)設(shè)施的資源部署更靈活。反過來,虛擬化方案也可以引入云計算的理念,為用戶提供按需使用的資源和服務(wù)。
2. 虛擬化綜述
2.1 為什么需要虛擬化
傳統(tǒng) x86 服務(wù)器的構(gòu)架是在每臺物理服務(wù)器上通過唯一的操作系統(tǒng)(例如 Windows, Linux etc.)進行管理,大多數(shù)情況下每個操作系統(tǒng)僅有一個負載。而且,也很難在服務(wù)器上運行多個主應(yīng)用程序,否則可能會產(chǎn)生沖突和性能問題。
這么做會導致服務(wù)器資源在大部分時間內(nèi)的利用率很低。正如前面所討論的,物理機的大部分性能都被浪費,我們必須在浪費硬件資源和降低運行風險之間尋找平衡。隨著業(yè)務(wù)的增長,隨之而來的成本壓力也變化,相關(guān)管理效率也會變低,需消耗的資源也會變大。
2.2 什么是虛擬化
早期虛擬化(Virtualization)技術(shù)最早出現(xiàn)在 20 世紀 60 年代的 IBM 大型機系統(tǒng)中,并在 70 年代的 System 370 系列中逐漸流行起來,這些機器通過一種叫虛擬機監(jiān)控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成許多可以運行獨立操作系統(tǒng)軟件的虛擬機(Virtual Machine)實例。隨著近年多核系統(tǒng)、集群、網(wǎng)格以及云計算的廣泛部署,虛擬化技術(shù)在商業(yè)應(yīng)用上的優(yōu)勢日益體現(xiàn),不僅降低了 IT 成本,而且還增強了系統(tǒng)安全性和可靠性,虛擬化的概念也逐漸深入到人們?nèi)粘5墓ぷ髋c生活中。
虛擬化是一個廣義的術(shù)語,對于不同的人來說可能意味著不同的東西,這要取決他們所處的環(huán)境。在 IT 領(lǐng)域中,虛擬化代表著對計算資源的抽象,而不僅僅局限于虛擬機的概念。例如對物理內(nèi)存的抽象,產(chǎn)生了虛擬內(nèi)存技術(shù),使得應(yīng)用程序認為其自身擁有連續(xù)可用的地址空間(Address Space),而實際上,應(yīng)用程序的代碼和數(shù)據(jù)可能是被分隔成多個碎片頁或段),甚至被交換到磁盤、閃存等外部存儲器上,即使物理內(nèi)存不足,應(yīng)用程序也能順利執(zhí)行。
這里,虛擬化 Virtualization 定義包括兩層含義:
(1)虛擬化是 IT 資源的邏輯表示,其不受物理限制的約束;
(2)虛擬化技術(shù)通過在軟件系統(tǒng)中加入虛擬化層,將下層的資源抽象成另一種形式的資源,供給上層應(yīng)用。
咱們還是通過示意圖來理解:
虛擬化的重要目標之一就是提高管理效率,從而降低成本、提高硬件使用率,把管理變得更加輕松。虛擬化的主攻方向集中在控制實體服務(wù)器的配置數(shù)量,并將物理機上的操作系統(tǒng)及應(yīng)用程序,無縫轉(zhuǎn)移至虛擬機上,以便集中管理這些不同平臺的虛擬環(huán)境。
2.3 虛擬化的基本原理
判定一個計算機系統(tǒng)能否被虛擬化,或者說一個能夠被稱為 VMM 的控制程序,需要滿足一下條件:
(1)資源控制:控制程序必須能夠管理所有的系統(tǒng)資源。
(2)等價性:在控制程序管理下運行的程序(包括操作系統(tǒng)),除時序和資源可用性之外的行為,應(yīng)該與沒有控制程序時完全一致,且預先編寫的特權(quán)指令可以自由地執(zhí)行。
(3)效率性:絕大多數(shù)的客戶機指令應(yīng)該由主機硬件直接執(zhí)行而無需控制程序參與。
由于傳統(tǒng)的 x86 體系結(jié)構(gòu)缺乏必要的硬件支持,任何控制程序都無法直接滿足上述條件,所以 x86 不是一個可虛擬化架構(gòu),但是我們可以使用軟件實現(xiàn)的方式構(gòu)造 VMM。
經(jīng)典的 CPU 虛擬化方法主要使用“特權(quán)解除”(Privilege deprivileging) 和“陷入-模擬”(Trap-and-Emulation) 的方式。即:將 Guest OS 運行在非特權(quán)級(特權(quán)解除),而將 VMM 運行于最高特權(quán)級(完全控制系統(tǒng)資源)。解除了 Guest OS 的特權(quán)后,Guest OS 的大部分指令仍可以在硬件上直接運行,只有當執(zhí)行到特權(quán)指令時,才會陷入到 VMM 模擬執(zhí)行(陷入-模擬)。下面我們更為詳細的解釋一下這種機制
我們知道虛擬機是對真實計算環(huán)境的抽象和模擬,VMM 需要為每個虛擬機分配一套數(shù)據(jù)結(jié)構(gòu)來管理它們狀態(tài),包括虛擬處理器的全套寄存器,物理內(nèi)存的使用情況,虛擬設(shè)備的狀態(tài)等等。
VMM 調(diào)度虛擬機時,將其部分狀態(tài)恢復到主機系統(tǒng)中。并非所有的狀態(tài)都需要恢復,例如主機 CR3 寄存器(Control Rigister 控制寄存器,包括 CR0-CR3)中存放的是 VMM 設(shè)置的頁表物理地址,而不是 Guest OS 設(shè)置的值。主機處理器直接運行 Guest OS 的機器指令,由于 Guest OS 運行在低特權(quán)級別,當訪問主機系統(tǒng)的特權(quán)狀態(tài)(如寫 GDT 寄存器)時,權(quán)限不足導致主機處理器產(chǎn)生異常,將運行權(quán)自動交還給 VMM。此外,外部中斷的到來也會導致 VMM 的運行。VMM 可能需要先將 該虛擬機的當前狀態(tài)寫回到狀態(tài)數(shù)據(jù)結(jié)構(gòu)中,分析虛擬機被掛起的原因,然后代表 Guest OS 執(zhí)行相應(yīng)的特權(quán)操作。
最簡單的情況,如 Guest OS 對 CR3 寄存器的修改,只需要更新虛擬機的狀態(tài)數(shù)據(jù)結(jié)構(gòu)即可。一般而言,大部分情況下,VMM 需要經(jīng)過復雜的流程才能完成原本簡單的操作。最后 VMM 將運行權(quán)還給 Guest OS,Guest OS 從上次被中斷的地方繼續(xù)執(zhí)行,或處理 VMM “塞”入的虛擬中斷和異常。這種經(jīng)典的虛擬機運行方式就是 Trap-And-Emulate,虛擬機對于 Guest OS 完全透明,Guest OS 不需要任何修改,但是 VMM 的設(shè)計會比較復雜,系統(tǒng)整體性能受到明顯的損害。
3. 虛擬化的基本特征
我們一般認為虛擬化包括四方面的基本特征:
(1)分區(qū):即在單一物理機上同時運行多個虛擬機。
分區(qū)意味著虛擬化層擁有為多個虛擬機劃分服務(wù)器資源的能力;每個虛擬機可以同時運行一個單獨的操作系統(tǒng)(相同或不同的操作系統(tǒng)),使得用戶能夠在一臺服務(wù)器上運行多個應(yīng)用程序;每個操作系統(tǒng)只能看到虛擬化層為其提供的“虛擬硬件”(虛擬網(wǎng)卡、CPU、內(nèi)存等),使它認為運行在自己的專用服務(wù)器上。
(2)隔離:在同一物理機上的虛擬機之間是相互隔離的。
這意味著一個虛擬機的崩潰或故障(例如,操作系統(tǒng)故障、應(yīng)用程序崩潰、驅(qū)動程序故障,等等)不會影響同一物理機上的其它虛擬機;
一個虛擬機中的病毒、蠕蟲等與其它虛擬機相隔離,就像每個虛擬機都位于單獨的物理機上一樣;
不但可以進行資源控制以提供性能隔離,可以為每個虛擬機指定最小和最大資源使用量,以確保某個虛擬機不會占用所有資源而使得同一系統(tǒng)中的其它虛擬機無資源可用;
還可以在單一機器上同時運行多個負載/應(yīng)用程序/操作系統(tǒng),而不會出現(xiàn)前面提到的,由于傳統(tǒng) x86 服務(wù)器體系結(jié)構(gòu)的局限性所導致的那些問題(應(yīng)用程序沖突、DLL 沖突等)。
(3)封裝:整個虛擬機都保存在文件中,可以通過移動文件的方式來遷移該虛擬機。
也就是說整個虛擬機(包括硬件配置、BIOS 配置、內(nèi)存狀態(tài)、磁盤狀態(tài)、CPU 狀態(tài))都儲存在獨立于物理硬件的一組文件中。這樣,使用者只需復制幾個文件就可以隨時隨地根據(jù)需要復制、保存和移動虛擬機。
(4)相對于硬件獨立:無需修改就可以在任何服務(wù)器上運行虛擬機。
因為虛擬機運行在虛擬化層之上,所以操作系統(tǒng)只能看到虛擬化層提供的虛擬硬件;而且這些虛擬硬件也同樣不必考慮物理服務(wù)器的情況;這樣,虛擬機就可以在任何 x86 服務(wù)器(IBM、Dell、HP 等)上運行而無需進行任何修改。這打破了操作系統(tǒng)和硬件以及應(yīng)用程序和操作系統(tǒng)/硬件之間的約束,也就是實現(xiàn)了解耦。