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

您當(dāng)前所在位置: 首頁(yè)操作系統(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)

時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

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

  簡(jiǎn)介

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

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

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

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

  虛擬化最常使用的兩種方法是全虛擬化 和準(zhǔn)虛擬化。使用全虛擬化,在虛擬化的操作系統(tǒng)和硬件之間存在一個(gè)層,用于決定訪問(wèn)。這個(gè)層稱為系統(tǒng)管理程序 或虛擬機(jī)監(jiān)視器(VMM)。準(zhǔn)虛擬化與之類似,但是系統(tǒng)管理程序會(huì)以一種更具協(xié)作性的方式進(jìn)行操作。這是因?yàn)槊總€(gè)客戶操作系統(tǒng)都了解自己正在虛擬化模式中 運(yùn)行,因此每個(gè)系統(tǒng)都與系統(tǒng)管理程序協(xié)作,來(lái)實(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)為是一個(gè)全虛擬化解決方案,不過(guò)我們稍后再介紹這個(gè)問(wèn)題。

  虛擬化的工作原理

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


圖 1. 虛擬化的分層抽象

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

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

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

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

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

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

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

  KVM

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


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

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

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

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

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

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

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

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

  使用 KVM

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

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

  有了啟用了虛擬化支持的引導(dǎo)內(nèi)核,接下來(lái)的一個(gè)步驟是為客戶操作系統(tǒng)創(chuàng)建一個(gè)磁盤映像。您可以使用 qeumu-img 來(lái)完成此操作,如下所示。注意這個(gè)映像的大小是 4GB,但是使用 QEMU 的寫時(shí)復(fù)制格式(copy-on-write,qcow)時(shí),整個(gè)文件將根據(jù)需要增長(zhǎng),而不是完全占據(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 映像來(lái)填充虛擬磁盤之外,還必須在結(jié)束時(shí)啟動(dòng)這個(gè)映像。 $ kvm -no-acpi -m 384 -cdrom guestos.iso -hd

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

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP Linux操作系統(tǒng)修改IP

相關(guān)下載

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