当前位置:Linux教程 - Linux业界 - X86架构走向芯片级虚拟化

X86架构走向芯片级虚拟化

          计世网  孙定

  在今年春季IDF上,英特尔宣布2005将向市场投放内建虚拟技术的P4 600系列桌面处理器,2006年将推出内建虚拟技术的服务器处理器和笔记本处理器。这项发展表明,芯片级虚拟将成为英特尔处理器的标准规格。    

  在同一个发布会上,VMWare公司也宣布,今年将推出支持英特尔桌面虚拟的VMWare Workstation版本,明年推出支持英特尔服务器虚拟的VMWare GSX和VMWare ESX版本。

  差不多同时,AMD也宣布了处理器级的虚拟技术。VMWare证实,该公司也在与AMD合作,开发适合AMD虚拟技术的版本。

  由此可知, X86架构计算机走向芯片级虚拟化已成定局。

  一、 虚拟机概念和产品

  当前流行的X86架构计算环境可分为硬件、操作系统和应用软件三层。由一个操作系统控制和操作处理器、内存、总线、硬盘等所有硬件设备,在操作系统之上支持多用户并允许运行多个应用软件。

  虚拟机则是在单一的硬件环境之上,创建若干个虚拟计算环境(虚拟机),每个虚拟机将一台仿真的、完整的计算机提供给用户(包括仿真的CPU、内存、总线、硬盘等),虚机之间相互隔离,用户之间互不干扰。在X86架构下的VM主要有VMWare公司和微软公司的产品。

  虚拟机有多种技术方案,X86架构下的VMWare和Virtual Server都采用操作系统虚拟机方案(OS Virtural Machines, OS VM)。这种技术由IBM公司于1960年代发明,允许在一台主机上运行多个操作系统,当时用于大型机,目的是使用户尽可能充分地利用昂贵的大型机资源。

  采用OS VM方案,在硬件环境和操作系统之间增加了一层虚拟机监视器(Virtual Machine Monitor,VMM),它将物理的CPU、内存、总线和硬盘等资源抽象出来(Abstraction),映射成若干个虚拟的CPU、内存、总线和硬 盘,构成虚拟机,每上虚拟机上可运行一个独立的操作系统和若干应用软件。于是,在一个物理的硬件环境之上就能互不干扰地运行多个操作系统和应用软件。

  在计算机运行时,操作系统优先级高于应用程序。操作系统和应用程序都能向处理器发出指今。其中I/O指令、段寄存器指令、处理器控制寄存器指令和标志寄存器指令等会改变系统状态,优先级最高,称之为“敏感指令”,只能由操作系统发出。

  在常规的计算机中,只有一个操作系统内核向处理器发出指令,不至引起冲突。但是在虚拟机情况下,多个操作系统都可能发出指令,包括高优先级的敏感指 令。为了避免系统冲突,VMM应把安装在虚机上的操作系统调整到较低的优先级上,俘获冲突的指令,特别是必须俘获可能改变机器状态的敏感指令,并以恰当的 虚拟机制来处理。VMM“记下”每个虚拟机的状态,或安排虚拟机指令到处理器真实执行,或 “模仿”处理器虚拟执行,然后返回结果并更新虚拟机状态。

  VMWare公司当前有VMWare Workstation、VMWare GSX和VMWare ESX等三款产品。前两款用于工作站和服务器,最后一种用于关键任务(Mission-Critical)服务器,现在的版本能支持60GB内存、 250TB存储以及16个处理器的大型X86架构服务器。在每个虚拟机可安装Windows不同版本操作系统和不同版本的Linux。

  微软的Virtual Server当初只是使用户能在一台服务器上运行不同版本的Windows,以解决用户现有应用程序不能在新版Windows下运行的难题。今年新推出的Virtual Server 2005已支持在虚拟机上运行Linux。

  二、 X86架构的虚拟化

  在保护模式下,X86处理器一共有4个不同优先级(Privilege Levels),英特尔的术语为Ring,从Ring0-Ring3。Ring0的优先级最高,Ring3最低。按照设计,Ring0用于操作系统内核, Ring1和Ring2用于操作系统服务,Ring3用于应用程序。

  在正常情况下,操作系统占据Ring0,拥有访问处理器和所有硬件资源的最高特权。应用程序占据Ring3,只能执行一些受到严格限制的操作以避免应用程序间的冲突。按这种安排,在操作系统的控制下计算机就可以稳定运行。

  在虚拟化的情况下,VMM占据Ring0,安装在虚拟机上的操作系统被改到 Ring1或Ring3。可是,现在的操作系统都是为Ring0设计的,均会向CPU发出优先级最高的“敏感指令”。在X86架构中,这类指令一共有 17个。当操作系统不在Ring0,向处理器发出的敏感指令可能导致处理器产生错误结果或系统死机。

  理论上,解决这个问题有静态代码扫描和动态指令重写两种方法,VMWare采用后一种策略。VMM在运行中发现来自虚拟机的危险指令,将其重写使之能 被VMM俘获并进行适当的干涉处置。这种方法虽然能解决问题,但也不可避免地增加了系统的复杂性,带来系统额外开销,降低了系统性能。虽然VMM保存每次 处理结果,可在下次遇到同样情况时直接调用,但这也只能在一定程度上减少系统额外开销。

  由于这一问题同时涉及VMM和操作系统,每当VMM或操作系统版本升级时都需要谨慎处理,增加了软件产品开发的难度,也提高了用户IT系统的维护成本。

  为从根本上解决这一问题,Intel的内建虚拟技术改进了X86处理器的硬件架构。

  首先,英特尔在X86中增加了一个较高级别的Ring,专门用于虚拟机上的操作系统。这样不但简化了VMM的处理任务,而且提高了对各种操作系统旧版 本的兼容性。其次,原先单纯靠软件完成的,由VMM担任的虚拟机敏感指令转换现在获得硬件支持,减少了复杂的、计算密集的指令转换操作。第三,VMM和各 个虚拟机操作系统所需的处理器状态信息在硬件支持下,被保存在一段专用地址空间,使指令重写速度更快,处理过程的完整性也由此得到保证。

  根据现有的测试数据,由于较大的额外系统开销,导致安装VM以后,系统性能下降5%-20%。X86架构实现芯片级虚拟化以后,这种情况应该会得到显著改善。

  三、应用的意义

  长期以来,用户机房服务器混乱是一个日益严重的问题。机房里常有不少几年前购进的各式各样的X86架构塔式服务器,每台都配显示器、键盘和鼠标。有的放在机架上,有的放在电脑台上,有的放在地上,近些年机房里还增加一些机架式服务器。

  另一方面,用户系统上运行着各式各样的应用软件,有的是买来的、有的是自行开发的、有的是定制开发的,情况相当复杂。这些应用软件常常只能在特定操作系统下运行,谁也不愿意轻意将它们移到其它未经测试的新的环境下运行。

  这种情况使服务器的管理与维护相当复杂、困难,增加了IT系统运行和维护的成本。近一两年,为解决服务器管理难题,不少厂商先后提出了服务器整合的概念。

  服务器整合一般有两种策略。一是采用刀片服务器,一个刀片运行一种应用,提高服务器的密度,实现整合。另一种是采用多RISC处理器的大型Unix服务器,在其上创建多个虚拟机,在虚拟机上安装不同的操作系统和应用程序,提高单台服务器上的应用密度,实现整合。

  从前,虽然可以用VMWare在X86环境上建虚拟机,但因为X86处理器不像RISC处理器那样提供芯片级虚拟化,使性能和稳定性均较大型RISC系统差。因此很少有厂商提供采用X86架构虚拟化的服务器整合解决方案。

  现在,解决了芯片级虚拟化问题,为X86架构虚拟化服务器整合方案扫清了障碍。随着支持虚拟化的芯片和与之相配合的VMM产品上市,相信到2006年,用户就可以看到性能相当,但价格远较大型RISC系统便宜的基于X86虚拟化技术的服务器整合解决方案。