“虚拟化”江湖,开源双侠显身手——Xen与KVM虚拟化技术解析

行业观察

服务器虚拟化是热门的数据中心技术,凭借整合和节省费用的优势吸引了企业用户的注意,站在开源领域和Linux平台最前沿的公司们也越来越关注这一动向。事实上,鉴于专有软件存在的许可证问题,廉价或免费的开源软件与虚拟化平台的组合,是推动Linux在数据中心得到广泛应用的重要保证。 或许可以说,开源软件与虚拟化是天生的一对,它们的组合算得上是完美的。服务器虚拟化技术已经成为未来计算机技术的一个重要的发展方向,Linux在服务器虚拟化方面已经有了很多成功的解决方案,Xen 和KVM的虚拟化技术是企业用户不错的选择。

Xen:从半虚拟化到全虚拟化

开放源代码的Xen Hypervisor 开始的时候只是剑桥大学计算机实验室的一个有趣的项目——Open Source项目,其最初的主要目的是为了建立更多的虚拟机器。使用Xen的目的是让效能更高,比如在采用Xen的情况下,系统效能大约损失 2%,在最糟的情况下会有 8% 的效能耗损,而使用其他虚拟化技术却可能造成最高 20%的能效损耗。

1.从半虚拟化到全虚拟化方式

早期要运行Xen,用户需要对操作系统进行适当的修改。需要指出的是,这是一个单向的改变,修改后的内核不能再在传统的没有Xen Hypervisor的硬件上运行。所以在早期的Xen版本上运行Windows是不太可能的——因为Windows是不允许被修改的,所以最初Xen是以Linux社区为服务目标,红帽将Xen整合到了Linux系统(RHEL5.0)中。不过,随着英特尔和AMD在处理器中引入硬件辅助虚拟化技术,这种局面终于有所改变,借助处理器的硬件虚拟化技术,不再需要修改系统的内核也可以使用Xen。

早期Xen的这种独特的工作方式被称为半虚拟化,相对于VMware的全虚拟化方式,最大的不同就是对I/O设备的处理。Xen采用的是与Hyper-V一样的分离驱动模式,真实驱动存在于一个中间层,这个中间层叫服务虚拟机,其他虚拟机上的特殊驱动通过这个服务虚拟机进行通信,这种方法能提供很好的性能,但是对于传统操作系统的支持有限。Xen作为最优秀的半虚拟化引擎,在硬件辅助虚拟化的帮助下,现在也支持完全虚拟化了。

而在VMwarer ESX中,虚拟机的虚拟设备驱动与ESX内核里的物理设备驱动直接相互连接,ESX虚拟机可以为其虚拟设备使用现成的驱动,这不仅能提高性能,还能提供更广泛的操作系统支持。为了解决I/O虚拟化的平衡问题和复杂性问题,英特尔、AMD等硬件厂商一起,在芯片组和I/O设备中引入了虚拟化支持。

2.Xen的虚拟化管理器Xend

虚拟化解决方案的另外一个重要部分就是管理。在这里要介绍一下Xend,它是Xen的管理控制器,它负责处理创建、销毁、迁移及其他许多Domain管理任务——这里的操作都需要基于一个HTTP服务器,大量对Domain的控制请求都是通过发送HTTP请求来实现的。基于Xen的操作系统,有多个层,最底层和最高特权层是Xen程序本身。Xen 可以管理多个客户操作系统,每个操作系统都能在一个安全的虚拟机中实现。在Xen的架构中,Domain由Xen控制,以高效地利用CPU的物理资源,每个客户操作系统可以管理它自身的应用,这种管理包括每个程序在规定时间内的响应到执行,是通过Xen调度到虚拟机中实现的。

比如,当Xen启动运行后,第一个虚拟的操作系统就是Xen本身,通过管理列表,用户会发现有一个Domain 0的虚拟机。Domain 0 目前主要由Linux来充当,是其他虚拟机的管理者和控制者,可以构建其他更多的Domain(也称为Domain U) ,并管理虚拟设备。一个被称为Xend的服务器进程通过Domain 0来管理系统,Xend 负责管理众多的虚拟主机,并且提供进入这些系统的控制台,命令经一个命令行工具通过一个HTTP的接口被传送到Xend。此外通过控制器,Xen虚拟机可以在不停止的情况下,在多个物理主机之间实时迁移或进行动态迁移。

Xend支持迁移Xen客户机Domain有两种方式:存储还原法和动态迁移法。存储还原法类似笔记本电脑上的深度休眠功能,它先将捕获的Domain运行状态作为映像存放在磁盘上,然后再用该映像对这个Domain 进行还原。虽然这种方法很简单,但是如果你的服务器上有不许中断的关键业务,或者你想最小化业务中断时间,那么是不能采用这种迁移方法的。这时,Xen为我们提供的一种强大的功能就派上用场了,它就是动态迁移法,它能让Domain在运行期间,以最小的服务中断为代价,将Domain迁移到另外的Xen 服务器上。动态迁移法以最少的中断和停机时间来动态改变处于运行状态中的Domain的运行位置,企业用户完全可以根据自己的需求来决定采用何种虚拟机迁移方式。

3.Citirx力推Xen

值得一提的是,2007年Citrix(思杰)收购XenSource后,将Xen技术纳入自家的虚拟化产品线。只不过在服务器虚拟化上,Citrix走了一条与VMware完全不同的路线。Citrix专门提供像Citrix Presentation Server这样的技术和访问机制,注重与虚拟化跨平台的应用,使得它在服务器虚拟化方面不像VMware和微软那样专业。不过Citirx在XenServer 5.0后的版本上将重点放在了高可用性和灾难恢复功能上,通过增加这些功能,使得其服务器虚拟化产品的性能和功能更加接近VMware ESX。

在今年5月的Citrix Synergy 2009大会上,Citirx推出了最新XenServer 5.5版本。相对于此前的Xen Server,XenServer 5.5在管理功能方面得到了强化。比如XenServer 5.5首先加强了虚拟机名称检索功能,当运行大量虚拟机的时候,这种功能就会为用户带来相当大的方便。XenServer 5.5还被集成到了Windows的Active Directory中,这样就可以有针对性地将Active Directory指定给每个虚拟机池。而且当虚拟机上运行Windows服务器的时候,操作也更加简单。

另外,它还可以将VMware的虚拟磁盘格式转化成为XenServer或者Hyper-V采用的VHD格式,这样就可以轻松地将VMware虚拟化环境切换到XenServer环境。新的XenConvert工具支持OVF、OVA和XVA格式,且能在这些格式之间轻松切换,因此用户可以在不同的虚拟磁盘上使用XenServer。此外,Xen-Motion是Citrix XenServer的动态迁移技术,在架构上也与Vmotion相差不大,至少需要高可用性以及共享磁盘驱动器的辅助才能构成这项功能。

34-行业1-1-1.jpg
Xen的基本架构

KVM:将虚拟化集成到系统内核中

KVM的全称为Kernel-based Virtual Machine,是针对Linux内核的虚拟化方案。相对于Xen,KVM要幸运得多,由于它推出时Intel和AMD的处理器开始支持硬件辅助虚拟化技术,因此KVM不需要重新编译系统内核也可以正常运行,当然要使用KVM的话,你的X86处理器必须支持硬件辅助虚拟化技术(Intel-VT或AMD-V)。KVM是一个相对较新的、简单的、非常强大的虚拟化引擎,它已经集成到Linux内核中了,这让Linux内核天生就具有虚拟化的能力。因为KVM使用的是基于硬件的虚拟化技术,它不需要修改客户操作系统,因此部署在一个受支持的处理器上,KVM可以从Linux支持任何平台。

1.KVM的系统级虚拟化方式

KVM属于系统级虚拟化,它采用的虚拟化方法有别于Xen Hypervisor。系统级虚拟化和系统内核有关,通过加载内核模块来实现系统级的系统管理程序,这一点KVM与VMware ESX是非常相似的。VMware的Hypervisor是独立的,要利用周边设备的话就需要专门针对ESX的驱动程序,虽然它支持主要服务器厂商的产品,但如果没有准备周边设备的驱动程序,就无法被ESX利用。因为KVM是与Linux内核集成的,所以可以说KVM与VMware ESX拥有相同的架构,但是KMV能够利用Linux驱动程序这一点与ESX有很大不同,能够利用庞大的Linux社区所提供的程序也是它的一大优势。同时,现在有很多服务器制造商都在积极开发支持周边设备的Linux用驱动程序。

2.KVM的虚拟化管理器

在虚拟化管理上,集成到Linux内核中的KVM采用了与一种被称为Qemu的模拟器相同的机制,在虚拟化环境中处理I/O和进行CPU操作。Qemu最初是作为开源虚拟化产品研发的,是一个用户空间模拟器,可以在不同宿主处理器上模拟非常多的客户处理器,但是用户空间架构不允许它在无内核加速器的情况下解决速度问题,因此它并不十分成功。后来KVM增加了一个新的客户模式, 每个虚拟机都是由Linux调度程序管理的标准进程,这样我们就可以使用通常的进程管理工具来管理每个虚拟机。目前Linux 2.6.20-rc1和更高版本的Linux内核已经包含了KVM内核主件,而且Red Hat收购了开发KVM的Qumranet,使得KVM的可靠性和性能有了很大提高。

3.红帽力推KVM

现在Red Hat(红帽)正在进行相关软件的Beta测试,除了RHEL 5.4和RHEV以外,还有虚拟服务器的管理工具——Red Hat Virtualization Manager for Servers和虚拟桌面的管理工具——Red Hat Virtualization Manager for Desktops(Linux/Windows),一共有4款软件。Red Hat可能会在9月上旬发布真正支持KVM的RHEL 5.4,不过,目前真正采用KVM的Linux发行版本比采用Xen的要少,很多Linux虚拟化的用户使用的是Xen。因此,即使支持KVM的RHEL 5.4发布,很多企业也不会马上迁移到这个平台上来,而且KVM的普及还是要取决于用户是否了解KVM的优点以及对KVM的信赖程度,形成KVM完善的生态系统是KVM能普及开来的关键所在。红帽虚拟化产品系列未来的研发方向是基于KVM的,这将使红帽成为使用KVM作为Linux操作系统一部分的唯一厂商,红帽将提供不同的工具和服务,使客户能够从红帽企业Linux5的Xen技术迁移到KVM。

34-行业1-1-3.jpg
KVM由两部分组成:一部分是管理虚拟硬件的设备驱动,另一部分是管理Linux内核的组件