Hypervisor, KVM, QEMU總結

 

Hypervisor

1.概念

Hypervisor——一種運行在基礎物理服務器和操做系統之間的中間軟件層,可容許多個操做系統和應用共享硬件。也可叫作VMM( virtual machine monitor ),即虛擬機監視器。linux

Hypervisors是一種在虛擬環境中的「元」操做系統。他們能夠訪問服務器上包括磁盤和內存在內的全部物理設備。Hypervisors不但協調着這些硬件資源的訪問,並且在各個虛擬機之間施加防禦。當服務器啓動並執行Hypervisor時,它會加載全部虛擬機客戶端的操做系統同時會分配給每一臺虛擬機適量的內存,CPU,網絡和磁盤。git

2.做用

Hypervisor是全部虛擬化技術的核心。 非中斷地支持多工做負載遷移的能力是Hypervisor的基本功能。vim

3.種類

目前市場上各類x86 管理程序(hypervisor)的架構存在差別,三個最主要的架構類別包括:服務器

I型:虛擬機直接運行在系統硬件上,建立硬件全仿真實例,被稱爲「裸機」型。
裸機型在虛擬化中Hypervisor直接管理調用硬件資源,不須要底層操做系統,也能夠將Hypervisor看做一個很薄的操做系統。這種方案的性能處於主機虛擬化與操做系統虛擬化之間。網絡

II型:虛擬機運行在傳統操做系統上,一樣建立的是硬件全仿真實例,被稱爲「託管(宿主)」型。託管型/主機型Hypervisor運行在基礎操做系統上,構建出一整套虛擬硬件平臺(CPU/Memory/Storage/Adapter),使用者根據須要安裝新的操做系統和應用軟件,底層和上層的操做系統能夠徹底無關化,如Windows運行Linux操做系統。主機虛擬化中VM的應用程序調用硬件資源時須要通過:VM內核->Hypervisor->主機內核,所以相對來講,性能是三種虛擬化技術中最差的。架構

Ⅲ型:虛擬機運行在傳統操做系統上,建立一個獨立的虛擬化實例(容器),指向底層託管操做系統,被稱爲「操做系統虛擬化」。操做系統虛擬化是在操做系統中模擬出運行應用程序的容器,全部虛擬機共享內核空間,性能最好,耗費資源最
少。可是缺點是底層和上層必須使用同一種操做系統,如底層操做系統運行的是Windows系統,則VPS/VE就必須運行Windows。框架

Hypervisor示例圖

廠商
目前市場主要廠商及產品:VMware vSphere、微軟Hyper-V、Citrix XenServer 、IBM PowerVM、Red Hat Enterprise Virtulization、Huawei FusionSphere、開源的KVM、Xen、VirtualBSD等。編輯器

4.特色

軟硬件架構和管理更高效、更靈活,硬件的效能可以更好地發揮出來。函數

5.多Hypervisor

服務器虛擬化須要評估、選擇和部署hypervisor,組織一般會選擇一種主流的hypervisor:VMware的ESXi、微軟的Hyper-V或者思傑的XenServer。然而,對不少組織來講,單獨的hypervisor已經不能知足全部的虛擬化需求。這時候能夠選擇採用第二類hypervisor產品。隨着服務器虛擬化技術的成熟,多hypervisor環境已經變得常見。可是,採用第二類虛擬化平臺時,必需要仔細考慮其成本、部署範圍和總開銷。工具

QEMU和KVM

不一樣的基於KVM的虛擬化平臺,可能會採用不一樣的虛擬化組件,目前主流的採用QEMU-KVM組件,但在不一樣的產品裏版本有所不一樣,功能也有差別,下面就幾個概念進行梳理下

KVM

Kernel-Based Virtual Machine 基於內核的虛擬機,是Linux內核的一個可加載模塊,經過調用Linux自己內核功能,實現對CPU的底層虛擬化和內存的虛擬化,使Linux內核成爲虛擬化層,須要x86架構的,支持虛擬化功能的硬件支持(好比Intel-VT,AMD-V),是一種全虛擬化架構。KVM在2007年2月被導入Linux 2.6.20內核中。從存在形式來看,它包括兩個內核模塊:kvm.ko 和 kvm_intel.ko(或kvm_amd.ko),本質上,KVM是管理虛擬硬件設備的驅動,該驅動使用字符設備/dev/kvm(由KVM自己建立)做爲管理接口,主要負責vCPU的建立,虛擬內存的分配,vCPU寄存器的讀寫以及vCPU的運行。

KVM是linux內核的模塊,它須要CPU的支持,採用硬件輔助虛擬化技術Intel-VT,AMD-V,內存的相關如Intel的EPT和AMD的RVI技術,Guest OS的CPU指令不用再通過Qemu轉譯,直接運行,大大提升了速度,KVM經過/dev/kvm暴露接口,用戶態程序能夠經過ioctl函數來訪問這個接口。見以下僞代碼:

open("/dev/kvm")
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)
for (;;) {
    ioctl(KVM_RUN)
        switch (exit_reason) {
        case KVM_EXIT_IO: 
        case KVM_EXIT_HLT:
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

QEMU

QEMU:是一套由Fabrice Bellard編寫的模擬處理器的自由軟件,它是一個完整的能夠單獨運行的軟件,能夠獨立模擬出整臺計算機,包括CPU,內存,IO設備,經過一個特殊的「重編譯器」對特定的處理器的二進制代碼進行翻譯,從而具備了跨平臺的通用性。QEMU有兩種工做模式:系統模式,能夠模擬出整個電腦系統,另外一種是用戶模式,能夠運行不一樣與當前硬件平臺的其餘平臺上的程序(好比在x86平臺上運行跑在ARM平臺上的程序);其代碼地址 http://git.qemu.org/qemu.git ,有興趣的同窗能夠本身去看看,目前最新的版本是2.7.0,在0.9.1及以前版本還可使用kqemu加速器(能夠理解爲QEMU的一個插件,用來提升QEMU的翻譯性能,支持Windows平臺),但1.0之後版本就只能使用qemu-kvm(只支持Linux)進行加速了,1.3版本後QEMU和QEMU-KVM合二爲一了。

QEMU示例圖

QEMU-KVM

QEMU-KVM:從前面對KVM內核模塊的介紹知道,它只負責CPU和內存的虛擬化,加載了它之後,用戶就能夠進一步經過工具建立虛擬機(KVM提供接口),但僅有KVM仍是不夠的,用戶沒法直接控制內核去作事情(KVM只提供接口,怎麼建立虛擬機,分配vCPU等並不在它上面進行),還必須有個運行在用戶空間的工具才行,KVM的開發者選擇了比較成熟的開源虛擬化軟件QEMU來做爲這個工具,並對其進行了修改,最後造成了QEMU-KVM。

在QEMU-KVM中,KVM運行在內核空間,QEMU運行在用戶空間,實際模擬建立,管理各類虛擬硬件,QEMU將KVM整合了進來,經過/ioctl 調用 /dev/kvm,從而將CPU指令的部分交給內核模塊來作,KVM實現了CPU和內存的虛擬化,但kvm不能虛擬其餘硬件設備,所以qemu還有模擬IO設備(磁盤,網卡,顯卡等)的做用,KVM加上QEMU後就是完整意義上的服務器虛擬化。固然,因爲qemu模擬io設備效率不高的緣由,如今經常採用半虛擬化的virtio方式來虛擬IO設備。

QEMU-KVM示例圖

綜上所述,QEMU-KVM具備兩大做用:
1.提供對cpu,內存(KVM負責),IO設備(QEMU負責)的虛擬
2.對各類虛擬設備的建立,調用進行管理(QEMU負責)

libvirt

一個針對各類虛擬化平臺的虛擬機管理的API庫,一些經常使用的虛擬機管理工具如virsh(相似vim編輯器),virt-install,virt-manager等和雲計算框架平臺(如OpenStack,OpenNebula,Eucalyptus等)都在底層使用libvirt提供的應用程序接口。libvirt主要由三個部分組成:API庫,一個守護進程 libvirtd 和一個默認命令行管理工具 virsh。

libvirt示例圖

總結: 目前來講,QEMU是一個獨立的虛擬化解決方案,並不依賴KVM(它自己本身能夠作CPU和內存的模擬,只不過效率較低),而KVM是另外一套虛擬化解決方案,對CPU進行虛擬效率較高(採用了硬件輔助虛擬化),但自己不提供其餘設備的虛擬化,借用了QEMU的代碼進行了定製,因此KVM方案必定要依賴QEMU 即便後來RedHat後來開發了libvirt,也只能簡單的認爲是個虛擬機管理工具,仍然須要經過用戶空間QEMU來與KVM進行交互。

相關文章
相關標籤/搜索