即将推出的linux 2.6.20内核包含一个全新的虚拟技术: KVM, 全称为基于内核的虚拟机. 它很友好, 稳定和高性能, 虽然还没有正式发布. 本文从理论和实践介绍KVM的原理, 并给出一些简单的评测报告.
原理简介
当前存在几种不同的虚拟技术. 一种是准虚拟化技术(Paravirtualization), 客户操作系统需做一些修改. 另一种是全虚拟化技术(Full Virtualization), 客户操作系统无需任何修改. 我们知道全虚拟化技术是以降低性能来提高兼容性, 因为在虚拟化环境中如果没有客户操作系统的协助, 系统将很难达到较好的性能. 另一方面, 近来新处理器的开发缩短了这方面的差距. 最新的Intel VT(虚拟技术, Virtualization Technology)和AMD SVM(安全虚拟机, Secure Virtual Machine)从硬件上支持了虚拟技术, 试图取代准虚拟化技术. KVM在标准的Linux内核中增加了虚拟技术, 从而我们可以通过(或将)优化的内核来使用虚拟技术.
在KVM模型中, 每一个虚拟机都是一个由Linux调度程序管理的标准进程. 一个普通的Linux进程有两种运行模式: 内核和用户. KVM增加了第三种模式: 客户模式(有自己的内核和用户模式.)
KVM由两个部分组成:
一个是管理虚拟硬件的设备驱动, 该驱动使用字符串设备/dev/kvm做为管理接口.
另一个是模拟PC硬件的用户空间组件, 这是一个稍做修改的qemu进程.
QEMU是一个著名的处理器模拟程序, 由法国人Fabrice Bellard开发.
KVM实践: 使用Windows XP做为客户机
KVM仍在开发当中, 我决定来做一些实验. 我使用了2.6.20-rc2内核和现成的Debian软件包: kvm和qemu. 重新编译内核和安装软件包后, 一切准备就绪.
安装客户机的操作系统非常简单:
qemu-img create hda.img -f qcow 6G
kvm -no-acpi -m 256 -cdrom winxpsp2.iso -hda hda.img -boot d
第一步是创建一个虚拟盘(主机系统上的一个普通文件). 我选择了QEMU写时拷贝格式, 文件将随着内容的增多而增大, 这样不至于浪费磁盘空间, 虚拟盘最大为6GB. 虚拟盘准备好后, 开始系统安装. 实际上, 我已经预先做了一项工作(非必须的), 从Windows XP系统安装光盘拷贝所有数据到磁盘上, 简单一个命令 cp /dev/cdrom image.iso). 我使用了-no-acpi参数, 因为QEMU只是实验性的支持ACPI, 在Windows XP系统安装过程中Windows Installer(安装程序)会存在一些问题.
我想没有比这还更简单的安装. 很快就完成了windows的安装. 有人也许会问我, 什么选择windows呢? 好的, 现在我没有理由来选择在linux系统上运行linux虚拟机. 而且, 我也很想做一些Windows虚拟机的测试. 现在你不用安装双启动模式了, 你随时都可以简单启动widnows虚拟机. 然后比如在windows虚拟机中打开IE7来查看本文..
一些基准测试
好的, Windows XP的安装速度很快, 接下来我有更多的时间进行一些基准测试. 提示, 测试工作是部分性的, 非标准测试. 目的是从实验来理解KVM的一些特性. 另外我提供了几个有意思的实例, 做起来也很容易. 一旦完成Windows系统的安装, Windows客户机甚至可以在未经修改的QEMU上运行. 而且我重新编译和安装了kqemu, kqemu是一个由qemu原作者开发的QEMU加速模块(QEMU accelerator module), 可惜它是一个闭源软件. 最后, 我选择了两个测试软件: PCMark2002和Super PI(版本 1.1e). 注意测试硬件的处理器是Intel E6600.
我认为kqemu和KVM比单独的QEMU模拟器的性能要强很多. 而且可以看到kqemu只比kvm好一点点. 但是我想kvm的性能会不断改进的, 毕竟比起其它虚拟技术, kvm还很年轻.
运行Super PI的结果是: KVM速度最快, 相当于原始(单机运行)速度(在实际硬件上运行, 无任何虚拟机软件)的84%. 而QEMU的速度是最慢的, 上面图表没有显示实际数据, 我把所有的结果列出来(数值越低越快, 每秒处理100万条指令): QEMU: 492.5 sec, kqemu: 28.5 sec, KVM: 25.5 sec, native: 21.5 sec.
结论
KVM仍在开发当中, 它向我们展示了其真实的潜力. 我想接下来我们会看到更多好的有关kvm的新闻. 届时当kvm集成到Linux官方内核当中, 它将变成一个日用品. 而且kvm不仅会应用到数据中心和服务器系统加固上, 而且也会应用到Linux桌面上. 非常感谢QEMU和KVM开发人员所做的工作.