這是小弟之前所寫的文章,刊登在公司發行的刊物"中華技術"上,分享出來給需要的人參考
原文刊於中華技術(ISSN1818-4464)76期2007年10月發行
關鍵詞
虛擬化、Virtualization、Virtual Machine、Virtual Architecture、Virtual Server
摘要
資訊系統對於現今企業的競爭力雖然愈形重要,然而一般企業的IT預算卻難有顯著增加,如何在有限的預算中儘可能達成企業的營運需求,正是IT人員面臨的嚴肅課題;透過伺服器的虛擬化技術,IT人員可以在資訊系統的應用成長與設備的擴充上取得平衡點。
本文將介紹伺服器虛擬化的主要原理、技術類別、市場現況與未來發展,並分享台灣世曦工程顧問股份有限公司(以下簡稱台灣世曦)導入與建置的經驗。
壹、前言
隨著企業不斷成長的資訊需求,伺服器部署數量越來越多,機房的基礎設施如電力、空調、空間等也越趨不敷使用,外加既有機房的基礎設施調整更新不易,因應伺服器擴增所衍生的間接成本也越來越高。故此,伺服器的虛擬化技術與相關運用乃因應而生,且後續發展可期。
就虛擬化的技術而言,其實早已廣泛存於現今的資訊系統架構中,只是x86平台的伺服器虛擬化架構現在才受到關注與討論。當前,尚有諸多IT人員仍停留於「伺服器虛擬化=效能不彰」的迷思中,殊不知透過適當的伺服器虛擬化技術與良好的資訊系統架構規劃設計,將可使IT資源的投資與應用相得益彰,發揮得更有效率,在整體效用上更可符合企業對於資訊系統的投資期望。
台灣世曦早在2002年(中華顧問工程司時期)起即開始於PC端應用虛擬技術,隨後於2005年導入伺服器的虛擬化應用,至今(2007年)台灣世曦已有40%的伺服器以虛擬化型態提供服務,隨著資訊系統應用需求的快速成長及系統設備持續更新,虛擬化的比率預計將逐步提升到50%以上。
本文係由鑽研伺 服器虛擬化原理甚深且實務經驗豐富的Jedi主筆,將本公司自財團法人年代乃至轉投資成立公司期間,有關伺服器虛擬化的理論研析、實驗測試、系統規劃 設計、及建置運作等寶貴經驗,擇其精華與工程界先進分享。文章內容先就伺服器虛擬化的演進、技術、應用與市場現況作一簡介,並闡述本公司伺服器虛擬化的演 進過程、系統架構規劃主體構思,最後根據本公司實際執行經驗,對於虛擬伺服器的優缺點及伺服器虛擬化的未來發展趨勢,作一簡要總結與建言。
貳、伺服器虛擬化的演進
資訊系統的虛擬技術可依架構與抽象程度分成五種類別(如表1)[1],分別是硬體抽象層虛擬技術Hardware Abstraction Layer、 指令集虛擬技術Instruction Set Level、作業系統層虛擬技術Operating System Level、函數層虛擬技術Library Level、應用層虛擬技術Application Level,而伺服器的虛擬化便是基於Hardware Abstraction Layer、 Instruction Set Level、Operating System Level這三種技術來發展的。
伺服器虛擬化的概念起始於1960年IBM的大型主機[2][3],往後數十年間伺服器的虛擬化相關應用也一直侷限於大型主機上,而x86平台的伺服器受限於軟硬體架構的設計與效能限制,在虛擬化的進展上始終非常緩慢也遲遲無商業化的應用,惟近年來x86平台伺服器已發展成市場的主流且效能與穩定性也愈趨值得信賴。其實在約60%以上的應用環境中,當前x86平台伺服器其效能已遠超出應用程式所需,如此伺服器便有冗餘的效能,造成資源與投資的雙重浪費。
在1990年代後期,便開始有資訊廠商注意到這潛在趨勢與需求,推出了x86平台的虛擬化軟體。早期虛擬化技術讓使用者與技術人員還存在者許多存疑,虛擬化可靠嗎?效能如何?應用系統執行於虛擬平台上總有一種不踏實感,而確實當時虛擬化的成熟度的確不甚理想,所以相關的應用大多僅存在於IT的測試環境中(LAB)。
隨著相關虛擬化技術廠商的努力,及硬體效能不斷演進,約在2003年x86平台伺服器的虛擬化技術已開始有較多正式商業化的應用。而伴隨著開放原碼社群的蓬勃發展,除了商業軟體廠商外,現在開放原碼社群也對虛擬化投注新的能量,有眾多的虛擬化專案與技術正快速發展中,有些甚至已取得業界廣泛支持,型成新興的技術標準。
表1、虛擬技術類別[1]
虛擬技術類別 | 產品/技術範例 |
Application Level Virtualization | Java Virtual Machine、Microsoft .NET CLI |
Library Level Virtualization | WINE |
Operating System Level Virtualization | KVM |
Instruction Set Level Virtualization | QEMU、 Bochs |
Hardware Abstraction Layer Virtualization | VMWare、Virtual PC、Xen |
參、伺服器的虛擬化技術
伺服器的虛擬架構可分兩個面向來說明,分別是虛擬主機(VM Server)的核心技術與虛擬機器(VMs)的虛擬化環境。
一、虛擬主機(VM Server)核心技術
伺服器虛擬化的主要原理便是在傳統硬體平台上加了一管理層,泛稱為Hypervisor亦可稱為VMM (Virtual Machine Monitor)虛擬管理平台,Hypervisor是一個非常底層的虛擬化程序,Hypervisor把諸如CPU(中央處理器)和記憶體等硬體資源虛擬化,表面上來看每個VMs皆獨占CPU、記憶體及其它硬體資源,但實際上皆由Hypervisor來控制著彼此間的存取與資源分配,基於此基本原理,虛擬主機(VM Server)的核心技術又可區分如下:
(一)硬體虛擬化(Hardware Virtualization)
硬體虛擬技術起源於大型主機,如IBM、HP、SUN和Unisys等廠商都發展過相關的技術,Unix伺服器上的硬體虛擬化主要透過MBB(Modular Building Block)架構來實體區隔系統與運算架構[4],在相關的大型Unix伺服器上既可以運行一個OS(Operating System),也可以運行多個OS,這種類型的硬體虛擬化優點是穩定度與安全性,缺點是系統資源分配不易。隨著x86平台技術的演進,AMD和Intel也開始在x86平台中導入以CPU為核心的硬體虛擬化架構,可預見硬體虛擬化將是往後主導x86平台伺服器虛擬化的關鍵技術。
(二)軟體虛擬化(Software Virtualization)
軟體虛擬化依Hypervisor技術發展可區分成Type-1 Hypervisor與Type-2 Hypervisor[1][5]。
Type-1 Hypervisor(如圖1)是核心層或OS層虛擬化,透過修改OS Kernel,讓VMM直接與OS結合,減少過多指令碼轉譯的損耗,藉此增加VMs的運作效能,由於此類型虛擬化的效能較佳,未來勢必成為虛擬技術的主流。這類產品以VMware ESX Server與開放原碼平台的Xen、KVM為代表。
Type-2 Hypervisor(如圖2)需要運行在OS之上,透過軟體虛擬化技術創造一個完整的系統環境,在其上運行各類的OS,VMs透過VMM來存取被授權的硬體資源。這類型虛擬化的優點為可以模擬一個完整的系統環境(包括硬體資源等),所以只要模擬環境得宜,VMs的OS可以完全不經修改便可順利執行,但其主要缺點亦為此,由於整個系統環境都是模擬的,系統得花費更多資源於訊息、指令碼的轉譯上,所以效能的損耗較高,不太適合應用於以效能為前提的環境中。這類產品以VMware Workstation/Server與Microsoft Virtual PC/Server為代表。
三)雙劍合壁(軟體虛擬化與硬體虛擬化的結合)
Type-1 Hypervisor的架構雖已進一步增強了VMs的系統效能,但是VMM仍需依附著OS,而一般的OS架構過於複雜,且部分核心層的虛擬化技術如Xen,在考慮到效能因素並未提供全虛擬化的環境,VMs的OS必需配合對其核心略作修改,才能執行於虛擬化環境中,這在開放原碼的Linux上不是問題,Linux可以輕易配合虛擬環境的要求做必要修正,但在Microsoft Windows平台上,這個問題便非常棘手,所幸隨著AMD與Intel CPU虛擬化技術的提出,核心層的虛擬化技術如Xen便可以提供一個全虛擬化環境供VMs使用,因此如Microsoft Windows平台的OS便可不修改核心順利執行於上述的虛擬化環境中,借此核心層虛擬化與硬體虛擬化技術結合所提供的虛擬化環境得以適合更多的系統平台,且透過硬體虛擬化技術的支援,VMs可直接存取硬體資源,不再需要透過VM Server OS的轉介,效能更佳。而Hypervisor透過硬體虛擬化的直接支援,將不再需要耗費資源在硬體資源的轉介與模擬上,系統也變的更輕量化。
二、虛擬機器(VMs)虛擬化環境
要談到VMs的虛擬化環境,就必須了解CPU的系統架構限制[6][7],x86 CPU一共有4個不同優先順序,術語稱為Ring,從Ring 0~Ring 3(如圖3)。Ring 0的優先順序最高,Ring 3最低。在一般情況下,Ring 0是被用於運行OS Kernel,Ring 1和Ring 2是用於OS服務,Ring 3用於應用程式,也就是說在一般的x86操作環境中,OS是運行在受保護的Ring 0下,而虛擬技術就是得要解決上述的系統限制。
VMs的虛擬化環境主要分成兩大類,一是全虛擬化,一是半虛擬化,以下分別來說明其主要差異。
(一)全虛擬化技術(Full Virtualization)/純虛擬化(Native Virtualization)
在全虛擬化擬環境中,虛擬化的OS和硬體資源間存在著一層管理層,即VMM,VMM會提供特定的硬體資源給VMs使用,VMs便執行在相關的虛擬硬體資源上,VMs不會察覺自己執行在虛擬環境中,這就像電影駭客任務(The Matrix)中那些未被解救的人類,渾然不覺自己其實是存在於電腦所虛擬出來的世界中。這種技術雖不需修改OS Kernel,但也不是完全實現所有的硬體支援,全虛擬化通常是以降低性能來換取系統的相容性,因為所有的硬體資源都是模擬的,所以會有系統轉換上的損耗,且為了系統相容度,其所模擬的硬體周邊往往是早期的產品,也更進一步降低了VMs的效能,以當前VMware所提供的虛擬環境為例,模擬的晶片組便是Intel BX系列,而此系列的晶片組遠在1990年代末期便推出,故可能無法滿足現況所需。然而全虛擬化技術在硬體虛擬化技術被提出後,又有了不同的面貌,透過硬體虛擬化技術的支援, VMs便可以直接存取驅動相關的實體硬體資源,如此便可以解決上述所面臨的問題。全虛擬化技術的相關應用如VMware、Microsoft Virtual PC/Server與KVM。
(二)半虛擬化/準虛擬化(Paravirtualization)
半虛擬化環境中依舊存在著VMM,這種技術不模擬硬體,而是提供一套API要求修改OS Kernel,Guest OS都清楚自己運行於虛擬環境中,如此VMM便可以更有效率的管理所有的系統硬體資源,且各VMs的效能也會提升,半虛擬化中的VMs就像電影駭客任務中的電腦人,知道自己僅存在於虛擬環境中,但也因此對於其它資源的存取更易。半虛擬化的VMs在配合上硬體虛擬化技術後其效能又得到更進一步的提升,因為硬體資源間的協調更佳,資源利用率也更理想。目前半虛擬化的相關應用大都在開放原碼的Linux平台上,因為系統核心可配合虛擬化需求被修改,而Microsoft Windows平台的半虛擬化應用可能要在下一個世代 Longhorn Server上才可能被實現。半虛擬化的相關應用如Xen與UML(User Mode Linux)。
標籤: vm、vmware、虛擬化、Virtualization