Xen

作者:Irfan Habib

在过去半个世纪中,微型计算机变得越来越强大。服务器系统也变得非常强大,以至于许多企业服务器通常都未被充分利用。现代计算机功能强大到足以使用虚拟化技术,从而在单台机器上呈现运行多个虚拟系统的假象。每个虚拟系统同时运行一个单独的操作系统实例。因此,您可以在同一台机器上同时运行多个 Linux 实例,或者您可以运行操作系统组合,例如 Linux、FreeBSD、Windows 等。这导致了人们对虚拟机 (VM) 技术的兴趣再次高涨,这种技术已经在大型机上存在了几十年。

剑桥大学计算机实验室的系统研究小组最初开发了 Xen(开源虚拟化软件),作为由 UK-EPSRC 资助的 XenoServers 项目的一部分。

XenoServers 旨在提供“用于全球分布式计算的公共基础设施”。Xen 在该项目中发挥着关键作用,它允许用户有效地划分单台机器,从而使多个独立客户端能够在环境中运行其操作系统和应用程序。有关 XenoServers 项目的更多信息,请访问 www.cl.cam.ac.uk/xeno

Xen 是一个 x86 虚拟机监视器,它允许多个商用操作系统(如 Linux 和 MS Windows)以安全且资源管理的方式共享传统硬件。它的设计旨在最大限度地减少性能开销。因此,虚拟化操作系统实例具有接近原生性能。Xen 团队通过提供虚拟机抽象来实现这一点,操作系统(如 Linux 和 MS Windows)可以以最小的努力移植到该抽象。根据多项基准测试,Xen 的性能大大优于竞争对手的商业和免费解决方案。

XenSource

Xen 是如此有效地降低总体拥有成本的虚拟化手段,以至于最初的 Xen 开发团队基于该项目启动了一项咨询业务。请参阅 XenSource (www.xensource.com),它被认为是“全球 Xen 开源社区的家园”。

Xen 的应用

到目前为止,Xen 的主要用途之一是服务器整合。组织可以将托管在多个物理分离服务器上的服务器软件转移到单个服务器上,方法是为每个单独的服务器使用虚拟机。例如,现在公司可以在 FreeBSD 安装上托管 Sendmail,同时在同一物理服务器上的 Red Hat Enterprise Edition 上托管 Apache Web 服务器。

这使企业能够通过使用少量服务器来完成过去需要许多服务器才能完成的任务,从而降低其总体拥有成本。服务器整合还使系统管理更加容易。

Xen 可以实现分布式 Web 服务的开发。这使用户感觉到服务托管在单独的系统上,但实际上,它们托管在同一物理系统上。这为部署面向服务的应用程序节省了大量的 IT 预算,并为托管其他以网络为中心的应用程序提供了平台。

Xen 一直是操作系统研究的福音。通过 Xen,现在可以实现新的内核级算法,并在虚拟环境中对其进行测试,而不会影响主机操作系统。在 Linux 内核开发中,使用用户模式 Linux 很流行;但是,在许多基准测试中,Xen 的性能优于用户模式 Linux。

Xen 的虚拟化功能使组织能够保持其服务器 24/7 全天候可用。组织可以启动临时虚拟服务器,以在修补和升级通常用于提供这些服务的虚拟服务器上的操作系统时保持服务可用。

Xen 还使组织能够在新的硬件上运行旧版应用程序,从而保护他们过去的投资。

与其他方法的比较

现在我们对 Xen 提供的潜在应用和优势有了一些了解,让我们简要了解一下它与其他方法的比较,并探讨其内部工作原理的一些显着特征。

在单个服务器中托管不同的操作系统并不新鲜。如今,许多台式 PC 都是双启动系统,其中至少在单台机器上安装了两个不同的操作系统,每个操作系统都运行一组特定于每个操作系统的软件。

当用户需要同时运行两个操作系统时,有几种选择。他们可以获得两台计算机系统,并将每个系统专用于每项服务。他们可以使用 Wine 或 Win4Lin 等模拟器在 Linux 上运行 MS Windows 的服务,或者使用 CoLinux 在 MS Windows 上运行未修改的 Linux 服务。

但是,这些方法存在某些缺点。获得两台服务器来托管两项服务本质上是昂贵的,并且会导致资源利用不足。Wine、Win4Lin 或其他模拟器通常存在性能、可伸缩性和兼容性问题。

因此,在许多情况下,最佳解决方案是在单台机器上运行虚拟机软件,并在同一台机器上同时托管两个操作系统。

存在专有的虚拟化系统,例如 VMware Workstation [请参阅第 56 页 Mick Bauer 对 VMware Workstation 5.5 的评论]。VMware 等软件实现了所谓的完全虚拟化。VMware 虚拟化了计算机的每个方面。因此,VMware 引入了相当大的开销。并发操作系统通常比平时运行得更慢。随着硬件变得更便宜、更强大,软件变得更加优化,这种性能滞后在未来可能不会被注意到,但目前这构成了一个问题。

VMware 确实有企业级商业产品,例如 ESX Server,其性能优于 VMware Workstation 产品,并且此类产品可能能够使虚拟化操作系统的运行性能接近其原生性能。但是,此产品的基准测试不可用,并且在各种基准测试中,VMware Workstation 的性能始终低于 Xen。

VMware 的方法确实比 Xen 的方法具有一个很大的优势。VMware 能够虚拟化专有操作系统。正如我在本文后面讨论的那样,您必须将操作系统的内核移植到 Xen 才能使其与 Xen 一起工作。否则,您无法在 Xen 上运行操作系统。

Hypervisor(虚拟机监控器)

Xen 是一个虚拟机监控器。也就是说,它不在任何操作系统上运行,而是让操作系统在其上运行!Xen 在 x86 架构允许的最高优先级级别(称为 Ring 0)运行。它使操作系统在 x86 架构中获得第二高的优先级(称为 Ring 1)。

Xen 提供了一些库,操作系统内核必须移植到这些库才能与 Xen 一起工作。将操作系统移植到 Xen 上运行类似于将操作系统移植到新的硬件平台;但是,该过程得到了简化,因为半虚拟化机器架构与底层原生硬件非常相似。尽管内核必须移植,但 Xen 不需要对用户应用程序进行任何修改,用户应用程序可以在 Xen 系统上保持不变地运行。

到目前为止,只有开源操作系统被移植到 Xen。除非 Microsoft 发布启用 Xen 的 Windows 版本,否则我们可能无法获得完全虚拟化的 MS Windows 的好处。到目前为止,Linux 端口可用,FreeBSD、NetBSD 和 Solaris 10 端口正在进行中。

Xen 的开发人员必须克服一些重大挑战,才能成功地在多个客户操作系统之间划分现代机器的资源。首先,虚拟机必须相互隔离——也就是说,一台机器中的问题不得影响其他虚拟机的运行。其次,有必要支持各种不同的操作系统,以适应流行的应用程序的异构性,例如企业通常使用 Linux 和 MS Windows 安装的组合来支持其工作。第三,虚拟化引入的性能开销应该很小。Xen 的方法成功地解决了这些挑战中的每一个。请参阅“Xen and the Art of Virtualization”,网址为 www.cl.cam.ac.uk/Research/SRG/netos/papers/2003-xensosp.pdf,其中详细讨论了 Xen 的方法。

我们将介绍 Xen 方法的一些显着特征。

如前所述,当操作系统移植到 Xen 时,Xen 是一个使用半虚拟化的虚拟机监控器。Xen 可以访问一些内部操作系统内核信息,以便管理系统。这种移植还使客户操作系统内核可以访问真实信息和虚拟信息,这对于时间关键型任务具有特定的优势。即使在像 x86 这样本身不支持虚拟化的架构上,半虚拟化也允许非常高性能的虚拟化。

半虚拟化使 Xen 能够在整个操作系统的粒度上多路复用物理资源,并能够在每个虚拟机之间提供性能隔离。这也允许一系列客户操作系统共存,而不会相互影响。Xen 的半虚拟化方法允许用户以资源受控的方式运行应用程序。此外,它提供了极高的灵活性,因为用户可以动态创建其软件所需的精确执行环境。避免了各种服务和应用程序之间不幸的配置交互。

亲自尝试

如前所述,Xen 主要为 x86 架构开发;但是,它并非支持所有基于 x86 的处理器——仅支持 P6 或更新的处理器,包括 Pentium Pro 到 Pentium 4 以及 Intel Celeron 和 Intel Pentium Xeon 处理器。除了 Intel 之外,还支持 AMD 的 Athlon 到 AthlonXP 和 FX 处理器,以及 AMD Duron。

感兴趣的读者可能想亲自尝试一下 Xen,而无需安装整个系统。Xen 项目提供了 Xen 的 Live CD 演示,其中包含 Debian 和 CentOS。Live CD 版本可以成为演示 Xen 功能的强大工具。可以启动到任何提供的发行版中,并根据系统内存的允许,多次启动任一发行版的新实例。

在 Live CD 版本中,还可以实时监控所有虚拟机的资源使用情况,并在每个虚拟机中启动应用程序。

安装 Xen

对于想要开始安装 Xen 的高级用户,以下是一个简要指南。安装 Xen 是一个三步过程。您安装 Xen 及其用户级工具,然后配置引导加载程序,最后为每个客户操作系统定义 VM 配置文件。

从二进制 tarball 或 RPM 包安装是安装 Xen 的最简单方法。对于二进制 tarball,只需执行以下操作

bash# tar zxvf xen-3.0-install.tgz
bash# cd xen-3.0-install
bash# sh ./install.sh

对于 RPM 包,执行以下操作

bash# rpm -iv xen-3.0-i686.rpm

(或 RPM 的任何名称)。

从源代码安装 Xen 更加复杂,因为它涉及修补和重新编译 Linux 内核。本文未涵盖从源代码安装,Xen 用户手册 (www.cl.cam.ac.uk/Research/SRG/netos/xen/documentation.html) 中对此进行了详尽的描述。

配置引导加载程序

安装 Xen 后,我们需要配置引导加载程序。对于 GRUB 用户,编辑 menu.lst 文件,并添加此条目

title Xen
kernel /boot/xen-3.0.gz dom0_mem=32768 module
-->/boot/vmlinuz-2.6-xen0 root=/dev/hda7 ro console=tty0

vmlinuz-2.6-xen0 是 tarball 二进制文件或 RPM 安装的内核映像;如果您从源代码安装,请在此处替换映像的名称。

另请务必替换根文件系统的名称以适合您的系统(在本例中,它是 root=/dev/hda7)。

对于 LILO 用户,执行以下操作

image="/boot/xen-3.0.gz
label="Xen"
root="/dev/hda7"
read-only
append="dom0_mem=32768"

安装并配置 Xen 后,您现在可以启动到 Xen 并启动您的第一个虚拟机。

重新启动并启动您的 Xen 安装后,该安装类似于正常的 Linux 启动,登录到 Domain0。那是 Xen 系统中特权最高的域。

从这里,用户可以创建将运行客户操作系统的虚拟机,并启动和停止虚拟机。

要创建新的虚拟机,您需要为其定义一个配置文件。Xen 在 /etc/xen 目录中附带了两个默认配置文件,分别名为 xmexample1/ 和 amd xmexample2/。配置文件包含许多参数,但幸运的是,其中许多参数是可选的。您只需要配置一些参数即可使您的虚拟机运行。一些重要的参数包括

  • 内核:要引导的内核。

  • 根:根文件系统。

  • 磁盘:系统安装在哪个磁盘分区上。

  • 内存:定义虚拟机应使用的内存量。

示例配置文件可能如下所示

kernel = '/boot/vmlinuz-2.6.12.6-xen'

disk = [ 'phy:hda1,hda1,w' ]

root = '/dev/hda1 ro'

memory = 128

为虚拟机声明配置文件后,您可以通过键入以下内容来启动机器

bash# xm create -c /root/myOSconf vmid=1

其中 myOsconf 是配置文件的名称。

之后,将弹出一个新窗口,您将看到正常的 Linux 启动,直到您到达登录屏幕,从那里您可以享受您的新客户操作系统。

结论

Xen 是一款成熟的开源虚拟化软件,它为组织创造了许多新的机会,以降低其总体拥有成本并提供更可靠和高可用的应用程序。基于 x86 的商用系统提供了所有这些,只需以最低的成本将操作系统移植到 Xen 即可。

Xen 的开发人员已针对其他流行的虚拟化解决方案(如 VMware Workstation 和用户模式 Linux)对 Xen 进行了测试。在进行的所有测试中,Xen 的性能均优于其他方法——在标准基准测试中,例如 Spec Int200、Spec Web99、dbench 等等。结果发表在研究论文中,可在 www.cl.cam.ac.uk/Research/SRG/netos/papers/2003-xensosp.pdf 上查阅。

Irfan Habib 是一位开源爱好者,已有五年时间。他对分布式计算技术非常感兴趣,他全职从事分布式计算技术研究,并且他喜欢探索解决计算中常见问题的新解决方案。欢迎将评论发送至 irfan.habib@gmail.com

加载 Disqus 评论