介绍KVM,它的本质以及如何配置和安装。虚拟化最近几年取得了长足的进步,首先由于有大量的开源虚拟机管理程序在不断发展,这个改进几乎排除了操作系统与大功率服务器快速增长的利用之间的障碍,公司立即受益。知道最近,软件仿真虚拟化一直是关注的焦点,两个常见的软件仿真虚拟化途径是完全虚拟化和半虚拟化。对于完全虚拟化,通常调用管理程序或虚拟机监视器,存在于虚拟操作系统和硬件层之间,这个层在操作系统实例之间多路复用竞争系统资源。半虚拟化不同,管理程序在一个协作的环境中运作,因为每个客户操作系统都知道它正运行在一个虚拟化环境中,因此每个使用管理程序的协作都在硬件下完成虚拟。
两个途径都有优势也有劣势,半虚拟化的主要优势在于它运行尽可能快地基于软件的虚拟化,以不支持有专利的操作系统为代价。完全虚拟化没有这个限制,但是,完全虚拟化管理程序非常复杂。VMware,一个商业虚拟化解决方案,它就是一个完全虚拟化的例子,Xen,用户模式Linux(UML)和其他提供的是半虚拟化解决方案。
简单介绍一下基于硬件的虚拟化,这个线路已经变得模糊起来,随着Intel的VT技术和AMD的SVM技术的出现,编写一个管理程序变得更加简单了,现在,保持管理程序复杂性到最小程度,对于完全虚拟化受益匪浅。
Xen作为最优秀的半虚拟化引擎,在基于硬件的虚拟化的帮助下,现在也支持完全虚拟化MS windows了。KVM是一个相对较新的简单的,但也非常强大的虚拟化引擎,它已经集成到Linux内核中去了,让内核天生有虚拟化的能力,因为KVM使用的是基于硬件的虚拟化技术,它不需要修改客户操作系统,因此,部署在一个受支持的处理器上,它可以从Linux支持任何平台。
KVM
kvm是一个独特的管理程序,kvm开发者们发明了一个方法让Linux内核自身变成一个管理程序,通过将KVM作为一个内核模块实现,在虚拟环境下Linux内核集成管理程序将其作为一个可加载的模块可以简化管理和提升性能。这可能是开发者将KVM添加到内核的主要原因。
这种方法有许多优势,通过添加虚拟化功能到一个标准的Linux内核,虚拟环境能从所有正在Linux内核上运行的工作中受益,在这种模式下,每个虚拟机都是一个常规的Linux进程,通过Linux调度程序进行调度,通常,一个标准的Linux进程都有两个执行模式:内核模式和用户模式。对于应用程序而言用户模式是默认模式,当它需要一些来自内核的服务时就进入内核模式,如往磁盘上写入时。KVM添加了第三个模式:客户模式。
客户模式进程是运行在虚拟机内的,它非常象正常模式(无虚拟实例),有它自己的内核和用户空间变量、在客户模式下可以使用正常的kill和ps命令,因为无虚拟实例,KVM虚拟机表现为一个正常的进程,能象其他进程一样被杀掉,KVM利用硬件虚拟技术虚拟处理器的形态,虚拟机的内存管理由内核直接处理,目前的版本I/O在用户空间处理,主要通过QEMU完成。
一个典型的KVM安装包括以下部件:
一个管理虚拟硬件的设备驱动,这个驱动通过一个字符设备/dev/kvm陈列它的功能
一个模拟pc硬件的用户空间部件,目前,这在用户空间处理,它是一个稍微改动过的QEMU进程。
I/O模型直接衍生于QEMU,支持写时复制磁盘映像和其他QEMU特征。
你如何查明你的系统是否能运行KVM?首先,你需要一个支持虚拟化的处理器,这里有一个兼容KVM的处理器列表(http://wiki.xensource.com/xenwiki/HVM_Compatible_Processors),看看你的处理器是否在其中。另外,你还可以检查/proc/cpuinfo,如果在cpu flags字段看到了vmx或smx,那么你的处理器就支持KVM。
如何比较KVM和现存的管理程序
相对它的竞争者而言,KVM还是一个比较新的项目,与KVM的主要开发者Avi Kivity会面时,他是这样与其他解决方案做对比的:
在许多方面,VMware是一个基础破坏技术,它只用软件技术管理众所周知地的复杂的x86架构的完全虚拟化,达到了非常好的性能和稳定性。结果,VMware变得非常大而其非常复杂的软件了。换句话说,KVM依赖于最新的硬件的虚拟技术,就其本身而论,它非常小(大约1万行代码)且相当简单,另外一个巨大的不同之处是VMware是有专利的,而KVM是开源的。
Xen是一个相当大的项目,同时提供半虚拟化和完全虚拟化,它被设计为一个独立的内核,它只需要Linux执行I/O,这样使得它相当的大,它有自己的调度程序、内存管理器、计时器和机器初始化程序。
相反,KVM使用标准Linux调度程序、内存管理器和其他服务。这样KVM开发者们可以集中精力在虚拟化上,将虚拟技术建立在内核上而不是去替换内核。
QEMU是一个用户空间模拟器,它是一个相当惊人的项目,可以在不同宿主处理器上模拟非常多的客户处理器,而且性能非常好。但是,用户空间架构不允许它在无内核加速器的情况下解决天生的速度问题。KVM认可QEMU的实用价值,使用它进行I/O硬件模拟。尽管KVM不带有任何特殊的用户空间,但QEMU代码写得非常好--因此我们使用了这些代码。
但是,KVM也不是完美的,因为它还是一个新技术,它包括下面的这样一些限制:
在写本文的时候,KVM仅支持Intel和AMD虚拟化,而Xen还支持IBM PowerPC和Itanium【安腾】处理器。
目前的版本最宿主SMP处理器的支持还比较弱。