KVM是集成到Linux內核的Hypervisor,是X86架構且硬件支持虛擬化技術(Intel VT或AMD-V)的Linux的全虛擬化解決方案。它是Linux的一個很小的模塊,利用Linux作大量的事,如任務調度、內存管理與硬件設備交互等。html
從存在形式看,KVM是兩個內核模塊kvm.ko和kvm_intel.ko(對AMD處理器來講,就是kvm_amd.ko),這兩個模塊用來實現CPU的虛擬化。 若是要讓用戶在KVM上完成一個虛擬機相關的操做,顯然須要用戶空間的東西,同時還包括IO虛擬化,因此KVM的解決方案借鑑了QEMU的東西並作了必定的修改,造成了本身的KVM虛擬機工具集和IO虛擬化的支持,也就是所謂的qemu-kvm.(KVM is a fork of QEMU, namely qemu-kvm)架構
Xen是第一類運行再裸機上的虛擬化管理程序(Hypervisor)。它支持全虛擬化和半虛擬化,Xen支持hypervisor和虛擬機互相通信,並且提供在全部Linux版本上的免費產品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。Xen最重要的優點在於半虛擬化,此外未經修改的操做系統也能夠直接在xen上運行(如Windows),能讓虛擬機有效運行而不須要仿真,所以虛擬機能感知到hypervisor,而不須要模擬虛擬硬件,從而能實現高性能。 QEMU is used by Xen.併發
QEMU是一套由Fabrice Bellard所編寫的模擬處理器的自由軟件。它與Bochs,PearPC近似,但其具備某些後二者所不具有的特性,如高速度及跨平臺的特性,qemu能夠虛擬出不一樣架構的虛擬機,如在x86平臺上能夠虛擬出power機器。kqemu爲qemu的加速器,經由kqemu這個開源的加速器,QEMU能模擬至接近真實電腦的速度。工具
QEMU自己能夠不依賴於KVM,可是若是有 KVM的存在而且硬件(處理器)支持好比Intel VT功能,那麼QEMU在對處理器虛擬化這一塊能夠利用KVM提供的功能來提高性能。性能
KVM和QEMU的關係ui
準確來講,KVM是Linux kernel的一個模塊。能夠用命令modprobe去加載KVM模塊。加載了模塊後,才能進一步經過其餘工具建立虛擬機。但僅有KVM模塊是 遠遠不夠的,由於用戶沒法直接控制內核模塊去做事情,你還必須有一個運行在用戶空間的工具才行。這個用戶空間的工具,kvm開發者選擇了已經成型的開源虛擬化軟件 QEMU。提及來QEMU也是一個虛擬化軟件。它的特色是可虛擬不一樣的CPU。好比說在x86的CPU上可虛擬一個Power的CPU,並可利用 它編譯出可運行在Power上的程序。KVM使用了QEMU的一部分,並稍加改造,就成了可控制KVM的用戶空間工具了。因此你會看到,官方提供的KVM 下載有兩大部分(qemu和kvm)三個文件(KVM模塊、QEMU工具以及兩者的合集)。也就是說,你能夠只升級KVM模塊,也能夠只升級QEMU工 具。這就是KVM和QEMU 的關係。spa
QEMU是個獨立的虛擬化解決方案,從這個角度它並不依賴KVM。 而KVM是另外一套虛擬化解決方案,不過由於這個方案實際上只實現了內核中對處理器(Intel VT, AMD SVM)虛擬化特性的支持,換言之,它缺少設備虛擬化以及相應的用戶空間管理虛擬機的工具,因此它借用了QEMU的代碼並加以精簡,連同KVM一塊兒構成了另外一個獨立的虛擬化解決方案,不妨稱之爲:KVM+QEMU. 操作系統
KVM用戶空間虛擬機管理工具備kvm, kvm-img, kvm-nbd ,kvm-ok 和kvm_stat,實際上kvm就是一個指向qemu-system-x86_64的符號連接,kvm-img則是指向qemu-img的符號連接。從適用的範圍來說, QEMU虛擬化方案除了支持x86架構外,還支持其餘不少架構,好比qemu-system-m68k,qemu-system-mips64, qemu-system-ppc64, qemu-system-arm等等。可是目前提到KVM,通常指x86上基於Intel VT和AMD SVM的解決方案,雖然目前將KVM移植到ARM, PPC的工做正在進行中。.net
固然因爲redhat已經開始支持KVM,它認爲KVM+QEMU'的方案中用戶空間虛擬機管理工具不太好使,或者通用性不強,因此redhat想了一個libvirt出來,一個用來管理虛擬機的API庫,不僅針對KVM,也能夠管理Xen等方案下的虛擬機。線程
kvm-qemu可執行程序像普通Qemu同樣:分配RAM,加載代碼,不一樣於從新編譯或者調用callingKQemu,它建立了一個線程(這個很重要);這個線程調用KVM內核模塊去切換到用戶模式,而且去執行VM代碼。當遇到一個特權指令,它重新切換會KVM內核模塊,該內核模塊在須要的時候,像Qemu線程發信號去處理大部分的硬件仿真。
這個體系結構一個比較巧妙的一個地方就是客戶代碼被模擬在一個posix線程,這容許你使用一般Linux工具管理。若是你須要一個有2或者4核的虛擬機,kvm-qemu建立2或者4個線程,每一個線程調用KVM內核模塊並開始執行。併發性(若果你有足夠多的真實核)或者調度(若是你無論)是被通用的Linux調度器,這個使得KVM代碼量十分的小。
當一塊兒工做的時候,KVM管理CPU和MEM的訪問,QEMU仿真硬件資源(硬盤,聲卡,USB,等等)當QEMU單獨運行時,QEMU同時模擬CPU和硬件。
from http://yansu.org/2013/03/20/different-bewteen-kvm-xen-qemu.html
from http://blog.chinaunix.net/uid-23769728-id-3256677.html
from http://zhidao.baidu.com/question/536621740.html