雲端運算: 虛擬化類別

虛擬化有好幾種不同的方法和類別,各自都有適用的特定情況。

Kai Hwang、Jack Dongarra、Geoffrey Fox

摘錄自《Distributed and Cloud Computing: From Parallel Processing to the Internet of Things》(Syngress,Elsevier 印刷書籍)

一般來說,虛擬機器 (VM) 架構有三種典型的類別 — Hypervisor、主機式虛擬化和並行虛擬化,由虛擬化層的位置加以區分。 而 Hypervisor 又稱為 Virtual Machine Monitor (VMM)。

Hypervisor 架構

Hypervisor 支援在裸機裝置 (如 CPU、記憶體、磁碟和網路介面) 上進行硬體層級的虛擬化。 Hypervisor 軟體直接位於實體硬體和 OS 之間, 而此虛擬化層就稱為 VMM 或 Hypervisor。

Hypervisor 為虛擬作業系統和應用程式提供 Hypercall。 Hypervisor 可以採用像是 Microsoft Hyper-V 的微核心架構, 也可以採用像是 VMware ESX 的整合型 Hypervisor 架構來進行伺服器虛擬化。

微核心 Hypervisor 只包含基本和不變的功能 (例如實體記憶體管理和處理器排程)。 裝置驅動程式和其他可變的元件則在 Hypervisor 之外。 而整合型 Hypervisor 會實作上述所有功能,包括裝置驅動程式的功能。

也因此,微核心 Hypervisor 的 Hypervisor 程式碼大小比整合型 Hypervisor 小。 基本上,Hypervisor 必須能夠將實體裝置轉換成虛擬資源,專供部署的 VM 使用。

Xen 架構

Xen 是由康橋大學所開發的開放原始碼 Hypervisor 程式。 Xen 系統的核心元件是 Hypervisor、核心和應用程式。 這三種元件體系很重要。

Xen 是一種微核心 Hypervisor,會將原則與機制區隔。 Xen Hypervisor 會實作所有機制,而將原則留給 Domain 0 來處理。它原本並不包含任何裝置驅動程式, 而只是提供機制讓虛擬作業系統能夠直接存取實體裝置。

因此,Xen Hypervisor 的大小都保持得很小。 Xen 提供的虛擬環境位於硬體和 OS 之間。 有不少廠商正在開發商用 Xen Hypervisor;Citrix XenServer 和 Oracle VM 都包括在其中。

跟其他虛擬化系統一樣,許多虛擬作業系統也可以在 Hypervisor 上執行。 不過,並非所有虛擬作業系統都平起平坐,而是由其中一個控制其他作業系統。 擁有控制能力的虛擬作業系統稱為 Domain 0,其他則稱為 Domain U。Domain 0 是 Xen 具特權的虛擬作業系統。 Xen 開機時會在沒有任何可用檔案系統驅動程式的情況下先載入 Domain 0, 它是為了直接存取硬體和管理裝置而設計的。 因此,Domain 0 的職責之一就是為虛擬網域 (即 Domain U 網域) 配置和對應硬體資源。

例如,Xen 是以 Linux 為主,且其安全性層級為 C2。 其管理 VM 名為 Domain 0,它對於實作在相同主機上的其他 VM 具備管理權限。 Domain 0 若是遭到入侵,駭客就能夠控制整個系統。

因此在 VM 系統中,您需要安全性原則來提高 Domain 0 的安全性。做為 VMM 的 Domain 0 可讓使用者像操控檔案一樣輕鬆地建立、複製、儲存、讀取、修改、共用、移轉和復原 VM。 不幸的是,這也會在軟體生命週期與資料存留期增添安全性問題。

傳統上,您可以把一台機器的存留期想像成一直線。 該機器的目前狀態是隨著軟體執行持續進展的點。 您在這段期間進行設定變更、安裝軟體,以及套用修補程式。

在這類環境中,VM 狀態就像一棵樹: 在任何時間點,執行作業可能進入 N 個不同的分支,使得 VM 的多個執行個體可能在任何特定時間存在於這個樹狀結構的任一點。 VM 可在執行時復原為先前狀態 (例如,為了修正設定錯誤),或多次從相同的時間點重新執行 (例如,做為散發動態內容或傳播「即時」系統映像的途徑)。

透過完全虛擬化進行二進位轉譯

視實作技術而定,硬體虛擬化可分為兩種類別: 完全虛擬化與主機式虛擬化。

完全虛擬化並不需要修改主機 OS, 它是靠二進位轉譯來攔截特定不可虛擬化的機密指示的執行,並將之虛擬化。 虛擬作業系統及其應用程式是由非關鍵和關鍵指示所組成。

在主機式系統中,同時會用到主機作業系統和虛擬作業系統。 虛擬軟體層是建置在主機作業系統與虛擬作業系統之間。

完全虛擬化

進行完全虛擬化時,非關鍵指示會直接在硬體上執行,同時會探索關鍵指示並以攔截的方式取代至要由軟體模擬的 VMM。 Hypervisor 和 VMM 兩種方法都視為完全虛擬化。

為什麼只會將關鍵指示攔截至 VMM 呢? 這是因為二進位轉譯可能會產生大量的效能負荷。 非關鍵指示並不會控制硬體或威脅系統的安全性,而關鍵指示會。 因此,在硬體上執行非關鍵指示不但可以提升效率,還可以確保系統安全性。

VMware 與許多其他軟體公司都是實作這種方法。 VMM 會掃描指示資料流,並識別具特權、並且對控制和行為敏感的指示。 這些指示一經識別,便會被攔截到 VMM,來模擬這些指示的行為。 此模擬中所用的方法就稱為二進位轉譯。

因此,完全虛擬化結合了二進位轉譯與直接執行。 虛擬作業系統與基礎硬體完全分開, 虛擬作業系統故此並不知道它已經被虛擬化了。

完全虛擬化的效能可能不盡理想,因為當中涉及二進位轉譯,而這是非常耗時的作業。 要將耗用大量 I/O 資源的應用程式完全虛擬化是一大挑戰。 二進位轉譯會使用程式碼快取來存放已轉譯的熱指示,以便提升效能,但這也提高了記憶體使用的代價。 x86 架構上的完全虛擬化效能通常是主機電腦上的 80% 到 97%。

主機式虛擬化

另一種替代的 VM 架構是將虛擬化層安裝在主機作業系統上。 這個主機作業系統仍然負責管理硬體。 而虛擬作業系統會安裝並在虛擬化層上執行。 專用的應用程式可在 VM 上執行。 其他一些應用程式也可以直接與主機作業系統執行。

這種主機式架構有一些明顯的優點。 首先,使用者不用修改主機作業系統就能夠安裝此 VM 架構。 虛擬化軟體可以仰賴主機作業系統提供裝置驅動程式和其他低階服務。 如此可簡化 VM 的設計並使部署作業更加簡單。

其次,主機式方法需要進行眾多主機設定。 與 Hypervisor/VMM 架構相較之下,主機式架構的效能可能也很低。 當應用程式要求存取硬體時,需要四個對應層,這明顯會折損效能。 當虛擬作業系統的 Internet Security and Acceleration (ISA) 不同於基礎硬體的 ISA 時,就必須採用二進位轉譯。 雖然主機式架構具備彈性,但是效能可說是低到不切實際。

並行虛擬化

並行虛擬化需要修改虛擬 OS。 並行虛擬化的 VM 提供一個特殊的 API,要求在使用者應用程式中進行大量的 OS 修改。 效能折損是虛擬化系統的一大問題。 有誰會想用速度比實體機器慢很多的 VM 呢。

您可以將虛擬化層插入機器軟體堆疊中的不同位置。 但是,並行虛擬化會嘗試降低虛擬化負荷,藉著只修改虛擬作業系統核心來提升效能。 將虛擬作業系統並行虛擬化時,有個智慧編譯器會協助它們以 Hypercall 來取代不可虛擬化的 OS 指示。

傳統的 x86 處理器提供四個指示執行圈: Ring 0、1、2 和 3。圈數越低,表示執行的指示權限越高。 OS 負責管理硬體和具特權的指示在 Ring 0 執行,而使用者層級的應用程式在 Ring 3 執行。核心式 VM (KVM) 是並行虛擬化最佳的例子。

當將 x86 處理器虛擬化時,會在硬體與 OS 之間插入虛擬化層。 根據 x86 圈的定義,Ring 0 也應該安裝虛擬化層。在 Ring 0 有不同的指示可能會導致一些問題。 不過,如果虛擬作業系統核心針對虛擬化經過修改,就無法再直接在硬體上執行了。

雖然並行虛擬化可降低負荷,但也會招致其他問題。 首先,它的相容性和可攜性可能不定,因為它也必須支援未經修改的 OS。 其次,維護並行虛擬化 OS 的成本很高,因為它們可能需要大幅修改 OS 核心。

最後,並行虛擬化在效能方面的效益會因工作負載的變化而產生極大差異。 與完全虛擬化相比,並行虛擬化相當簡單且更切實。 完全虛擬化的主要問題出在它在二進位轉譯方面的效能不佳。 而加速二進位轉譯並不容易。 因此,許多虛擬化產品都採用並行虛擬化架構。 廣受歡迎的 Xen、KVM 和 VMware ESX 都是很好的例子。

KVM 是硬體輔助的並行虛擬化工具,可提升效能並支援 Windows、Linux、Solaris 和其他 Unix 變體等未經修改的虛擬作業系統。

這是 Linux 並行虛擬化系統,屬於 Linux 2.6.20 版核心的一部分。 現有的 Linux 核心會完成記憶體管理和排程活動, 其餘則由 KVM 負責,這要比控制整台機器的 Hypervisor 來得簡單。

與完全虛擬化架構不同,也就是在執行階段攔截和模擬具特權且機密的指示,並行虛擬化是在編譯階段處理這些指示。 虛擬作業系統核心會經過修改並以對 Hypervisor 或 VMM 的 Hypercall 來取代具特權且機密的指示。 Xen 正是這類並行虛擬化架構的例子。

具特權的指示是經由對 Hypervisor 的 Hypercall 實作。 以 Hypercall 取代指示之後,修改過的虛擬作業系統會模擬原始虛擬作業系統的行為。 在 Unix 系統上,系統呼叫包括攔截常式或服務常式。 Hypercall 在 Xen 中會套用專用的服務常式。

許多這些不同類型的虛擬化架構各有不同的優缺點。 仔細審查每種架構,就可以將最合適的架構運用到您的環境。

Kai Hwang

**Kai Hwang**是南加大電腦工程系的教授,並在中國清華大學擔任客座教授。 他自加州大學柏克萊分校取得 EECS 的博士學位, 並在電腦架構、數位算術、並行處理、分散式系統、網際網路安全性和雲端運算等方面的著作甚豐。

Jack Dongarra

Jack Dongarra是田納西大學電機工程與資訊科學系的大學特聘教授,以及美國橡樹嶺國家實驗室 (Oak Ridge National Laboratory) 的傑出研究員,同時是曼徹斯特大學的 Turing 院士。 Dongarra 是超級電腦基準、數字分析、線性代數解算器和高效能運算等領域的先驅,並且在這些領域的著作甚豐。

Geoffrey Fox

Geoffrey Fox是印第安納大學資訊學、計算及物理學系的特聘教授,也是該所大學資訊及計算學院的研究所副所長。 他自英國康橋大學取得博士學位。 Fox 因他在並行架構、分散式程式設計、網格運算、Web 服務和網際網路應用程式的綜合研究與廣泛著作而享負盛名

©2011 Elsevier Inc. 保留一切權利。 Syngress 授權印刷,為 Elsevier 印刷書籍。 版權所有 2011 年。《Distributed and Cloud Computing: From Parallel Processing to the Internet of Things》,由 Kai Hwang、Jack Dongarra、Geoffrey Fox 合著。 如需有關本書及其他類似書籍的詳細資訊,請瀏覽 elsevierdirect.com。

相關內容