转载:
http://blog.csdn.net/chdhust/article/details/7557791
VM虚拟机是基于linux内核虚拟化,自linux2.6.20之后就集成在 linux的各个主要发行版本中。它使用linux自身的调度器进行管理,所以相对于xen,其核心源码很少。KVM的虚拟化需要硬件的支持(如 intel VT技术或者AMD V技术),是基于硬件的完全虚拟化。而xen早期则是基于软件模拟的para-virtualization,新版本是基于硬件支持的完全虚拟化。
qemu是一种模拟处理器,现在运用最多的就是将KVM和QEMU结合起来。
准确来说,KVM是Linux kernel的一个模块,可以用命令modprobe去加载KVM模块。加载了该模块后,才能进一步通过工具创建虚拟机。但是仅有KVM模块是不够的。因 为用户无法直接控制内核去做事情,还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件QEMU。说 起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个power的CPU,并可利用它编译出可运行在 power上的CPU,并可利用它编译出可运行在power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。 所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM 模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系。
如下图:
Linux Kernel-based Virtual Machine (KVM) 是一款 Linux 开放源码虚拟化软件,基于硬件虚拟化扩展(Intel VT- X 和 AMD-V)和 QEMU 的修改版。KVM 的实现模块又两个,分别是: kvm.ko是提供核心虚拟化的基础架构;特定于处理器的模块 kvm-intel.ko 和 kvm-amd.ko 。其设计目标是在需要引导多个未改动的 PC 操作系统时支持完整的硬件模拟。
一个普通的linux进程有两种运行模式:内核和用户。而KVM增加了第三种模式:客户模式(有自己的内核和用户模式)。在kvm模型中,每一个虚拟机都是由linux调度程序管理的标准进程。
kvm由两个部分组成:一个是管理虚拟硬件的设备驱动,该驱动使用字符设备/dev/kvm作为管理接口;另一个是模拟PC硬件的用户空间组件,这是一个稍作修改的qemu进程。
转载:http://www.scholat.com/vpost.html?pid=7294
虚拟化研究中KVM和QEMU的区别
KVM和QEMU这两个性能良好的虚拟机软件,两者究竟有什么不同?下面我从两者的代码架构及其实现平台方面,浅析一下这两者的区别。PS:由于本人接触 虚拟化时间不长,对其剖析可能很多地方不到位,希望熟悉这方面知识的大牛多多指正!好了,废话不多说,请看下面的分析。
KVM(Kernel-based Virtual Machine)是基于虚拟化扩展(Intel VT或AMD-V)的X86硬件平台实现的Linux的全虚拟化解决方案,其基本结构由两部分组成:一个是KVM Driver ,是Linux 内核的一个模块,负责虚拟机的创建,虚拟内存的分配,虚拟CPU寄存器的读写以及虚拟CPU的运行等;另一个部分是稍微修改过的Qemu,用于模拟PC硬 件的用户空间组件,模拟I/O设备模型以及提供访问外设的途径。
KVM基本架构如下图所示。其中KVM加入到标准的Linux内核中,被组织成Linux中标准的字符设备(/dev/kvm)。Qemu利用KVM提供 的LibKvm应用程序接口,通过ioctl系统调用创建和运行虚拟机。KVM Driver使得整个Linux成为一个虚拟机监控器。并且在原有的Linux两种执行模式(内核模式和用户模式)的基础上,新增加了客户模式,客户模式 拥有自己的内核模式和用户模式。在虚拟机运行下,三种模式的分工如下:
客户模式:执行非I/O的客户代码,虚拟机运行在客户模式下。
内核模式:实现到客户模式的切换,处理因为I/O或者其它指令引起的从客户模式的退出,KVM Driver工作在这种模式下。
用户模式:代表客户执行I/O指令Qemu运行在这种模式下。
在KVM模型中,每一个Guest OS 都作为一个标准的Linux进程,可以使用Linux的进程管理指令管理。
它的基本工作原理:用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。KVM Driver为虚拟机创建虚拟内存和虚拟CPU后执行VMLAUCH指令进入客户模式,然后装载Guest OS执行。如果Guest OS发生外部中断或者影子页表缺页之类的事件,暂停Guest OS的执行,退出客户模式进行一些必要的处理。然后重新进入客户模式,执行客户代码。如果发生I/O事件或者信号队列中有信号到达,就会进入用户模式处 理。
QEMU(Quick Emulator)是一个独立的开源虚拟机软件,它是通过纯软件来仿真X86平台处理器的取指、解码和执行,虚拟客户机的指令并不在物理平台上直接执行, 它利用其中的微型代码生成器模块进行动态翻译,将需要模拟的客户机的代码架构转换成主机代码架构并最终执行。QEMU虚拟机是一个纯软件的实现(KVM需 要硬件虚拟化技术支持),所以性能低下。但是,其优点是虚拟机可以与宿主机并不是同一个架构。与KVM不同的是,QEMU的代码中有整套的虚拟机实现,包 括处理器虚拟化、内存虚拟化,以及KVM使用到的虚拟设备模拟(比如网卡、显卡、存储控制器和硬盘等)。