近年來,虛擬化風潮席捲全球,針對這個重大議題,本文將介紹虛擬化技術的發展,以及相關的開放原始碼虛擬化技術,讓讀者能夠對整個雲端運算中相當重要的虛擬化技術有非常深入的認識。
目前Intel與AMD的64位元中央處理器都支援輔助虛擬化指令,分別為Intel VT-x與AMD-V,而其他如ARM或PowerPC架構的中央處理器,也都有類似的虛擬化擴充指令(Extensions)。而目前硬體輔助虛擬化也以優秀的效能及較少的Host端軟體負載,成為主流的平台虛擬化應用技術。硬體輔助虛擬化的架構示意,如圖3所示。
|
▲圖3 硬體輔助虛擬化架構。 |
在平台虛擬化技術中,筆者主要也是著重在介紹主流的硬體輔助虛擬化技術。
作業系統層級虛擬化技術說明
作業系統層級虛擬化技術的架構,則是藉由讓作業系統核心可以建立多個隔離的使用者空間運作實體(User Space Instance)技術來達成,使用者在這些隔離的使用者空間中運作,感覺就像在實際獨立的環境內運作一樣,而這些隔離的使用者空間運作實體(User Space Instance)又被稱為容器(Containers)、虛擬化引擎(Virtualization Engines,VE)、虛擬私有伺服器(Virtual Private Servers,VPS)或叫囚室(jails)。
作業系統核心同時也提供管理這些運作實體使用資源的機制,避免單一運作實體使用系統資源過度,而影響到其他運作實體。由於作業系統層級虛擬化技術是由作業系統核心的介面所提供,因此無須像平台化虛擬化技術一樣去模擬整個電腦硬體,所以不需要有Hypervisor,而沒有Hypervisor這中介層,整個虛擬化的負載也會比平台化虛擬化低很多。另外,當然也無需特殊的硬體支援來加速虛擬化效能。
不過,作業系統層級虛擬化因為與作業系統介面有關,因此虛擬化環境中無法運行異質的作業系統,以Linux為例,在Linux作業系統層級虛擬化環境中就無法運行Linux之外如Windows、Solaris等作業系統,只能運行以Linux核心為基礎的各式不同Linux發行版。但是,當然也有一些例外,例如像是Solaris的作業系統層虛擬化技術Solaris Containers有發展Branded zones技術,當中的lx zone會將Red Hat Enterprise Linux 3系統呼叫轉換成Solaris 10系統呼叫,因此在lx zone中可以運行Red Hat Enterprise Linux 3的環境。
作業系統層級虛擬化技術的起源chroot最早出現在1979年第七版Unix(Version 7 Unix)的開發階段,chroot當初被設計用來將應用程式的運作環境限制在某個目錄下,主要是用來測試或建構系統,後來William Cheswick首度將這個技術擴充用來建立一個誘餌系統honeypots,以監控入侵的行為。之後,FreeBSD的開發者在chroot中加入了虛擬化的概念,創造了jail這個概念及指令,使用者可以很輕易地使用jail創建刪除更改一個有自己檔案系統、行程、使用者與超級使用者帳戶的虛擬環境,jail算是第一個具備作業系統層級虛擬化技術的雛型。
2006年Google工程師發起一個叫作行程容器(Process Containers)的專案,專案中計畫在Linux核心中開發一個能用來限制、控制與隔離一個行程群組使用資源(如CPU、記憶體、磁碟機輸出入等)的功能。計畫名稱後來因為要避免混淆而改名為控制群組(cgroups),控制群組在Linux核心2.6.24版中被正式納入為官方核心中,控制群組後來加入了很多功能,並在Linux核心3.15及3.16版時被重新設計改寫。
控制群組被設計成可以因應不同的應用狀況,小到控制單一程式行程(Process),大到可以做為作業系統層級虛擬化技術基礎,目前在Linux下的作業系統層級虛擬化技術不少是以控制群組為基礎發展的。而筆者主要介紹的內容也是跟Linux相關的作業系統層級虛擬化技術。
平台虛擬化技術:KVM
KVM全名為Kernel-based Virtual Machine,原本是由Avi Kivity在Qumranet公司時以Linux為基礎發展的虛擬化技術,2008年Red Hat買下Qumranet,KVM成為Red Hat全力發展的虛擬化技術,KVM需要電腦中央處理器支援輔助虛擬化擴充功能,例如x86架構中央處理器就需要支援Intel VT-x或AMD-V。
KVM主要是在Linux核心上發展,但是也有被移植到BSD及Solaris系列的作業系統上,而除了主要支援的x86硬體架構外,KVM也被移植到S/390、PowerPC、IA-64以及ARM等其他硬體架構上。KVM支援的客體作業系統(Guest Operating System)包括了各種不同的Linux、BSD發行版、Solaris、Windows、Haiku、ReactOS、Plan 9、AROS Research Operating System以及Mac OS X等等。
KVM是使用「/dev/kvm」這個設備來提供虛擬化的基礎架構,QEMU則做為使用者空間(Userspace)應用程式來運行客體作業系統並使用「/dev/kvm」所提供的虛擬化架構,KVM在Linux 2.6.20版時就已收錄在Linux核心中,KVM架構如圖4所示。
|
▲圖4 KVM架構。 |
平台虛擬化技術:Xen
Xen原始是由劍橋大學電腦實驗室的Ian Pratt帶領進行的開放原始碼計畫,第一個版本在2003年發表,後來Ian Pratt與Simon Crosby成立了XenSource公司提供技術支援服務,2007年Citrix買下XenSource,Xen仍是開放原始碼,但是Citrix以Xen為基礎有提供商業發行支援版本,2013年Xen整個計畫被移交給Linux基金會管理。
Xen本身以微核心(Microkernel)架構設計的Hypervisor,支援的硬體架構有IA-32、x86-64以及ARM。
另外,Xen本身支援多種虛擬化技術,除了硬體輔助虛擬化外,Xen也支援前面所提過的作業系統輔助虛擬化(Partial Virtualization,PV),作業系統輔助虛擬化因為需要客體作業系統進行修改,因此Xen作業系統輔助虛擬化支援的客體作業系統多是Linux、NetBSD、FreeBSD、OpenSolaris等屬於開放原始碼的作業系統。Linux核心在2.6.24版時便以pvops架構在核心中內建支援Xen的作業系統輔助虛擬化,圖5為取自xenproject.org的Xen架構示意圖。
|
▲圖5 Xen架構示意圖。 |