2.5.2 Xen虚拟化方案
Xen是由剑桥大学计算机实验室开发的一个开源项目,是一个直接运行在计算机硬件之上的用以替代操作系统的软件层,它能够在计算机硬件上并发地运行多个客户操作系统(Guest OS),目前已经在开源社区中得到极大的推动。
早在20世纪90年代,伦敦剑桥大学的Ian Pratt和Keir Fraser在一个叫作Xenoserver的研究项目中,开发了Xen虚拟机。做为Xenoserver的核心,Xen虚拟机负责管理和分配系统资源,并提供必要的统计功能。当时,x86的处理器还不具备对虚拟化技术的硬件支持,所以Xen从一开始是作为一个半虚拟化的解决方案出现的。因此,为了支持多个虚拟机,内核必须针对Xen做出特殊的修改才可以运行。为了吸引更多开发人员参与,2002年Xen正式被开源。2004年,Intel的工程师开始为Xen添加硬件虚拟化的支持,从而为即将上市的新款处理器做必需的软件准备。在他们的努力下,2005年发布的Xen 3.0开始正式支持Intel的VT技术和IA64架构,从而使Xen虚拟机可以运行完全没有修改的操作系统。2007年10月,思杰(Citrix)公司出资5亿美金收购了XenSource,变成了Xen虚拟机项目的拥有者。
Xen支持x86、x86-64、安腾(Itanium)、Power PC和ARM多种处理器,因此它可以在大量的计算设备上运行。目前,Xen支持Linux、NetBSD、FreeBSD、Solaris、Windows和其他常用的操作系统作为客户操作系统在其管理程序上运行。
Xen是一个直接在系统硬件上运行的虚拟机管理程序。Xen在系统硬件与虚拟机之间插入一个虚拟化层,将系统硬件转换为一个逻辑计算资源池,并可将其中的资源动态地分配给任何操作系统或应用程序。在虚拟机中运行的操作系统能够与虚拟资源交互,就好像它们是物理资源一样。
Xen上运行的虚拟机,既支持半虚拟化,也支持全虚拟化,几乎可以运行所有可以在x86物理平台上运行的操作系统。此外,最新的Xen还支持ARM平台的虚拟化。
在Xen Hypervisor上运行的半虚拟化操作系统,为了调用系统管理程序XenHypervisor,要有选择地修改操作系统,但不需要修改操作系统上运行的应用程序。由于Xen需要修改操作系统内核,所以不能直接让当前的Linux内核在Xen系统管理程序中运行,除非它已经移植到了Xen架构。
在Xen Hypervisor运行的全虚拟化虚拟机,所运行的操作系统都是标准的操作系统,即无须任何修改的操作系统版本,但同时也需要提供特殊的硬件设备。例如,在Xen上虚拟Windows虚拟机必须采用完全虚拟化技术。
图2-26所示为Xen架构。在硬件系统之上是Xen的Hypervisor。基于Xen的Hypervisor,有Domain0,也称0号虚拟机,它是一个比较特殊的虚拟机。Domain1和Domain 2是在Xen架构上的虚拟客户机。
图2-26 Xen架构
Xen上运行的所有虚拟机中,0号虚拟机是特殊的,其中运行的是经过修改的支持准虚拟化的Linux操作系统,大部分输入/输出设备都交由这个虚拟机直接控制,而非Xen本身控制它们,这样做可以使基于Xen的系统最大限度地复用Linux内核的驱动程序。更广泛地说,Xen虚拟化方案在Xen Hypervisor和0号虚拟机的功能上做了聪明的划分,既能够重用大部分Linux内核的成熟代码,仅可以控制系统之间的隔离,并更加有效地管理和调度。通常,0号虚拟机也被视为是Xen虚拟化方案的一部分。
Xen架构包含3大部分:
(1)Xen Hypervisor:直接运行于硬件之上,是Xen客户操作系统与硬件资源之间的访问接口。通过将客户操作系统与硬件进行分类,Xen管理系统可以允许客户操作系统安全、独立地运行在相同硬件环境之上。
Xen Hypervisor是直接运行在硬件与所有操作系统之间的基本软件层。它负责为运行在硬件设备上的不同种类的虚拟机(不同操作系统)进行CPU调度和内存分配。Xen Hypervisor对虚拟机来说不仅是硬件的抽象接口,同时也控制虚拟机的执行,让它们之间共享通用资源的处理环境。但是,Xen Hypervisor不负责处理诸如网络、外部存储设备、视频或其他通用的I/O处理。
(2)Domain0:运行在Xen管理程序之上,是具有直接访问硬件和管理其他客户操作系统特权的客户操作系统。
Domain0是经过修改的Linux内核,是运行在Xen Hypervisor之上独一无二的虚拟机,拥有访问物理I/O资源的特权,并且可以与其他运行在Xen Hypervisor之上的虚拟机进行交互。所有的Xen虚拟环境都需要先运行Domain 0,然后才能运行其他的虚拟客户机。Domain 0在Xen中担任管理员的角色,负责管理其他虚拟客户机。在Domain 0中包含两个驱动程序——Network Backend Driver和Block Backend Driver,用于支持其他客户虚拟机对于网络和硬盘的访问请求。
Network Backend Driver直接与本地的网络硬件进行通信,用于处理来自Domain U客户机的所有关于网络的虚拟机请求。根据Domain U发出的请求,Block Backend Driver直接与本地的存储设备进行通信,然后将数据读/写到存储设备上。
(3)Domain U:指运行在Xen管理程序之上的普通客户操作系统或业务操作系统,例如图2-26中的Domain 1和Domain 2,Domain U不能直接访问硬件资源(如内存、硬盘等),但可以独立并行地存在多个。
Domain U客户虚拟机没有直接访问物理硬件的权限。所有在Xen Hypervisor上运行的半虚拟化客户虚拟机都是被修改过的基于Linux的操作系统、Solaris、FreeBSD和其他基于UNIX的操作系统。所有完全虚拟化客户虚拟机则是标准的Windows和其他任何一种未被修改过的操作系统。
无论是半虚拟化Domain U还是完全虚拟化Domain U,作为客户虚拟机系统,Domain U在Xen Hypervisor上都可以并行地存在多个,它们之间相互独立,每个Domain U都拥有自己所能操作的虚拟资源(如内存、磁盘等)。而且,允许单独一个Domain U进行重启和关机操作而不影响其他Domain U。
下面简单介绍一下Xen的功能特性:
(1)Xen服务器(即思杰公司的Xen Server产品)构建于开源的Xen虚拟机管理程序之上,结合使用半虚拟化和硬件协助的虚拟化。操作系统与虚拟化平台之间的这种协作,支持开发一个较简单的虚拟机管理程序来提供高度优化的性能。
(2)Xen提供了复杂的工作负载平衡功能,可捕获CPU、内存、磁盘I/O和网络I/O数据。它提供了两种优化模式:一种针对性能;另一种针对密度。
(3)Xen服务器包含多核处理器支持、实时迁移、物理服务器到虚拟机转换(P2V)和虚拟到虚拟转换(V2V)工具、集中化的多服务器管理、实时性能监控,以及对Windows和Linux客户机的良好性能。
最后看一下Xen的优缺点:
Xen作为一个最早的虚拟化方案,对各种虚拟化功能的支持相对完善。Xen虚拟机监控程序是一个专门为虚拟机开发的微内核,所以其资源管理和调度策略完全是针对虚拟机的特性而开发的。作为一个独立维护的微内核,Xen的功能明确,开发社区构成比较简单,所以更容易接纳专门针对虚拟化所做的功能和优化。但是,Xen比较难于配置和使用,部署会占用相对较大的空间,而且非常依赖于0号虚拟机中的Linux操作系统。Xen微内核直接运行于真实物理硬件之上,开发和调试都比基于操作系统的虚拟化困难。