早在大型機時代,IBM的VM/370就采用虛擬化技術來劃分其硬件資源,提供給多用戶使用。現在,x86服務器已成為企業應用的主流,探索x86服務器的虛擬化技術成為各個企業和研究機構的重要課題。
技術篇不同層次的虛擬化技術近年來,服務器虛擬化技術逐漸成為人們關注的熱點技術。伴隨著多年來人們對虛擬化技術的研究,形成了不同層次的虛擬化技術,其中有ISA層次、硬件抽象層、操作系統層、Library API層,以及編程語言層的虛擬化技術。
1.ISA層的虛擬化技術ISA層的虛擬化技術,通常采用軟件模擬指令集的方式實現。一個典型的計算機系統由處理器、內存、總線、硬盤控制器、時鐘、各種I/O設備組成。ISA層的虛擬化軟件的實現方式是截獲客戶操作系統發出的指令,並把它們“翻譯”成Host平台上的可用指令進行執行(包括處理器內部指令和IO指令)。由於這種指令的模擬方式,ISA層的虛擬化技術可以完全模擬一台真實機器所能做的一切。這種實現方式的好處在於,分離了操作系統和硬件平台的緊綁定關系。
這方面具有代表性的系統有很多。Bochs是用C++語言編寫的開源的x86平台的PC模擬器,可以方便地在多種平台上模擬IA32 PC系統。它能夠模擬多種版本的x86系統,如386、486、Pentium、Pentium Pro、SSE、SSE2等指令。Bochs解釋客戶系統從開機到關機的全部指令,模擬了Intel x86 CPU、BIOS以及PC設備。因此,在客戶操作系統看來,就好像是運行在一台真實的機器上一樣。雖然Bochs系統的性能問題,使其很難有廣泛的應用,但它也在某些方面有著重要的應用,如在非x86平台上運行Windows系統,進行新開發的操作系統的debug工作,進行老式x86系統的兼容性測試等。
QEMU是一個采用動態翻譯技術的快速的模擬器,它支持兩種工作模式:用戶空間模擬和全系統模擬。在用戶空間模式下,QEMU可以在物理CPU上執行為其他CPU編譯的程序。在全系統模擬的模式下,它支持模擬x86、ARM、PowerPC、Sparc等結構。它可以快速地把客戶操作系統的指令動態地翻譯成本地指令進行執行。其動態翻譯過程的基本思想是把每條指令分解成少量的簡單指令。每條簡單指令由一段C代碼實現,通過動態代碼生成器把這些簡單指令的目標文件連接起來,構建指定的功能。它把基本塊作為翻譯的基本單位,並采用16M的指令翻譯Cache. 2.硬件抽象層的虛擬化技術硬件抽象層的虛擬化技術,利用客戶系統環境和Host平台的相似性來減少理解客戶系統指令的延遲。目前,大多數的商業服務器虛擬化產品,都是通過使用這種技術來實現高效、實用的虛擬化系統。虛擬化軟件進行從虛擬資源到物理資源的映射,並利用本地物理平台進行實際的計算。當虛擬系統訪問關鍵的系統資源時,虛擬化軟件接管其請求,並進行相應的處理。為了使這種機制能夠有效地工作,虛擬機必須能夠trap每條特權指令,並使得VMM接管進行相關的處理。這是因為,在同一個物理平台上有多個客戶系統存在,這些客戶系統發出特權指令希望CPU進行處理。這時把這些指令trap到VMM進行處理,以免系統發生異常或沖突。此時,VMM模擬特權指令的執行,並返回處理結果給指定的客戶虛擬系統,保證了各個客戶虛擬系統的有效隔離。然而,x86平台並不是完全支持虛擬化的,因為某些x86特權指令在特權級不夠的情況下執行,並不能方便地產生trap.對這一問題的解決方案有:一種是指令掃描結合動態指令修改的軟件技術,有許多商業的虛擬化產品采用了這種方案;另一種方案是修改x86 CPU,使它支持虛擬化,也就是Intel的Vanderpool技術和AMD的Pacifica技術的目標。此種虛擬化技術的代表 產品是EMC公司的VMware. Microsoft的Virtual Server系列產品。Microsoft的Virtual Server 2005來源於2003年收購Connectix的虛擬化技術。這是一種類似於VMware Workstation結構的虛擬化產品。除了虛擬化的功能外,還有兩種特色的功能:undo磁盤功能可以使用戶方便地undo客戶虛擬系統之前對磁盤的操作,有利於某些情況下的數據恢復;另一種特色技術是二進制翻譯,它可以在基於Macintosh的機器上提供x86的虛擬機。但Virtual Server產品其對操作系統種類的支持不是很廣泛,主要支持Windows和Linux客戶虛擬系統。Linux系統還不能做為Virtual Server的Host平台。
Xen是最初由劍橋大學計算機實驗室發起的開源虛擬機項目。它的開發得到了Intel、HP、IBM等公司的支持。Xen是在x86平台上支持同時運行多個虛擬系統的高性能VMM.它支持x86_32、x86_64、IA64等多種平台,並支持Intel Vanderpool和AMD Pacifica技術。它采用para-virtualization的技術,也就是需要對客戶虛擬系統的內核進行適當的修改,使其能夠在VMM的管理下盡可能地直接訪問本地硬件平台。Xen利用Para-virtualization技術降低了由於虛擬化而引入的系統性能損失。
Xen的Para-virtualization技術的主要內容是:對於內存分段管理的虛擬化,要求客戶操作系統對硬件分段描述符的更新由Xen進行驗證,這也就要求客戶操作系統不能有高於Xen的特權級別和不允許訪問Xen的保留地址空間;對於內存分頁管理的虛擬化,要求客戶操作系統可以直接讀硬件頁表,但對頁表的更新需要Xen進行驗證和處理,Xen支持客戶虛擬系統可以分布在不連續的物理內存上;對於客戶虛擬系統,其只能運行在低於Xen的特權級別上;客戶虛擬系統需要注冊一個異常(Exception)處理函數的描述符表,直接支持Xen的虛擬化;客戶虛擬系統的硬件中斷機制被Xen中的Event處理機制代替;每個客戶虛擬系統都有自己的時鐘接口,並且可以了解真實的時間和虛擬的時間;客戶虛擬系統通過異步I/O rings的內存區域和外部設備(網絡、硬盤)來傳遞數據,采用事件處理機制代替硬件中斷通知機制。
目前,Xen作為高性能的虛擬機軟件,越來越受到業界的關注。它可以為企業的生產系統所使用。
UML(User Mode Linux)是讓一個Linux作為一個獨立進程,運行在另一個Linux上的開源項目。它是一種在同一時間運行多 Linux 的安全方式。每個進程都獨立於其他進程,這非常安全。例如,在同一機器上進行多種測試和開發而不互相干擾,如果一些測試進程被損壞,並不會影響宿主系統或者開發進程。
與VMware等實現方式不同,UML不需要額外的虛擬化軟件。它只需要在Linux Kernel源碼上打上相關的補丁。UML的補丁把Linux標准內核轉化成一個可以作為獨立進程執行的操作系統。當運行UML kernel時,需要指定一個文件系統給其使用。此時,我們就有了一個獨立的Linux系統。新的系統內核作為一個用戶空間的應用運行。UML內核接收來自應用的系統請求,然後發送Host內核進行處理。由於客戶虛擬系統的內核和進程在同一地址空間內,因此,需要把內核的代碼和數據段放在虛擬系統進程通常不會使用的地方。由於每個虛擬系統的進程通過Host內核獲得,為了讓虛擬系統進程共享虛擬系統內核的數據,虛擬系統內核數據被映射到一個文件,然後這個文件被映射到虛擬系統的進程。目前,UML的一個主要應用是進行系統軟件的調試和測試。
硬件抽象層的虛擬化技術有著高度的客戶虛擬系統的隔離性(包括客戶虛擬系統之間,客戶虛擬系統和Host系統之間)。這種隔離性使得在同一個物理平台上,可以同時運行不同類型的操作系統,而且它們的重啟等操作不會互相影響。在用戶看來,隔離性使得物理平台被劃分成不同虛擬機器。由於用戶面對的是虛擬機器,用戶需要更多的系統安裝和配置工作。如果用戶希望客戶虛擬系統有和Host相同的操作系統,並只是想把多個應用系統進行分離,那麼可以考慮采用操作系統層的虛擬化技術。
3.操作系統層虛擬化技術典型的應用程序環境包括:操作系統、用戶函數庫、文件系統、環境設置等。如果應用系統的這些周邊環境保持不變,應用程序自身是無法區分是運行在物理系統內,還是運行在虛擬系統外。操作系統層的虛擬化技術的主要思想在於,在Host操作系統上動態復制操作系統環境,以此來創建虛擬系統環境。
Jail是FreeBSD系統上的操作系統層虛擬化技術。它可以把操作系統劃分成多個獨立操作系統環境,稱之為Jail.每個Jail內都包含典型的操作系統資源,如進程、文件系統、網絡資源。在Jail中的用戶會發現,其資源訪問范圍被限制在Jail內。Jail是通過Jail系統調用創建的,Jail內的第一個進程的所有子進程都屬於該Jail.任何一個進程不能同時屬於多個Jail.Jail虛擬化技術在隔離應用程序方面有一定的應用價值。
Virtual Private Server(VPS)技術把服務器的操作系統環境,分割成多個彼此隔離的系統環境,稱之為VPS.管理員可以給每個VPS分配指定數量的內存、CPU、網絡帶寬等資源,還可以支持從物理服務器到虛擬環境或物理服務器之間,進行客戶虛擬系統的遷移。VPS技術在網站的服務器整合,提高資源利用率等方面有很好的應用。
對編程語言級別的虛擬化技術,我們最熟悉的就是Java虛擬機——JVM.Java程序被編譯成由JVM可以識別的指令形式,稱為Java Bytes Code.當代碼被執行時,由JVM進行解釋或利用Just-In-Time(JIT)編譯器在本地機器上執行。類似的編程語言級別的虛擬化技術還有Microsoft .NET CLI和Perl 6的Parrot.雖然有著多種層次的虛擬化技術,但目前各企業和廠商最為關注的是硬件抽象層的虛擬化技術,它也是目前最有應用潛力的虛擬化技術。
圖1 服務器虛擬化的典型結構
圖2 Standalone服務器虛擬化結構
圖3 Hosted服務器虛擬化結構產品鏈接VMware服務器虛擬化產品VMware是業界著名的虛擬機產品,它有VMware workstation、VMware GSX Server、VMware ESX server等系列產品。VMware的VMM可以有兩種結構形式,即Standalone和Hosted.Standalone的結構形式是指,VMM作為一層直接運行在硬件平台上的軟件層,在它上面可以創建和管理多個客戶虛擬系統。這種結構的VMM有點像一個操作系統,它包含硬件平台的驅動,會受到硬件平台種類的限制。它適合於服務器的應用環境,其典型的產品是VMware ESX Server.其大致結構如圖2所示。
Hosted結構的VMM作為操作系統的一個應用程序運行,它可以利用操作系統自身的內存管理、CPU調動、硬件驅動和資源管理。VMware Workstation使用的就是Hosted的結構,其大致結構如圖3所示。
由於VMware的目標平台是x86平台,因此,它也同樣面臨著x86平台不完全支持虛擬化的問題。VMware的解決方法是其專利技術,在需要VMM參與的地方,動態重寫部分虛擬系統的指令,使其可以trap到VMM.對於硬件支持虛擬化的方案,今年VMware新推出的VMware Server是一款面向Windows和Linux服務器的,並支持英特爾虛擬化技術的免費產品。
此外,VMware還有VirtualCenter.VMotion應用在IBM BladeCenter刀片服務器上,使之具備更好的彈性和可用性,結合刀片服務器的模塊化和可擴展性,可以增加內存和I/O能力的擴展比例,混合刀片間的工作負載均衡。VirtualCenter采用集中式管理,可以監控系統的可用性及性能,並可以自動告警,SDK與現有管理工具整合,通過穩定的訪問控制保證系統安全。VMotion技術使用戶在保持連續的服務可用性的同時,還可以將實時運行企業用戶關鍵業務的虛擬機,從一台物理主機轉移到另一台物理主機,並動態獲得每台物理服務器資源的極佳利用率、零宕機維護、快速重新配置,以及持續的工作負載整合能力。
服務器虛擬化的概念服務器虛擬化技術(Virtualization)是指允許在同一硬件平台上同時運行多個操作系統的相關技術。目前,服務器虛擬化的相關產品使得我們可以在同一台物理服務器上,同時運行多個操作系統環境。典型的虛擬化服務器的結構如圖1所示。
在操作系統環境和硬件平台之間增加了虛擬化軟件層,它負責“翻譯”硬件ISA,使得操作系統可以看到不同的ISA,構成虛擬的機器。此外,虛擬化軟件還負責虛擬的資源、寄存器、內存等到物理資源的映射,以及如何利用物理機器指令來模擬虛擬系統的操作等。這種虛擬化軟件通常叫做VMM(Virtual Machine Monitor),它的最初使用可以追溯到上個世紀60年代末。另外,我們還把被虛擬的操作系統環境叫做客戶操作系統(Guest),而下面的系統平台成為宿主平台(Host)。
技術篇服務器虛擬化的硬件支持2006年初,英特爾宣布了其初步完成的Vanderpool技術外部架構規范(EAS),並稱該技術可以幫助改進未來的虛擬化解決方案。英特爾表示,將在今年把Vanderpool應用於安騰架構平台,同時還計劃在台式機處理器和芯片組產品中采用該技術。
Vanderpool的核心思想是給x86 CPU的各種特權指令的執行,都增加可以進行trap的可能。Vanderpool技術使得CPU運行在兩種不同的模式下,即VMX-root和VMX-non-root.這兩種模式都支持0-3的4個特權級。客戶虛擬系統運行在VMX-non-root模式,VMM運行在VMX-root模式。Vanderpool新定義了從VMX-root到VMX-non-root的VMentry和從VMX-non-root返回VMX-root的VMexit的操作。VMentry和VMexit都會重新load CR3,以便VMM和Guest OS有不同的地址空間。CPU在VMX-non-root下執行,而執行CPUID、mov CR3、RDMSR、WDMSR等指令會無條件地觸發VMexit;而其他的指令、中斷和異常是否觸發Vmexit,則根據VMCS的內容進行判斷。
VMentry會先加載客戶系統狀態區域的VMCS,然後進入VMX-non-root,並且立即引發中斷。這樣,VMM就可以通過對IDT的修改,在系統進入VMX-non-root的第一時間觸發事件,以便模擬事件的傳遞。
VMexit會保存CPU狀態到客戶系統狀態區域,並且加載Host狀態區域的信息,然後返回VMM.所有的VMexit使用公共的進入VMM的Entry Point,並且每次VMexit都會提供引發VMexit的詳細原因,以便VMM進行相應的處理。
AMD在虛擬化技術方面的Pacifica技術規范,是AMD計劃用於其64位產品中的虛擬化技術。該技術將用於基於x86架構的服務器、台式機和筆記本電腦等系列產品,“我們將進一步加快虛擬技術的開發步伐,增強虛擬化技術實力”。在去年底宣布Pacifica技術規范的時候,AMD副總裁兼計算產品部微處理器業務總經理Marty Seyer就曾經這樣表態。AMD表示,通過將Pacifica技術預先展示給虛擬化ISV和分析師團隊,並通過持續的協作,最終可以在托管基於系統管理程序(hypervisor)的虛擬解決方案方面,向Pacifica用戶提供更豐富的功能集和更高性能模型。
從技術角度看,不論是Vanderpool技術外部架構規范,還是Pacifica技術規范,它們強調的核心功能都是RISC處理器早就實現了分區功能,即基於該技術平台實現在獨立分區中高效運行多個操作系統和應用程序,使一個計算機系統像多個虛擬系統一樣運行。 (E5)
需求篇服務器虛擬化技術的6大應用需求隨著計算機硬件的不斷發展,當前的計算機性能已經超過了多數的單個應用的需求。為了有效地整合服務器資源,減低企業IT系統的管理成本,采用虛擬化技術進行資源整合成為當前的發展趨勢。基於這一現實,我們試圖把一台計算機分割成多個小的相互獨立的虛擬機(VM)。每台VM上運行獨立的操作系統、應用程序(APP)和數據。
采用虛擬化技術的好處:有利於整合服務器資源,降低系統的總擁有成本;有利於服務那些希望使用服務器資源,但並不希望購買服務器的用戶;有利於提高系統的資源利用率;有利於提供對操作系統的監控,提供HA支持和資源使用的負載平衡;簡化滿足新的應用需求的工作;有利於減少操作系統對硬件平台的依賴。
虛擬計算環境對虛擬機的主要需求包括:各個虛擬機相互隔離、互不影響;虛擬系統中能夠運行多種操作系統,支持各種應用;由a於加入虛擬層而帶來的性能損失盡可能要小。
傳統的服務器中,操作系統和服務器的硬件平台緊綁定,其操作系統和應用經常需要安裝在特定的物理機器上。而在虛擬計算環境中,有服務器虛擬化軟件直接運行在硬件平台上,並且為操作系統模擬提供統一的硬件環境和I/O設備,這就使得已有的大多數應用程序可以不用修改就可直接運行。
服務器虛擬化技術的主要商業需求有以下6方面。
1.遺留的應用系統的需求遺留下來的應用往往只支持早期的操作系統,而對於用戶來說同,繼續維護早已停產的硬件系統變得十分麻煩。同時,操作系統廠商往往也已經停止發布早期的操作系統或系統軟件的補丁。因此,這些系統的安全問題和管理成本成為令人頭痛的問題。如果針對新版操作系統重寫這些應用又不十分現實。在這種狀況下,服務器虛擬化就成了明智的選擇。
2.整合遺留應用系統的需求企業中多數服務器的利用率不高,IT部門往往希望通過整合應用系統來降低管理成本、硬件成本、空間和能耗。這裡的主要問題是,應用系統需要不同版本的操作系統、數據庫軟件、中間件軟件。因此,通常需要重寫部分應用系統,才能使它們運行在同一台服務器上。即便通過重寫應用系統來整合服務器,也可能出現由於某個應用的問題,如內存洩露,導致其他應用跟著一起重新啟動,來修復問題。
3.隔離應用的執行客戶虛擬系統可以提供相互隔離的、安全的應用執行環境。它可以用來執行企業中外來的或不被信任的應用程序。
4.QoS(Quality of Service)的需要客戶虛擬系統可以被分配一定數量的資源,這樣客戶虛擬系統就能夠保證自身在系統繁忙時,有足夠的資源提供服務。
5.系統軟件調試服務器虛擬化軟件可以用於幫助系統軟件(如操作系統等)進行調試工作。
6.軟件測試服務器虛擬化軟件有助於建立那些在實際物理環境下很難建立的測試環境,進行軟件測試和質量保證。
雖然x86平台的服務器虛擬化技術近幾年來不斷發展和進步,但目前廣泛應用服務器虛擬化技術還有一些需要解決的問題。
應用篇應用服務器虛擬化技術的3大障礙服務器虛擬化技術的廣泛應用面臨的困難有以下幾方面。
1.客戶虛擬系統映像的管理隨著服務器虛擬化技術的應用,也使得在原有的硬件系統平台上運行著更多的客戶虛擬系統。系統管理員需要同時管理更多的虛擬系統映像。如果這些系統映像分布在各個服務器上,那麼管理員的工作負擔將成倍增加。因此,集中管理這些客戶虛擬系統映像成為必然的發展方向。這就需要SAN,特別是IP SAN的技術支持。從SAN的角度上看,安裝與配置後的服務器軟件系統,可以認為是一種特殊的數據。但目前SAN對系統映像這種特殊數據的支持還需要進一步優化。比如,SAN原有快照技術用於支持備份,而大量的相近的虛擬系統映像,也應該支持快速復制和COW等管理功能。
2.大量虛擬系統的部署和自動管理作為一種計算資源,虛擬的服務器資源必須經過安裝、配置,並與合適的存儲數據結合起來,才能提供人們所需的服務。而當這種服務改變的時候,上述安裝與配置的工作又必須重新進行——在服務器機群(或集群)規模非常龐大時,手工完成這些工作的工作量是十分巨大的。為此,服務部署系統應運而生。顧名思義,服務部署系統的核心工作就是通過某種自動或半自動的手段,將服務部署到服務器硬件上,從而達到快速初始化服務器或調度服務器的目的。
另外,客戶虛擬系統的調度是將各個客戶虛擬系統比較均衡地分配到不同的物理資源中進行計算處理。在虛擬環境下,通過虛擬環境管理軟件,將實現服務器群的虛擬化管理。當發現一個服務器的能力不夠用時,通過網絡和軟件調用另一個服務器,通過軟件監控,然後自動做出調整,使系統擁有更強的可靠性,以及高可用性和靈活性。
3.非技術性困難服務器虛擬化技術的廣泛應用還面臨著一些非技術性困難。比如,采用服務器虛擬化技術需要測試虛擬化系統上的軟件包。而某些開發垂直行業應用軟件的廠商,由於規模小,缺乏在虛擬化環境中測試軟件所需的資金或技能。對於用戶來說,要想充分了解各類服務器虛擬架構是相當困難的,因為用戶不僅要知道虛擬的策略是什麼,還要知道什麼才是最適合自己環境的架構,哪些架構能夠適應存儲和網絡資源的虛擬需求,以及這些架構會在多大程度上將自己與廠商的產品捆綁在一起。
目前,國內用戶采用虛擬化技術的並不多,這主要是國內用戶傳統的采購和使用習慣造成的。對於國內用戶來說,買一台服務器,把它劃分成若干個不同分區來跑不同的操作系統、不同的數據庫、不同應用,他們擔心系統一旦出了問題,後果會不堪設想。其實,這從另一個側面反映出,廠商並沒有讓用戶真正了解虛擬化的實質。
另外,客戶虛擬系統的調度是將各個客戶虛擬系統比較均衡地分配到不同的物理資源中進行計算處理。在虛擬環境下,通過虛擬環境管理軟件,將實現服務器群的虛擬化管理。當發現一個服務器的能力不夠用時,通過網絡和軟件調用另一個服務器,通過軟件監控,然後自動做出調整,使系統擁有更強的可靠性,以及高可用性和靈活性。
3.非技術性困難服務器虛擬化技術的廣泛應用還面臨著一些非技術性困難。比如,采用服務器虛擬化技術需要測試虛擬化系統上的軟件包。而某些開發垂直行業應用軟件的廠商,由於規模小,缺乏在虛擬化環境中測試軟件所需的資金或技能。對於用戶來說,要想充分了解各類服務器虛擬架構是相當困難的,因為用戶不僅要知道虛擬的策略是什麼,還要知道什麼才是最適合自己環境的架構,哪些架構能夠適應存儲和網絡資源的虛擬需求,以及這些架構會在多大程度上將自己與廠商的產品捆綁在一起。
目前,國內用戶采用虛擬化技術的並不多,這主要是國內用戶傳統的采購和使用習慣造成的。對於國內用戶來說,買一台服務器,把它劃分成若干個不同分區來跑不同的操作系統、不同的數據庫、不同應用,他們擔心系統一旦出了問題,後果會不堪設想。其實,這從另一個側面反映出,廠商並沒有讓用戶真正了解虛擬化的實質。
目前,國內用戶采用虛擬化技術的並不多,這主要是國內用戶傳統的采購和使用習慣造成的。對於國內用戶來說,買一台服務器,把它劃分成若干個不同分區來跑不同的操作系統、不同的數據庫、不同應用,他們擔心系統一旦出了問題,後果會不堪設想。其實,這從另一個側面反映出,廠商並沒有讓用戶真正了解虛擬化的實質。