QEMU和QEMU-KVM的关系

不一样的基于KVM的虚拟化平台,可能会采用不一样的虚拟化组件,目前主流的采用QEMU-KVM组件,但在不一样的产品里版本有所不一样,功能也有差别,下面就几个概念进行梳理下git

 

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的运行。vim

 

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-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具备两大做用:工具

1.提供对cpu,内存(KVM负责),IO设备(QEMU负责)的虚拟性能

2.对各类虚拟设备的建立,调用进行管理(QEMU负责)云计算

 

libvirt.net

顺带提一提libvirt,这是RedHat开始支持KVM后,大概是以为QEMU+KVM方案中的用户空间虚拟机管理工具不太好用或者通用性不强,因此干脆搞了个libvirt出来,一个针对各类虚拟化平台的虚拟机管理的API库,一些经常使用的虚拟机管理工具如virsh(相似vim编辑器),virt-install,virt-manager等和云计算框架平台(如OpenStack,OpenNebula,Eucalyptus等)都在底层使用libvirt提供的应用程序接口。

libvirt主要由三个部分组成:API库,一个守护进程 libvirtd 和一个默认命令行管理工具 virsh。

 

总结:

目前来讲,QEMU是一个独立的虚拟化解决方案,并不依赖KVM(它自己本身能够作CPU和内存的模拟,只不过效率较低),而KVM是另外一套虚拟化解决方案,对CPU进行虚拟效率较高(采用了硬件辅助虚拟化),但自己不提供其余设备的虚拟化,借用了QEMU的代码进行了定制,因此KVM方案必定要依赖QEMU

即便后来RedHat后来开发了libvirt,也只能简单的认为是个虚拟机管理工具,仍然须要经过用户空间QEMU来与KVM进行交互


————————————————
版权声明:本文为CSDN博主「dAng1r0Us」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接及本声明。
原文连接:https://blog.csdn.net/shengxia1999/article/details/52244119


Aha,突然发现我也是个标题党,十分钟搞定某某技能这种标题最吸引人了。固然我也不是华而不实,是否是干货,你读了才知道。话说,接触Xen这么久了,如今才花时间搞清楚这个问题,要不是须要给别人解释,还不知道要等到何时才来写这篇博客。闲话少说,进入正题。

关于qemu

Qemu是一个独立的虚拟化解决方案,经过intel-VT 或AMD SVM实现全虚拟化,安装qemu的系统,能够直接模拟出另外一个彻底不一样的系统环境,虚拟机的建立经过qemu-image既可完成。QEMU自己能够不依赖于KVM,可是若是有KVM的存在而且硬件(处理器)支持好比Intel VT功能,那么QEMU在对处理器虚拟化这一块能够利用KVM提供的功能来提高性能。

关于KVM

KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(IntelVT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux作大量的事,如任务调度、内存管理与硬件设备交互等。准确来讲,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的关系。

关于Xen

实验室课题缘故,从一开始接触的就是Xen虚拟机,关于Xen的使用和开发都作了,也算是熟悉。Xen的编译安装是第一个要掌握的东西,首先你须要下载Xen的源码,而后执行configure、make 、make install。固然你也能够选择性的安装make install-xen,这种方法仅限于第二次使用Xen,并对源码作了更改后,能够不去编译安装tools文件夹下的东西,直接编译安装xen便可。那么tools下有什么东西呢?实际tools除了实现xl 、xm命令以外,还有很重要的一部分,也就是qemu-xen,qemu-xen-traditional等一些与qemu有关的程序。这也就是咱们今天要解释的xen中是如何使用qemu的。

总结

Qemu是一套独立的虚拟化解决方案,KVM是另外一套虚拟化解决方案,不过由于这个方案实际上只实现了内核中对处理器(Intel VT, AMDSVM)虚拟化特性的支持,换言之,它缺少设备虚拟化以及相应的用户空间管理虚拟机的工具,因此它借用了QEMU的代码并加以精简,连同KVM一块儿构成了另外一个独立的虚拟化解决方案,不妨称之为:KVM+QEMU.。Xen是另外一套独立的虚拟化解决方案,最初的Xen只支持半虚拟化,Intel VT技术出现后,添加了全虚拟化功能,这个全虚拟化功能也是借助了qemu实现,但不是彻底依赖qemu。

————————————————版权声明:本文为CSDN博主「小近视爱老花镜」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接及本声明。原文连接:https://blog.csdn.net/YSBJ123/article/details/51166343