Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1509788
  • 博文数量: 228
  • 博客积分: 1698
  • 博客等级: 上尉
  • 技术积分: 3241
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-24 21:49
个人简介

Linux

文章分类

全部博文(228)

文章存档

2017年(1)

2016年(43)

2015年(102)

2014年(44)

2013年(5)

2012年(30)

2011年(3)

分类: 网络与安全

2014-07-17 15:36:02

软件简介

QEMU是一个开源的模拟器项目,能够模拟整个系统的硬件,在GNU/Linux平台上使用广泛,而且并不像VMWare哪样仅仅针对x86体系架 构。QEMU运行于多种操作系统中和不同的CPU体系架构中,允许在虚拟机运行时保存虚拟机的状态,进行实时迁移,进行操作系统级别的调试,也能模拟硬件 失效的案例。QEMU的安装包中提供了qemu-img这个强大的工具来创建、转换或者加密虚拟机映像,也支持从其他虚拟机格式中启动。qemu-nbd 能够将QEMU的映像文件通过NDB(Network Block Device)协议共享给其他机器。Linux系统中,QEMU支持用户态模拟,即允许某一个应用程序的API调用其他版本的动态链接库。在 QEMU0.9.1版本之前,可以通过KQEMU这个闭源的加速器进行加速,而在QEMU1.0之后的版本,无法使用kqemu而主要利用qemu- kvm进行加速,并且加速效果以及稳定性明显好于kqemu。

运行模式

QEMU支持全模拟化、支持KVM、和KQEMU加速模块等方式: 第一种模式是通过kqemu模块实现内核态的加速。通过在内核中加入kqemu的相关模块,在用户态的QEMU则通过访问/dev/kqemu设备文件接 口调用改进型加速。在这种模式中,主要针对虚拟机和宿主机运行于统一架构的情况下进行虚拟化。 第二种模式是在用户态直接运行QEMU,由QEMU对目标机的所有指令进行翻译后执行,相当于全虚拟化。在这种模式下,可以运行各种不同形态的体系结构, 如Android开发环境中即使用了QEMU来为其模拟ARM运行环境,但是在这种模拟环境下,每一条目标机的执行指令都需要耗费少则数个,多则成 千上万个宿主机的指令周期来模拟实现,速度方面不太理想。 第三种模式则是KVM官方提供的kvm-qemu加速模式。运行在内核态的KVM模块通过/dev/kvm字符设备文件向外提供操作接口。KVM通过提供 libkvm这个操作库,将/dev/kvm这一层面的ioctl类型的API转化成为通常意义上的函数API调用,提供给qemu的相应适配层,通过 qemu的支持来完成整个虚拟化工作。 针对这三种不同运行模式的测试结果表明,通过KVM对QEMU进行加速从而获取的性能最为理想。

QEMU-KVM

KVM是Linux开源社区大力支持的虚拟化技术,基于Intel和AMD的硬件虚拟化技术。KVM支持页表虚拟化和IOMMU虚拟化技术,页表虚 拟化技术用于将GuestOS的页表转换到HostOS运行环境中。在这种机制下,KVM的HostOS将要接管所有的内存分配(其实也是使用Linux 内核的内存管理能力)。 KSM(KernelSamepageMerging)在2.6.32版本的Linux内核中被引入,通过KSM技术能够为虚拟机提供超过实际的物理内 存。KVM的模块分为公共模块kvm.ko,和硬件相关的模块kvm-intel.ko和kvm-amd.ko。KVM提供一个字符型设备文件接口 /dev/kvm。当linux的内核加载kvm模块之后,整个linux kernel就成为了一个Hypervisor。但是当KVM运行时是排他性的,如VMWareServer等解决方案均无法共存。

Xen需要两个系统来共同协调以完成工作:hypervisor和特制的GuestOS,因此KVM比xen更容易安装和实施,同时一个系 统的安全性也比两个系统要高。KVM并不是一个完全的模拟器,而是借鉴了QEMU来完成相关外设模拟。很多发行版中,QEMU和KVM都被打包到了一个 package中(但是这个版本的QEMU将不再支持其他多个不同的体系架构)。

自从Linux内核的2.6.20版本开始,KVM被引入到内核中,其最先开发的公司Qumarnet也已经被Redhat收购。KVM是 一个独特的管理程序,在虚拟环境下Linux内核集成管理程序将其作为一个可加载的模块可以简化管理和提升性能。这是开发者将KVM添加到内核的主要原 因。这种方法有许多优势,通过添加虚拟化功能到一个标准的Linux内核,虚拟环境能从所有正在Linux内核上运行的工作中受益,在这种模式下,每个虚 拟机都是一个常规的Linux进程,通过Linux调度程序进行调度,通常,一个标准的Linux进程都有两个执行模式:内核模式和用户模式。对于应用程 序而言用户模式是默认模式,当它需要一些来自内核的服务时就进入内核模式,如往磁盘上写入时。KVM添加了第三个模式:客户模式。

客户模式进程是运行在虚拟机内的,有自己的内核和用户空间变量,在客户模式下可以使用正常的kill和ps命令。KVM虚拟机表现为一个正 常进程,能象其他进程一样被杀掉,KVM利用硬件虚拟技术虚拟处理器的形态,虚拟机内存管理由内核直接处理,目前的版本I/O在用户空间处理,主要通过 QEMU完成。 在许多方面,VMware是一个基础破坏技术,它只用软件技术来管理众所周知地的复杂x86架构的完全虚拟化,达到了非常好的性能和稳定性。结果 VMware变得非常大而其非常复杂了。换句话说,KVM依赖于最新的硬件的虚拟技术,非常小(大约1万行代码)且相当简单。另外,VMware是有专利 的,而KVM是开源的。Xen是一个相当大的项目,同时提供半虚拟化和完全虚拟化,它被设计为一个独立的内核,它只需要Linux执行I/O,这样使得它 相当的大,它有自己的调度程序、内存管理器、计时器和机器初始化程序。相反,KVM使用标准Linux调度程序、内存管理器和其他服务。这样KVM开发者 们可以集中精力在虚拟化上,将虚拟技术建立在内核上而不是去替换内核。
QEMU是一个用户空间模拟器,它是一个相当惊人的项目,可以在不同宿主处理器上模拟非常多的客户处理器,而且性能非常好。但是,用户空间架构导致在无内 核加速器的情况下无法解决天生的速度问题。KVM认可QEMU的实用价值,使用它进行I/O硬件模拟。尽管KVM不带有任何特殊的用户空间,但QEMU代 码写得非常好——因此KVM使用了这些代码。


阅读(3116) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~