六大Linux虛擬化技術全面講解
關于Linux虛擬化的優勢我們大家已經有所了解。目前使用最多的虛擬化操作系統還是Windows系列,但是Linux的成長速度是驚人的,大有替代Windows的趨勢。關于Linux虛擬化技術大致上可以分為六個不同的方式。在本文中,我們將討論實現Linux虛擬化的這六種方式,以及Linux下的多種虛擬化解決方案。
當我們討論虛擬化解決方案的時候,常常都要提到具體廠商的具體產品,但是當我們提及Linux虛擬化解決方案的時候,我們更樂意討論廣泛而多樣化的開源生態系統。Linux支持多種虛擬化平臺,并延伸出多種技術,同樣也是一個完整方案的一個元素。
虛擬化—老樹開新花
雖然虛擬化現在如此的流行,但虛擬化不是一個新的技術,早在半個世紀之前IBM就已經開始部署虛擬化。最早虛擬化技術是在IBM M44計算機上進行實驗,然后在IBM System/360大型機產品上開始普及。最早的真正意義上的整體應用虛擬化的硬件平臺是IBM CP-40系統,在上世紀60年代末被用在商業應用上。
虛擬化包含多個層面,比如硬件虛擬化,這種虛擬化從底層的硬件平臺直接支持軟件環境;另外一種是操作系統虛擬化,這是Linux的一個亮點。
在硬件層之上,獨立于操作系統的一層軟件被稱之為hypervisor,或者叫做虛擬機監視器。hypervisor創建了虛擬化平臺,而操作系統實例則運行在這個平臺上,這使得硬件平臺可以被多個操作系統和應用所共享,從而降低硬件的成本。
運行在hypervisor上面的實體被稱為虛擬機,即VM,是用來放置操作系統、應用和數據元的“容器”。虛擬機中的操作系統和應用程序的數據被存儲在虛擬磁盤中,hypervisor利用虛擬磁盤來啟動虛擬化平臺。虛擬機被封裝為一個文件,這樣比分布式的文件更好管理。
本地虛擬化和主機虛擬化模型
早期的虛擬化模型被稱為Type 1,或者叫本地虛擬化(native virtualization),這種模型下hypervisor直接運行在硬件之上,在hypervisor上面是虛擬機。后來出現了主機虛擬化(hosted virtualization)模式,被稱為Type 2,hypervisor運行在操作系統之上,在同一平臺上允許兩個或更多的操作系統共存。
了解了有關虛擬化的一些基本知識后,我們進入正題,來討論一下Linux虛擬化的一些知識。首先是模擬(Emulation),是將一個操作系統(Host)的服務轉換并顯示成另一個操作系統(Guest)的過程,Host和Guest系統不一定是相同的,比如,Host系統可能是x86平臺,可以提供PowerPC平臺的模擬,即使是指令和架構完全不相同。
另外,hypervisor的模擬器(emulator)可以提供多個平臺的模擬,比如下面的圖例,在Host系統上可以仿真出PowerPC和ARM系統。模擬過程并不僅限于Type 2虛擬化模型,在虛擬化技術中都存在這個過程。
虛擬化模型中的模擬過程
Linux中最流行的兩個模擬器(emulator)包括QEMU和Bochs(處理器和平臺模擬器)。這種解決方案的優點是它們是非常“輕便的”,可以支持在不同的Host操作系統和平臺上運行不同的Guest操作系統。而這種解決方案的缺點在于由于要模擬指令,導致效率比較低。QEMU通過動態編碼轉換的模擬方式,讓內核和內部用戶代碼可以被加速。另外,QEMU是一個很好的嵌入式平臺開發工具,可以為與主機相異的CPU開發和測試代碼。QEMU還可以被用來其他虛擬化解決方案來進行設備模擬。
平臺虛擬化
更加傳統的虛擬化解決方案是平臺虛擬化,或者叫做硬件虛擬化,具有兩種主要的形式,完全虛擬化( full-virtualization)和半虛擬化(para-virtualization)。
完全虛擬化,虛擬化平臺通過hypervisor來承載虛擬機(VM),完全虛擬化的關鍵在于這些虛擬機,也就是運行在這些虛擬機里面的操作系統可以在hypervisor上運行,并且不被修改,這在需要一個真正的虛擬平臺時是非常理想的,但這種模式具有一個缺點。
在完全虛擬化下虛擬機VM會把虛擬平臺當作物理平臺,工作在虛擬平臺上的Guest操作系統驅動就好像運行在真實的硬件之上。但需要考慮這意味著什么,Guest操作系統和虛擬平臺之間通訊就好像和真實平臺一樣,在hypervisor里面存在著另外一個模擬層,模擬硬件平臺并轉發虛擬機對硬件的訪問,就好像虛擬機直接在使用真實的硬件。這個過程需要大量的處理,會限制Guest系統的I/O性能。
解決這個問題的一個方法就是讓Guest操作系統意識到自身是被虛擬化的,這種形式被稱作半虛擬化(para-virtualization),如下圖,在這種模式下,Guest系統包含了縮短硬件訪問過程所需的驅動程序,這讓把Guest系統從不必要的工作中解放出來,來進行更高級別的工作。
兩種平臺虛擬化方式
雖然完全虛擬化是一個理想的方案,但是通過修改Guest操作系統可以最大限度的減少處理開銷,獲得相當大的性能提升。#p#
Linux包含兩個重要的解決方案,可以同時實現完全虛擬化和半虛擬化。如Citrix的Xen是一個流行的解決方案,可以同時執行Type1和Type2型hypervisor,Amazon的EC2就采用Xen來進行服務器的虛擬化。
另一個重要的hypervisor是Linux Kernel Virtual Machine(KVM),同樣都支持本地虛擬化和主機虛擬化模型。KVM是有特點的,它通過夾在內核模塊可以對Linux內核進行小的修改,從而變成一個全特性的hypervisor。KVM通過應用virtio可以支持半虛擬化,在Guest系統中包括用于半虛擬化的標準Linux驅動。
KVM也是第一個完全集成在主線內核(mainline kernel)的hypervisor,由Rad Hat開發,在一些關鍵領域被采用,比如IBM對云計算的開發和測試中。
需要注意的是無論是完全虛擬化還是半虛擬化,每種解決方案都應用了硬件協助虛擬化(hardware-assisted virtualization)。目前新的AMD和英特爾CPU都集成了優化hypervisor的指令集,來增強Guest虛擬機的I/O性能。
操作系統虛擬化
操作系統虛擬化是另外一個重要的虛擬化技術,正如其名,是對操作系統本身進行虛擬化,而不是平臺。在這種方式下,操作系統提供一組用戶空間(User-Space)彼此隔離,而應用被限制在每個用戶空間里面,就好像一個獨立的主機。這種形式的虛擬化在虛擬主機環境中非常流行,讓多個獨立的用戶可以共享一個操作系統。
操作系統虛擬化
操作系統虛擬化依賴于可以創建和隔離用戶空間(或者叫做容器或者私有虛擬服務器)的Linux內核,OS虛擬化最大的好處在于幾乎沒有任何開銷,因為用戶只是簡單的共享OS和主機,而不需要通過虛擬機。而缺點在于目前我們采用的OS虛擬化解決方案缺乏靈活性,不能在任意的操作系統上實施,用戶共享主機和操作系統還需要注意版本。盡管有這些不足,服務器虛擬化還是應用的非常廣泛。
Linux包含很多的操作系統解決方案,具有很高的可配置性。比如OpenVZ、Linux-VServer和FreeVPS是其中三個最流行的,均支持CPU、內存網絡、I/O和存儲配額配置,OpenVZ還支持主機之間的在線VPSes遷移。
其他Linux虛擬化技術
在上面的文章中,我們討論了模擬、平臺虛擬化和操作系統虛擬化,這三種是最常用的虛擬化技術,除此之外,還有很多其他種類的虛擬化技術可以滿足我們的需求,下面我們來看看幾種不同于之前談論范疇的虛擬化技術。
CoLinux
CoLinux,或者叫做協作Linux,是一種利用協作虛擬機的虛擬化方式。在CoLinux模式下,Linux Guest系統運行在微軟Windows操作系統之上,共享底層的硬件資源。CoLinux需要Guest系統(即CoLinux本身)被修改,讓它認為自己運行在其他操作系統之上。CoLinux是一種半虛擬化的方式,是將Windows作為Host操作系統,并且每個Host系統上只能運行一個CoLinux實例。由于這種限制,CoLinux被定義為一種特別的虛擬化技術。
CoLinux:特別的半虛擬化架構
用戶模式(User-Mode)Linux
用戶模式(User-Mode)Linux,即UML,和CoLinux有些類似,但是更加靈活。如上圖右邊的架構,UML允許在一個Linux Host系統上運行多個Linux Guest操作系統,UML也是一種半虛擬化架構,實現更好的性能。UML吸引人的一個方面是可以支持更高一層的UML,所以運行在Linux Host操作系統上的UML Guest內核可以支持更高級別的UML Guest系統。
Wine和Cygwin
Wine和Cygwin也是有趣的虛擬化解決方案,Wine實際上是“Wine is Not an Emulator”的縮寫,表示“不是一個模擬器”,是在Linux Host操作系統上運行Windows應用的一種方式。Wine并不是完全的表現為Windows應用的模擬層,而是一個DLL(動態鏈接庫)層來表示Windows API。
Wine和Cygwin虛擬化方案
Cygwin是與之相反的解決方案,即在Windows上運行Linux應用,這是由Rat Hat開發,這是一種模擬的Unix環境,允許在Windows平臺上開發Unix應用,比如POSIX以及其他類Unix工具。
Linux虛擬化的未來
在虛擬化領域,Linux虛擬化增長的很快速,不僅僅是對核心組件基于Linux的hypervisor的開發,還包括Linux虛擬化生態系統中的其他部分,包括工具和管理應用程序的開發。Linux虛擬化能夠延伸出多種虛擬化技術,將不斷的推動虛擬化技術的前進發展。
【編輯推薦】