下载本文的PDF版本 PDF

虚拟机的轮回

Mendel Rosenblum,斯坦福大学和VMWare

虚拟化技术卷土重来。

虚拟机一词最初描述的是1960年代的操作系统的概念:一种看起来像计算机系统硬件(真实机器)的软件抽象。四十年后,该术语涵盖了范围广泛的抽象——例如,与现有真实机器不匹配的Java虚拟机。尽管存在各种变体,但在所有定义中,虚拟机都是程序员或编译系统的目标。换句话说,软件是为在虚拟机上运行而编写的。

剖面图

查看不同虚拟机抽象的一种方法是将其视为硬件/软件堆栈的“切片”。现代计算机系统由多层组成,从硬件开始,包括操作系统层以及在操作系统之上运行的应用程序(参见图1)。虚拟化软件通过在系统的不同位置插入一层来抽象虚拟机。这些虚拟化层的三个示例包括硬件级虚拟化、操作系统级虚拟化和高级语言虚拟机。

硬件级虚拟化。 此处的虚拟化层直接位于硬件之上,导出虚拟机抽象。由于虚拟机看起来像硬件,因此为其编写的所有软件都将在虚拟机中运行。这实际上是1960年代的原始虚拟机定义,包括较旧的技术,例如IBM大型机上的VM/370,以及基于x86机器的VMware虚拟化技术,如图2所示。(有关更多信息,请参见本期第52页Bob Supnik的“模拟器:过去【和未来】的虚拟机”。)

操作系统级虚拟化。 在这种情况下,虚拟化层位于操作系统和在操作系统上运行的应用程序之间。虚拟机运行为要虚拟化的特定操作系统编写的应用程序或应用程序集。FreeBSD Jails是这项技术的一个例子(有关更多信息,请参见本期第42页Poul-Henning Kamp和Robert Watson的“构建可安全共享的系统”)。

高级语言虚拟机。 在高级语言虚拟机中,虚拟化层作为应用程序位于操作系统之上。该层导出一个虚拟机抽象,该抽象可以运行为特定抽象机器定义编写和编译的程序。任何用高级语言编写并为此虚拟机编译的程序都将在其中运行。Smalltalk和Java是这种虚拟机的两个例子(有关更多信息,请参见本期第24页的“访谈:James Gosling”)。

虚拟机的属性

尽管在各种类型之间,在虚拟机环境中运行的主要吸引力有所不同,但所有类型都共享一组共同的属性。

软件兼容性。 虚拟机提供兼容的抽象,以便为其编写的所有软件都可以在其上运行。例如,硬件级虚拟机将运行为硬件编写的所有软件、操作系统和应用程序。同样,操作系统级虚拟机将运行该特定操作系统的应用程序,而高级虚拟机将运行用高级语言编写的程序。

虚拟机抽象通常可以屏蔽虚拟机下方硬件和软件层中的差异。Java的声明“一次编写,随处运行”就是一个例子。

隔离。 虚拟机抽象将虚拟机中运行的软件与其他虚拟机和真实机器隔离开来。这种隔离确保错误或黑客可以被限制在虚拟机内,因此不会对系统的其他部分产生不利影响。除了数据隔离之外,虚拟化层还可以执行性能隔离,以便一个虚拟机消耗的资源不一定会损害其他虚拟机的性能。传统上,操作系统在执行资源平衡和防止饥饿方面不如虚拟机环境有效。

封装。 导出虚拟机抽象的软件层是间接级别的一个例子。该层可用于操作和控制虚拟机中软件的执行。它还可以使用这种间接性来增强软件或提供更好的执行环境。例如,高级语言的虚拟机通常支持运行时检查,可以减少一类编程错误。这些包括类型安全、内存安全和垃圾回收的内存管理。总的来说,该层为编程提供了更好的执行环境。

性能。 向系统添加软件层会增加开销,这可能会对虚拟机中运行的软件的性能产生不利影响。成功的虚拟机系统的好处远远超过它们引入的任何开销。

硬件级VMM:为何卷土重来?

尽管硬件级虚拟机在1960年代和1970年代在研究和商业市场上都很流行,但在1980年代和1990年代它们几乎消失了。到Java等高级语言虚拟机出现时,除了IBM的大型机和AS/400业务系统外,很少有系统在运行。

硬件级虚拟机由称为虚拟机监视器(VMM)的薄软件层导出。VMM直接在真实机器的硬件上运行,导出看起来像硬件的虚拟机抽象。通过使虚拟机与硬件接口匹配,虚拟机能够运行为硬件编写的所有软件。

VMM的主要挑战是以安全、透明和高效的方式将真实硬件传递给虚拟机。安全意味着无论虚拟机软件做什么,它都不应能够脱离其隔离环境并影响其他虚拟机或VMM。由于虚拟机中运行的软件认为它实际上是在原始硬件上运行,因此VMM负责通过有效地“欺骗”软件关于硬件的真实状态来维护这种错觉。

1960年代使用的技巧是配置硬件,使VMM可以在需要维护安全控制并欺骗软件认为它拥有硬件时获得控制权。这种硬件支持称为硬件虚拟化,它允许VMM在隔离和受保护的环境中运行虚拟机。它对虚拟机中运行的软件也是透明的,软件认为它独占控制硬件。在1960年代和1970年代,为了使这种映射简单快速,以便VMM可以以很小的性能和资源开销运行,做了大量工作。

自1990年代后期以来,人们对VMM的兴趣重新燃起,不仅在传统的服务器领域,而且作为桌面计算环境的扩展。例如,VMware在1999年推出了宿主型VMM。它能够扩展现代操作系统以支持像旧式硬件级VMM一样运行的虚拟机(参见图3)。

VMM的属性

现代VMM导出的主要属性是软件兼容性、隔离能力、封装和低开销/高性能。

软件兼容性。 通过使虚拟机抽象化真实硬件,为硬件开发的所有操作系统和应用程序都将在虚拟机中运行。VMware的产品导出一个基于x86的计算机,能够运行所有Microsoft操作系统,包括DOS、Windows 3.1、Windows 95、Windows 98、Windows NT、Windows 2000、Windows ME和Windows XP,以及其他x86操作系统,如Linux和FreeBSD。

在本文描述的所有虚拟化软件形式中,硬件级虚拟化运行的软件最多。为了保持兼容性,它只需要匹配硬件接口,硬件接口的演变速度往往比软件接口(如应用程序和操作系统之间的接口)慢得多。

隔离能力。 VMM能够利用机器的硬件生产机制将虚拟机彼此隔离。传统的VMM使用CPU的MMU(内存管理单元)以及其他生产机制来控制虚拟机中运行的软件的访问。这种方法导致负责虚拟机隔离的软件量相对较小。

隔离代码的小尺寸有助于提供非常高的保证,即实现了真正的隔离。在虚拟机中运行的代码无法访问其他虚拟机或监视器。VMM能够控制每个虚拟机可以访问哪些资源。这种隔离可以处理意外和恶意攻击。无论虚拟机中的软件做什么,它都无法打破VMM设置的保护和错觉。

与现代操作系统的规模和复杂性(可能包含数百万行代码)相比,VMM的小尺寸进一步增加了实现真正隔离的信心。例如,在现代操作系统中,负责维护隔离并在CPU的最特权模式下运行的代码有数十万行。具有良好硬件虚拟化支持的传统VMM的隔离代码可以用数万行来衡量。

传统上,VMM提供的隔离与拥有单独物理机器提供的隔离相比较。这比现代操作系统所经历的隔离要高得多。

封装。 硬件级虚拟机封装了在硬件上运行的所有软件,因此VMM具有管理硬件资源以及操作和控制整个软件堆栈的独特能力。监视器允许虚拟机中运行的软件有效地与硬件分离。这种分离为硬件级虚拟机提供了许多独特的功能。

由于所有虚拟机软件都被封装,因此监视器可以透明地管理虚拟机中的软件和硬件。监视器可以使用此功能在同一物理机器上同时运行多个虚拟机,或在不同的硬件平台之间迁移正在运行的虚拟机。监视器有效地控制所有硬件。它还将硬件映射到任何需要资源的虚拟机。

虚拟化层还可以消除硬件平台之间的细微差异,以允许相同的虚拟机在它们之上运行。VMM提供了一个转换层,可以将虚拟机的虚拟设备映射到不同的物理设备上。

最后,虚拟机中所有软件的封装允许监视器管理整个软件堆栈。虚拟机抽象可用于在机器上配置软件,以及管理和负载均衡软件。监视器可以保存或检查虚拟机的执行状态,并在其他时间恢复它。此功能使其能够有效地撤消虚拟机的执行。

低开销/高性能。VMM用于安全地将虚拟机直接映射到真实机器硬件上的技术,使得性能接近真实机器的性能。VMM的工作是设置硬件,以便虚拟机的虚拟硬件直接映射到真实硬件资源。由于两个接口定义(虚拟和真实)匹配,因此执行的虚拟机可以在真实硬件上全速运行。例如,虚拟CPU由VMM通过简单地调度虚拟机运行真实CPU来模拟。类似地,虚拟I/O设备(如磁盘)使用真实磁盘进行模拟。

使用硬件虚拟化导致VMM开销以小百分比衡量。在虚拟机中运行的软件将其大部分执行时间直接用于硬件资源;性能与底层硬件相同。当VMM需要获得控制权以维护安全隔离或维护透明错觉时,就会发生VMM开销。这些事件在大多数工作负载中相对不频繁地发生。

硬件虚拟化在1960年代和1970年代很常见,但在1990年代,它已从大多数流行的硬件平台中消失。然而,它似乎正在卷土重来。

VMM技术

如今,VMM的使用在更传统的服务器环境以及桌面机器上都出现了复苏。其中一些原因是应用程序兼容性、程序测试和开发、加速应用程序部署、数据隔离和逻辑分区。

应用程序兼容性。当升级操作系统或迁移到不同的操作系统时,发现某些应用程序在新操作系统上无法工作是很常见的。当修改复杂的软件系统(如现代操作系统)时,保持100%的向后兼容性非常困难。当修改包括修复错误和关闭应用程序依赖的安全漏洞时,这变得不可能完成。

通过使用宿主型VMM(如VMware的Workstation),可以在同一台个人计算机上同时运行新旧操作系统。在新操作系统上无法运行的应用程序可以在旧环境中运行,旧环境包含在虚拟机中。

程序测试和开发。 处理多个、不同、完整的操作系统环境的能力在软件的开发和测试中非常有用。软件工程师可以保留不同软件配置的虚拟机库,以便针对其进行开发或测试。同样,系统管理员可以保留旧版本、当前版本以及可能较新版本的软件,以帮助部署和向后兼容性阶段。

加速应用程序部署。 预配置的虚拟机包含一套已配置好并准备运行的应用程序,可用于加速应用程序的部署。虚拟机可以运行,而无需在现有机器上安装和配置其他依赖软件应用程序的耗时任务。这种部署机制对于演示复杂的软件环境尤其有用——例如,大型应用程序套件或客户端-服务器应用程序,否则将需要多台机器。考虑一个现代Web服务器,它可能需要完整的SQL数据库、中间件应用程序、PHP服务器、Perl模块等等,所有这些都需要在安装讨论区的新应用程序之前安装和运行。

数据隔离。 硬件级虚拟机的强大隔离属性可用于在一个系统内隔离数据。NSA(国家安全局)的NetTop系统使用隔离属性来允许同一工作站访问机密网络和公共互联网。使用了两个虚拟机——一个仅连接到机密网络,另一个连接到公共网络。隔离属性确保来自公共网络的恶意攻击者无法访问机密数据。

逻辑分区。 硬件级虚拟化可用于使用称为逻辑分区的技术来分区物理机箱以支持多个虚拟机。通过使用另一种称为服务器整合的技术,您可以将多个服务器整合到更少数量的机箱中,然后从中央控制台管理它们。不仅需要更少的硬件来支持相同数量的服务器,而且管理控制台可以使用该层的控制功能来观察、停止、重启、负载均衡和以比在物理机箱上运行时更容易的方式管理服务器。较少数量的物理机器还减少了服务器的电源、冷却、占地面积等——这可以降低成本。最后,虚拟机的隔离属性意味着一台服务器中的故障或泄露不会影响机器上的其余服务器。例如,打印服务器的故障不会导致Exchange服务器瘫痪。当然,这种逻辑分区假设单独的应用程序服务器往往利用不足并且大部分时间处于空闲状态。

VMM完成的复杂资源管理保证服务器获得一定数量的硬件资源。行为不端的服务器无法通过消耗物理机器的所有资源来发动拒绝服务攻击。通过这种方式,当组合在单个硬件平台上时,每个隔离的服务器仍然保证一定的性能水平。

从过去的经验中学习

硬件级虚拟机技术已经存在了40多年,因此值得回顾过去,为未来汲取一些教训。有趣的问题之一是关于VMM和操作系统。这两个系统都“认为”它们应该控制计算机系统的资源。但经验表明,VMM和现代操作系统都无法单独完美地做到这一点。

例如,IBM的VM/CMS使用VMM运行多个虚拟机,每个虚拟机都使用单用户操作系统而不是多用户操作系统(如Unix)。当明确更好的解决方案是真正的多用户操作系统时,IBM不再强调基于VMM的解决方案,转而支持其多用户操作系统MVS。关于向后兼容性,现代多用户操作系统存在足够严重的问题,以至于VMM技术正在被重新引入。显然,我们必须确定使用VMM实现功能与在操作系统中实现功能之间的平衡。

我们还必须确定哪个软件真正控制硬件资源:VMM还是操作系统。在虚拟机中运行VMM和做出资源决策的操作系统可能会导致次优决策。例如,应该由谁决定何时不再需要内存页,因此可以将其写入(即“分页”)到磁盘——VMM还是虚拟机中运行的操作系统?当运行对时间高度敏感的软件(例如,实时控制)时,这些资源管理决策变得尤为重要。这些问题的解决方案包括让虚拟机中的软件“知道”它正在虚拟机中运行,并与VMM就资源管理决策进行通信。

硬件虚拟机的未来

尽管硬件级虚拟化从1970年代的广泛使用到1980年代的几乎灭绝,但它已经强势回归。VMware的产品在商业市场上的成功,以及最近对虚拟化的硬件支持,如Intel的Vanderpool技术和IBM Power架构的扩展,表明这是一种刚刚开始被充分认识到的技术,并且它将长期存在。

计算趋势表明,未来的数据中心很可能包括硬件级虚拟化层和控制系统。服务将在虚拟机中运行,并将映射到可用的硬件资源。这不仅将大大简化数据中心的管理,还将简化新硬件以及故障硬件的处理。单个物理机箱的故障将减少可用资源池,而不是特定服务的可用性。

同样,虚拟机技术将用于允许系统软件领域的积极创新,提供保持向后兼容性的能力。虚拟机将允许支持旧应用程序以及当前版本,并将测试基于相同硬件的新版本的部署。

摩尔半导体增长定律的一个后果是计算系统性能的指数级增长。与性能增长相比,经过良好调整的硬件虚拟化系统的开销非常小。这意味着计算行业只需付出几个百分点的性能,就可以实现硬件级虚拟化的巨大好处。这些好处包括管理硬件和虚拟机中运行的软件——目前这是现代计算环境中的一大笔开销。

MENDEL ROSENBLUM,斯坦福大学计算机科学系副教授,于1998年共同创立了VMware,并担任其首席科学家。他于1984年获得弗吉尼亚大学数学学士学位,并于1989年和1992年获得加州大学伯克利分校计算机科学硕士(M.S.)和博士(Ph.D.)学位。他曾获得1992年国家科学基金会的国家青年研究员奖、1994年阿尔弗雷德·P·斯隆基金会研究奖学金,并于1992年共同获得博士论文奖和2002年/SIGOPS马克·韦泽奖,以表彰其在操作系统研究中的创造力和创新。他的研究兴趣包括系统软件、分布式系统和计算机体系结构。Rosenblum发表了关于磁盘存储管理、计算机模拟技术、可扩展操作系统结构、虚拟化计算机安全和移动性的材料。

版权所有 © 2004 。

acmqueue

最初发表于Queue vol. 2, no. 5
数字图书馆中评论本文





更多相关文章

Jonathan Parri, Daniel Shapiro, Miodrag Bolic, Voicu Groza - 将控制权还给程序员
服务器和工作站硬件架构不断改进,但解释型语言未能跟上现代处理器的正确利用率。SIMD(单指令多数据)单元几乎在每个当前的桌面和服务器处理器中都可用,但利用率严重不足,尤其是在解释型语言中。如果多核处理器继续保持当前的增长模式,解释型语言的性能将开始落后,因为当前的本机编译器和语言提供更好的自动化SIMD优化和直接SIMD映射支持。


Bob Supnik - 模拟器:过去(和未来)的虚拟机
模拟器是一种“虚拟机”,旨在解决一个简单的问题:缺少真实硬件。过去系统的模拟器解决了真实硬件的丢失问题,并在真实硬件消失后保持软件的可用性。未来系统的模拟器解决了未来硬件设计的可变性问题,并促进了在真实硬件存在之前软件的开发。


Poul-Henning Kamp, Robert Watson - 构建可安全共享的系统
计算的历史以性能的显着提高和摩尔定律描述的价格下降为特征,从而导致持续的转型。计算能力已从集中式大型机/服务器迁移到分布式系统和商品桌面。尽管发生了这些变化,但系统共享仍然是计算的重要工具。从桌面环境的多任务处理、文件共享和虚拟机到主机托管中心中服务器级ISP硬件的大规模共享,在互不信任的各方之间安全地共享硬件需要解决意外和恶意损坏的关键问题。


Poul-Henning Kamp, Robert Watson - 构建可安全共享的系统
计算的历史以性能的显着提高和摩尔定律描述的价格下降为特征,从而导致持续的转型。计算能力已从集中式大型机/服务器迁移到分布式系统和商品桌面。尽管发生了这些变化,但系统共享仍然是计算的重要工具。从桌面环境的多任务处理、文件共享和虚拟机到主机托管中心中服务器级ISP硬件的大规模共享,在互不信任的各方之间安全地共享硬件需要解决意外和恶意损坏的关键问题。





© 保留所有权利。

© . All rights reserved.