qemu,kvm,qemu-kvm,xen,libvirt的区别

KVM:(Kernel-based Virtual Machine)基于内核的虚拟机

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

Xen是第一类运行再裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化,Xen支持hypervisor和虚拟机互相通信,并且提供在全部Linux版本上的免费产品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。Xen最重要的优点在于半虚拟化,此外未经修改的操做系统也能够直接在xen上运行(如Windows),能让虚拟机有效运行而不须要仿真,所以虚拟机能感知到hypervisor,而不须要模拟虚拟硬件,从而能实现高性能。 QEMU is used by Xen.并发

QEMU

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