圖2-1 虛擬化技術(shù)中各組成部分關(guān)系圖
(4) 完全虛擬化(Full virtualization)
在完全虛擬化中, Hypervisor 通過模擬一個相應(yīng)的硬件設(shè)備使客戶機(jī)操作系統(tǒng)在虛擬機(jī)模擬的硬件環(huán)境中運(yùn)行。這種方案正是1960 年IBM 大型機(jī)所使用的虛擬化技術(shù)。故也有人稱它為原始虛擬化。在這種技術(shù)中, 虛擬機(jī)扮演客戶操作系統(tǒng)(Guest OS) 和原始硬件之間協(xié)調(diào)者的角色。故硬件設(shè)備上的特定受保護(hù)指令必須被捕獲下來并在Hypervisor 中進(jìn)行處理, 防止虛擬機(jī)同時訪問某些資源時造成操作沖突。
(5) 部分虛擬化(Partial virtualization)
Hypervisor 只模擬部分底層硬件, 因此客戶機(jī)操作系統(tǒng)不進(jìn)行修改是無法在虛擬機(jī)中運(yùn)行的。在計(jì)算機(jī)的歷史中, 部分虛擬化是通往全虛擬化道路上的重要里程碑, 它最早出現(xiàn)在第一代的分時系統(tǒng)CTSS 和IBM M44/44X 實(shí)驗(yàn)性的分時系統(tǒng)中。雖然有時候這并不被視為一般意義上的虛擬機(jī), 但這在歷史上是非常重要的一頁。
(6) 半虛擬化(Para – virtualization)
半虛擬化(也有資料將para – virtualization 翻譯為平行虛擬化) Hypervisor 提供特殊的編程接口供客戶機(jī)操作系統(tǒng)使用, 故客戶機(jī)操作系統(tǒng)必須經(jīng)過改造才能夠在半虛擬化環(huán)境中運(yùn)行。由于半虛擬化技術(shù)使客戶操作系統(tǒng)直接與硬件交互, 故性能上會比全虛擬化要好。然而由于使用了Hypervisor 提供的特殊編程接口, 所以客戶操作系統(tǒng)必須定制, 從而失去了向不同硬件平臺移植的方便性。同時, 因?yàn)榭蛻魴C(jī)使用特殊編程接口可直接與硬件交互, 當(dāng)某一個客戶機(jī)對硬件操作不當(dāng)時, 就將會影響該硬件上所有客戶操作系統(tǒng)的運(yùn)行。
(7) 操作系統(tǒng)層虛擬化(OS – level virtualization)
在操作系統(tǒng)層虛擬化中, 獨(dú)立主機(jī)被虛擬化在操作系統(tǒng)層中, 可使得多個獨(dú)立虛擬化的服務(wù)器運(yùn)行在一臺計(jì)算機(jī)上。客戶操作系統(tǒng)環(huán)境與宿主服務(wù)器分享同一個操作系統(tǒng), 例如,相同的系統(tǒng)內(nèi)核被用來創(chuàng)建客戶機(jī)環(huán)境。程序運(yùn)行在被視為獨(dú)立系統(tǒng)的客戶機(jī)環(huán)境中。簡單講就是將操作系統(tǒng)劃貳豹獨(dú)立分區(qū)供不同用戶使用, 用戶在使用的時候感覺像在使用一臺獨(dú)立的計(jì)算機(jī)。操作系統(tǒng)層虛擬化不需要安裝客戶操作系統(tǒng), 但只能虛擬與本操作系統(tǒng)相同的虛擬機(jī)。比如Sun 的Solaris 操作系統(tǒng), 使用這種技術(shù)可在Solaris 操作系統(tǒng)中虛擬化多個彼此獨(dú)立的操作系統(tǒng)空間供用戶使用。
(8) 動態(tài)遷移(Live Migration)
動態(tài)遷移就是在一個虛擬機(jī)運(yùn)行的狀態(tài)下, 將它從一臺計(jì)算機(jī)遷移到另外一臺計(jì)算機(jī)。試想這樣一種情況: 某組織有兩臺服務(wù)器A 與B, 各有16 個CPU, 在服務(wù)器A 上運(yùn)行著8個虛擬機(jī), 每個虛擬機(jī)使用1 個CPU。而服務(wù)器B 上也同樣運(yùn)行著8 個虛擬機(jī), 且每個虛擬機(jī)也只用1 個CPU。而且這樣的狀況持續(xù)了相當(dāng)長的時間, 兩臺服務(wù)器的利用率都只有50%。如果服務(wù)器A、B 上的Hypervisor 支持動態(tài)遷移, 我們就可以把服務(wù)器B 上的所有虛擬機(jī)移動到服務(wù)器A 上, 并關(guān)閉服務(wù)器B。既提高了服務(wù)器A 的使用效率, 又節(jié)省了一個服務(wù)器的資源, 可謂是一種“綠色環(huán)保技術(shù)”(英語里稱Green IT)。同時, 動態(tài)遷移還可發(fā)揮自動恢復(fù)的作用, 當(dāng)硬件出稀筆題時, 自動遷移到之前配置的其他硬件上。
(9) 硬件輔助虛擬化
硬件輔助虛擬化需要硬件提供支持, 幫助創(chuàng)建虛擬機(jī), 監(jiān)視并允許客戶機(jī)操作系統(tǒng)獨(dú)立運(yùn)行。硬件輔助虛擬化是在1972 年, 為了使用第一個虛擬機(jī)操作系統(tǒng)VM/370, 第一次由IBM System/370 引入。在2005 年與2006 年, Intel 和AMD 分別為虛擬化提供了額外的硬件支持。Intel 稱之為VT, AMD 稱之為AMD – V。硬件輔助虛擬化是指借助硬件(主要是主機(jī)處理器) 的支持來實(shí)現(xiàn)高效的全虛擬化。Guest OS 和Hypervisor 的執(zhí)行環(huán)境自動地完全隔離開來, Guest OS 有自己的“全套寄存器”, 可以直接運(yùn)行在最高級別。Intel – VT 和AMD – V是目前x86 體系結(jié)構(gòu)上可用的兩種硬件輔助虛擬化技術(shù)。
對于硬件輔助虛擬化, 首先需要弄清楚在傳統(tǒng)平臺下哪些因素限制了虛擬化性能的發(fā)揮。虛擬化技術(shù)使得人們可以在一臺物理服務(wù)器上運(yùn)行多個不同的虛擬機(jī)。這就要求一臺物理服務(wù)器可以創(chuàng)建和管理多個虛擬系統(tǒng)。而虛擬化技術(shù)的核心在于Hypervisor, 它是成功完成多個虛擬化相關(guān)任務(wù)的關(guān)鍵。Hypervisor 同時管理多個不同的操作系統(tǒng)實(shí)例, 并且掌管這些實(shí)例間的進(jìn)程切換, 從而保證每個虛擬機(jī)都可以訪問到底層的處理器、內(nèi)存和本地磁盤等硬件資源。它通過競爭機(jī)制在不同的實(shí)例之間分配計(jì)算資源, 同時還要保證不同虛擬機(jī)之間的相對獨(dú)立性。
而在Intel 和AMD 推出相應(yīng)的硬件輔助虛擬化技術(shù)之前, 虛擬化平臺的性能問題主要集中于處理器中缺少對應(yīng)的內(nèi)部指令集, 因而無法保證處理器的虛擬化任務(wù)可以高效完成。這些虛擬化任務(wù)的分配是在軟件層面實(shí)現(xiàn)的, 因此會在虛擬機(jī)體驗(yàn)、資源控制和效率等方面表現(xiàn)得非常差。簡單地講就是: 如果某個虛擬機(jī)做壞事, 則整個服務(wù)器都受到影響。而AMD和Intel 都在致力于新的處理器升級開發(fā)以滿足新增加的虛擬化方面的需求。這些升級減少(甚至是消除) 了客戶操作系統(tǒng)之間的資源爭奪和限制, 從而極大改善了虛擬機(jī)實(shí)例的安全性和性能。
還有一種需求是從硬件廠商的角度出發(fā), 由于Hypervisor 提供給虛擬機(jī)很多訪問基礎(chǔ)硬件設(shè)備的方法, 而如果一個虛擬機(jī)由于操作不慎訪問了不該訪問的底層硬件控制接口, 就會對其他計(jì)算機(jī)造成影響, 所以硬件廠商需要提供特殊的接口以確保虛擬機(jī)之間在硬件層面互不干擾。
Intel – VT 技術(shù)被Intel 認(rèn)為是一項(xiàng)針對高端個人計(jì)算機(jī)及服務(wù)器的新技術(shù)。只有高端的Intel CPU 才加入這種技術(shù)。而AMD 的AMD – V 技術(shù)浴被廣泛應(yīng)用于AMD 新推出的CPU中, 比如Phenom II 羿龍。
不管是Intel 還是AMD 它們的硬件輔助虛擬化技術(shù), 對于開發(fā)人員而言最后就是一組CPU 指令集。但不同廠商間的CPU 指令集不能兼容。比如Intel – VT 的Flex Migration (動態(tài)遷移) 功能允許在虛擬化平臺中快速、方便地在多個支持Intel – VT 指令集的物理服務(wù)器之間遷移虛擬機(jī)。但這項(xiàng)擴(kuò)展的遷移功能無法適用于AMD 處理器平臺。在不同處理器廠商平臺之間的遷移, 可能會導(dǎo)致嚴(yán)重的性能問題, 甚至發(fā)生系統(tǒng)故障。所以在搭建云基礎(chǔ)設(shè)施時既要考慮到成本問題又要考慮到基礎(chǔ)設(shè)施兼容性問題。
在實(shí)際的工作中, 全虛擬化與半虛擬化技術(shù)應(yīng)用比較廣泛, 我們將挑選幾類較為常見而恰比較容易獲得的虛擬化產(chǎn)品著重介紹。