IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁操作系統(tǒng)LINUX → 探索Linux內(nèi)核虛擬機(jī)——學(xué)習(xí)KVM架構(gòu)及其優(yōu)點(diǎn)

探索Linux內(nèi)核虛擬機(jī)——學(xué)習(xí)KVM架構(gòu)及其優(yōu)點(diǎn)

時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

  Linux 既有良好的靈活性,在虛擬化方面同樣出色。但是最近,隨著內(nèi)核虛擬機(jī)(KVM)的出現(xiàn),Linux 虛擬化的前景發(fā)生了變化。KVM 是構(gòu)成主流 Linux 內(nèi)核(V2.6.20)一部分的第一個虛擬化解決方案。KVM 支持 Linux 客戶操作系統(tǒng)的虛擬化 —— 甚至支持其硬件對虛擬化敏感的 Windows 系統(tǒng)的虛擬化。了解 Linux KVM 的架構(gòu)并了解它與內(nèi)核的緊密集成為何會改變您使用 Linux 的方式。

  簡介

  虛擬化 概念很早就已出現(xiàn)。簡單來說,虛擬化就是使用某些程序,并使其看起來類似于其他程序的過程。將這個概念應(yīng)用到計(jì)算機(jī)系統(tǒng)中可以讓不同用戶看到不同的單個系 統(tǒng)(例如,一臺計(jì)算機(jī)可以同時運(yùn)行 Linux 和 Microsoft Windows)。這通常稱為全虛擬化(full virtualization)。

  虛擬化也可以使用更加復(fù)雜的格式,其中單個計(jì)算機(jī)看上去具有多個架構(gòu)(對于一個用戶來說,它是一個標(biāo)準(zhǔn)的 x86 平臺;對于另外一個用戶來說,它是 IBM Power PC 平臺)。這種虛擬化形式通常被稱為 硬件仿真。

  最后,更加簡單的一種虛擬化是操作系統(tǒng)虛擬化,其中一臺計(jì)算機(jī)可以運(yùn)行相同類型的多個操作系統(tǒng)。這種虛擬化可以將一個操作系統(tǒng)的多個服務(wù)器隔離開來(這意味著全都必須使用相同類型和版本的操作系統(tǒng))。

  虛擬化和準(zhǔn)虛擬化(para-virtualization)

  虛擬化最常使用的兩種方法是全虛擬化 和準(zhǔn)虛擬化。使用全虛擬化,在虛擬化的操作系統(tǒng)和硬件之間存在一個層,用于決定訪問。這個層稱為系統(tǒng)管理程序 或虛擬機(jī)監(jiān)視器(VMM)。準(zhǔn)虛擬化與之類似,但是系統(tǒng)管理程序會以一種更具協(xié)作性的方式進(jìn)行操作。這是因?yàn)槊總客戶操作系統(tǒng)都了解自己正在虛擬化模式中 運(yùn)行,因此每個系統(tǒng)都與系統(tǒng)管理程序協(xié)作,來實(shí)現(xiàn)底層硬件的虛擬化。

  全虛擬化的例子包括商業(yè)虛擬化解決方案 vmware,以及商業(yè) IBM zSeries 計(jì)算機(jī)上使用的 IBM System z9 Virtual Machine(z/VM)操作系統(tǒng)。準(zhǔn)虛擬化的例子有 Xen 和 User-Mode-Linux (UML)。 KVM 也被認(rèn)為是一個全虛擬化解決方案,不過我們稍后再介紹這個問題。

  虛擬化的工作原理

  我們首先簡要介紹一下虛擬化技術(shù)及其涉及的元素。虛擬化解決方案的底部是要進(jìn)行虛擬化的機(jī)器。這臺機(jī)器可能直接支持虛擬化,也可能不會直接支持虛擬化;那 么就需要系統(tǒng)管理程序 層的支持。系統(tǒng)管理程序,或稱為 VMM,可以看作是平臺硬件和操作系統(tǒng)的抽象化。在某些情況中,這個系統(tǒng)管理程序就是一個操作系統(tǒng);此時,它就稱為主機(jī)操作系統(tǒng),如 圖 1 所示。


圖 1. 虛擬化的分層抽象

  系統(tǒng)管理程序之上是客戶機(jī)操作系統(tǒng),也稱為虛擬機(jī)(VM)。這些 VM 都是一些相互隔離的操作系統(tǒng),將底層硬件平臺視為自己所有。但是實(shí)際上,是系統(tǒng)管理程序?yàn)樗鼈冎圃炝诉@種假象。

  目前使用虛擬化解決方案的問題是,并非所有硬件都可以很好地支持虛擬化。較老的 x86 處理器根據(jù)執(zhí)行范圍對特定指令會產(chǎn)生不同結(jié)果。這就產(chǎn)生了一個問題,因?yàn)橄到y(tǒng)管理程序應(yīng)該只能在一個最受保護(hù)的范圍中執(zhí)行。由于這個原因,諸如 VMWare 之類的虛擬化解決方案會提前掃描要執(zhí)行的代碼,從而將這些指令替換為一些陷阱指令(trap instruction),這樣系統(tǒng)管理程序就可以正確地處理它們。Xen 可以支持一種協(xié)作的虛擬化方法,它不需要任何修改,因?yàn)榭蛻魴C(jī)知道自己正在進(jìn)行虛擬化,并已經(jīng)進(jìn)行了修改。KVM 會簡單地忽略這個問題,如果您希望進(jìn)行虛擬化,就強(qiáng)制必須在更新的硬件上運(yùn)行。

  剛開始會覺得這有些不方便,但是考慮到目前上市的較新機(jī)器都可以支持虛擬化(例如 Intel VT 和 AMD SVM),用不了多久,這將成為標(biāo)準(zhǔn)方法而不是少數(shù)例外情況。

  KVM 系統(tǒng)管理程序

  考慮到虛擬化技術(shù)的發(fā)展時間并不長,KVM 實(shí)際上還是一種相對來說比較新的技術(shù)。目前存在各具功能的開源技術(shù),例如 Xen、Bochs、UML、Linux-VServer 和 coLinux,但是 KVM 目前正在被大量使用。另外,KVM 不再僅僅是一個全虛擬化解決方案,而將成為更大的解決方案的一部分。

  KVM 所使用的方法是通過簡單地加載內(nèi)核模塊而將 Linux 內(nèi)核轉(zhuǎn)換為一個系統(tǒng)管理程序。這個內(nèi)核模塊導(dǎo)出了一個名為 /dev/kvm 的設(shè)備,它可以啟用內(nèi)核的客戶模式(除了傳統(tǒng)的內(nèi)核模式和用戶模式)。有了 /dev/kvm 設(shè)備,VM 使自己的地址空間獨(dú)立于內(nèi)核或運(yùn)行著的任何其他 VM 的地址空間。設(shè)備樹(/dev)中的設(shè)備對于所有用戶空間進(jìn)程來說都是通用的。但是每個打開 /dev/kvm 的進(jìn)程看到的是不同的映射(為了支持 VM 間的隔離)。

  KVM 然后會簡單地將 Linux 內(nèi)核轉(zhuǎn)換成一個系統(tǒng)管理程序(在安裝 kvm 內(nèi)核模塊時)。由于標(biāo)準(zhǔn) Linux 內(nèi)核就是一個系統(tǒng)管理程序,因此它會從對標(biāo)準(zhǔn)內(nèi)核的修改中獲益良多(內(nèi)存支持、調(diào)度程序等)。對這些 Linux 組件進(jìn)行優(yōu)化(例如 2.6 版本內(nèi)核中的新 O(1) 調(diào)度程序)都可以讓系統(tǒng)管理程序(主機(jī)操作系統(tǒng))和 Linux 客戶操作系統(tǒng)同時受益。但是 KVM 并不是第一個這樣做的程序。UML 很久以前就將 Linux 內(nèi)核轉(zhuǎn)換成一個系統(tǒng)管理程序了。使用內(nèi)核作為一個系統(tǒng)管理程序,您就可以啟動其他操作系統(tǒng),例如另一個 Linux 內(nèi)核或 Windows 系統(tǒng)。

  KVM

  安裝 KVM 之后,您可以在用戶空間啟動客戶操作系統(tǒng)。每個客戶操作系統(tǒng)都是主機(jī)操作系統(tǒng)(或系統(tǒng)管理程序)的一個單個進(jìn)程。 圖 2 提供了一個使用 KVM 進(jìn)行虛擬化的視圖。底部是能夠進(jìn)行虛擬化的硬件平臺(目前指的是 Intel VT 或 AMD-SVM 處理器)。在裸硬件上運(yùn)行的是系統(tǒng)管理程序(帶有 KVM 模塊的 Linux 內(nèi)核)。這個系統(tǒng)管理程序與可以運(yùn)行其他應(yīng)用程序的普通 Linux 內(nèi)核類似。但是這個內(nèi)核也可以支持通過 kvm 工具加載的客戶操作系統(tǒng)。最后,客戶操作系統(tǒng)可以支持主機(jī)操作系統(tǒng)所支持的相同應(yīng)用程序。


圖 2. 使用 KVM 的虛擬化組件

  記住 KVM 只是虛擬化解決方案的一部分。處理器直接提供了虛擬化支持(可以為多個操作系統(tǒng)虛擬化處理器)。內(nèi)存可以通過 kvm 進(jìn)行虛擬化(這在下一節(jié)中將會討論)。最后,I/O 通過一個稍加修改的 QEMU 進(jìn)程(執(zhí)行每個客戶操作系統(tǒng)進(jìn)程的一個拷貝)進(jìn)行虛擬化。

  KVM 向 Linux 中引入了一種除現(xiàn)有的內(nèi)核和用戶模式之外的新進(jìn)程模式。這種新模式就稱為客戶 模式,顧名思義,它用來執(zhí)行客戶操作系統(tǒng)代碼(至少是一部分代碼);叵胍幌聝(nèi)核模式表示代碼執(zhí)行的特權(quán)模式,而用戶模式則表示非特權(quán)模式(用于那些運(yùn)行 在內(nèi)核之外的程序)。根據(jù)運(yùn)行內(nèi)容和目的,執(zhí)行模式可以針對不同的目的進(jìn)行定義?蛻裟J降拇嬖诰褪菫榱藞(zhí)行客戶操作系統(tǒng)代碼,但是只針對那些非 I/O 的代碼。在客戶模式中有兩種標(biāo)準(zhǔn)模式,因此客戶操作系統(tǒng)在客戶模式中運(yùn)行可以支持標(biāo)準(zhǔn)的內(nèi)核,而在用戶模式下運(yùn)行則支持自己的內(nèi)核和用戶空間應(yīng)用程序? 戶操作系統(tǒng)的用戶模式可以用來執(zhí)行 I/O 操作,這是單獨(dú)進(jìn)行管理的。

  在客戶操作系統(tǒng)上執(zhí)行 I/O 的功能是由 QEMU 提供的。QEMU 是一個平臺虛擬化解決方案,允許對一個完整的 PC 環(huán)境進(jìn)行虛擬化(包括磁盤、圖形適配器和網(wǎng)絡(luò)設(shè)備)?蛻舨僮飨到y(tǒng)所生成的任何 I/O 請求都會被中途截獲,并重新發(fā)送到 QEMU 進(jìn)程模擬的用戶模式中。

  KVM 通過 /dev/kvm 設(shè)備提供了內(nèi)存虛擬化。每個客戶操作系統(tǒng)都有自己的地址空間,并且是在實(shí)例化客戶操作系統(tǒng)時映射的。映射給客戶操作系統(tǒng)的物理內(nèi)存實(shí)際上是映射給這個進(jìn)程 的虛擬內(nèi)存。為了支持客戶物理地址到主機(jī)物理地址的轉(zhuǎn)換,系統(tǒng)維護(hù)了一組影子頁表(shadow page table)。處理器也可以通過在訪問未經(jīng)映射的內(nèi)存位置時使用系統(tǒng)管理程序(主機(jī)內(nèi)核)來支持內(nèi)存轉(zhuǎn)換進(jìn)程。

  實(shí)例化新客戶操作系統(tǒng)

  新客戶操作系統(tǒng)的實(shí)例化是由一個名為 kvm 的工具提供的。這個工具可以與 kvm 模塊協(xié)同工作,使用 /dev/kvm 來加載客戶操作系統(tǒng),將它與虛擬磁盤(主機(jī)操作系統(tǒng)中的一個普通文件)關(guān)聯(lián)起來,然后啟動客戶操作系統(tǒng)。

  通過一組在 /dev/kvm 設(shè)備上執(zhí)行的 ioctls 可以提供控制支持。當(dāng)?shù)谝淮未蜷_這個特殊文件時,就會創(chuàng)建一個新的 VM 對象,它與一個虛擬 CPU 關(guān)聯(lián)在一起。您然后可以使用幾個 ioctls 來創(chuàng)建一個虛擬 CPU,檢查 kvm 版本,創(chuàng)建內(nèi)存區(qū)域,然后啟動一個虛擬 CPU。您可以使用 kvm 命令實(shí)現(xiàn)這種功能。在接下來的幾節(jié)中,我們將介紹 kvm 命令,并給出幾個受支持的 ioctls 的示例。

  使用 KVM

  如果硬件支持的話,使用 KVM 實(shí)際上非常簡單。您需要一個具有虛擬化支持的處理器。通過查看 /proc/cpuinfo 可以知道系統(tǒng)是否支持虛擬化。這個文件指定了是否支持 vmx(Intel)或 svm(AMD)擴(kuò)展。

  接下來,您需要一個啟用了 KVM 支持的 Linux 內(nèi)核。您可以在 Device Drivers > Virtualization 下的內(nèi)核配置中完成這種配置。還必須啟用處理器對環(huán)境的支持。另外,還必須具有 kvm 和 qemu 用戶空間應(yīng)用程序。

  有了啟用了虛擬化支持的引導(dǎo)內(nèi)核,接下來的一個步驟是為客戶操作系統(tǒng)創(chuàng)建一個磁盤映像。您可以使用 qeumu-img 來完成此操作,如下所示。注意這個映像的大小是 4GB,但是使用 QEMU 的寫時復(fù)制格式(copy-on-write,qcow)時,整個文件將根據(jù)需要增長,而不是完全占據(jù)這 4 GB 的空間。 $ qemu-img create -f qcow vm-disk.img 4G

  復(fù)制代碼在創(chuàng)建虛擬磁盤之后,就可以將客戶操作系統(tǒng)加載到其上。下面的例子假設(shè)客戶操作系統(tǒng)是在 CD-ROM 上。除了使用 CD-ROM ISO 映像來填充虛擬磁盤之外,還必須在結(jié)束時啟動這個映像。 $ kvm -no-acpi -m 384 -cdrom guestos.iso -hd

關(guān)鍵詞標(biāo)簽:Linux內(nèi)核虛擬機(jī),KVM架

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程使用screen管理你的遠(yuǎn)程會話使用screen管理你的遠(yuǎn)程會話GNU/Linux安裝vmwareGNU/Linux安裝vmware如何登錄linux vps圖形界面 Linux遠(yuǎn)程桌面連如何登錄linux vps圖形界面 Linux遠(yuǎn)程桌面連

相關(guān)下載

人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址linux tc實(shí)現(xiàn)ip流量限制dmidecode命令查看內(nèi)存型號linux下解壓rar文件安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令lcx.exe、nc.exe、sc.exe入侵中的使用方法查看linux服務(wù)器硬盤IO讀寫負(fù)載