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