ubuntu 虚拟化 KVM QEMU libvirt

KVMQEMUlibvirt三者的关系大致如下:

qemu,kvm,qemu-kvm,xen,libvir区别

引用

QEMU

QEMU是一套由FabriceBellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性,qemu可以虚拟出不同架构的虚拟机,如在x86平台上可以虚拟出power机器。kqemu为qemu的加速器,经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。

QEMU本身可以不依赖于KVM,但是如果有KVM的存在并且硬件(处理器)支持比如IntelVT功能,那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。

KVM和QEMU的关系

准确来说,KVM是Linuxkernel的一个模块。可以用命令modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是远远不够的,因为用户无法直接控制内核模块去作事情,你还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU的关系。

QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(IntelVT,AMDSVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了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上基于IntelVT和AMDSVM的解决方案,虽然目前将KVM移植到ARM,PPC的工作正在进行中。

当然由于redhat已经开始支持KVM,它认为KVM+QEMU'的方案中用户空间虚拟机管理工具不太好使,或者通用性不强,所以redhat想了一个libvirt出来,一个用来管理虚拟机的API库,不只针对KVM,也可以管理Xen等方案下的虚拟机。

KVM(kernel-basedvirtualmachine)中文含义:基于内核的虚拟机

(1)是x86架构且硬件支持虚拟化技术(如intelVT或AMD-V)的linux[全虚拟化]解决方案。

(2)它包含一个为处理器提供底层虚拟化,可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。

(3)kvm还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。

(4)kvm能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(ps:它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。

(5)在主流的linux内核,如2.6.20以上的内核均包含了kvm核心。

qemu全称QuickEmulator。kvm并不需要qemu进行虚拟处理,只是需要它的上层管理界面进行虚拟机控制。虚拟机依旧是由kvm驱动。