虚拟化落在实处—多种虚拟化技术介绍

日期: 2008-04-13 来源:TechTarget中国

  早在大型机时代,IBM的VM/370就采用虚拟化技术来划分其硬件资源,提供给多用户使用。现在,x86服务器已成为企业应用的主流,探索x86服务器的虚拟化技术成为各个企业和研究机构的重要课题。
 
  技术篇


  不同层次的虚拟化技术


  近年来,服务器虚拟化技术逐渐成为人们关注的热点技术。伴随着多年来人们对虚拟化技术的研究,形成了不同层次的虚拟化技术,其中有ISA层次、硬件抽象层、操作系统层、Library API层,以及编程语言层的虚拟化技术。


  1.ISA层的虚拟化技术


  ISA层的虚拟化技术,通常采用软件模拟指令集的方式实现。一个典型的计算机系统由处理器、内存、总线、硬盘控制器、时钟、各种I/O设备组成。ISA层的虚拟化软件的实现方式是截获客户操作系统发出的指令,并把它们“翻译”成Host平台上的可用指令进行执行(包括处理器内部指令和IO指令)。由于这种指令的模拟方式,ISA层的虚拟化技术可以完全模拟一台真实机器所能做的一切。这种实现方式的好处在于,分离了操作系统和硬件平台的紧绑定关系。


  这方面具有代表性的系统有很多。Bochs是用C++语言编写的开源的x86平台的PC模拟器,可以方便地在多种平台上模拟IA32 PC系统。它能够模拟多种版本的x86系统,如386、486、Pentium、Pentium Pro、SSE、SSE2等指令。Bochs解释客户系统从开机到关机的全部指令,模拟了Intel x86 CPU、BIOS以及PC设备。因此,在客户操作系统看来,就好像是运行在一台真实的机器上一样。虽然Bochs系统的性能问题,使其很难有广泛的应用,但它也在某些方面有着重要的应用,如在非x86平台上运行Windows系统,进行新开发的操作系统的debug工作,进行老式x86系统的兼容性测试等。


  QEMU是一个采用动态翻译技术的快速的模拟器,它支持两种工作模式:用户空间模拟和全系统模拟。在用户空间模式下,QEMU可以在物理CPU上执行为其他CPU编译的程序。在全系统模拟的模式下,它支持模拟x86、ARM、PowerPC、Sparc等结构。它可以快速地把客户操作系统的指令动态地翻译成本地指令进行执行。其动态翻译过程的基本思想是把每条指令分解成少量的简单指令。每条简单指令由一段C代码实现,通过动态代码生成器把这些简单指令的目标文件连接起来,构建指定的功能。它把基本块作为翻译的基本单位,并采用16M的指令翻译Cache。


  2.硬件抽象层的虚拟化技术


  硬件抽象层的虚拟化技术,利用客户系统环境和Host平台的相似性来减少理解客户系统指令的延迟。目前,大多数的商业服务器虚拟化产品,都是通过使用这种技术来实现高效、实用的虚拟化系统。虚拟化软件进行从虚拟资源到物理资源的映射,并利用本地物理平台进行实际的计算。当虚拟系统访问关键的系统资源时,虚拟化软件接管其请求,并进行相应的处理。为了使这种机制能够有效地工作,虚拟机必须能够trap每条特权指令,并使得VMM接管进行相关的处理。这是因为,在同一个物理平台上有多个客户系统存在,这些客户系统发出特权指令希望CPU进行处理。这时把这些指令trap到VMM进行处理,以免系统发生异常或冲突。此时,VMM模拟特权指令的执行,并返回处理结果给指定的客户虚拟系统,保证了各个客户虚拟系统的有效隔离。然而,x86平台并不是完全支持虚拟化的,因为某些x86特权指令在特权级不够的情况下执行,并不能方便地产生trap。对这一问题的解决方案有:一种是指令扫描结合动态指令修改的软件技术,有许多商业的虚拟化产品采用了这种方案;另一种方案是修改x86 CPU,使它支持虚拟化,也就是Intel的Vanderpool技术和AMD的Pacifica技术的目标。此种虚拟化技术的代表 产品是EMC公司的VMware。


  Microsoft的Virtual Server系列产品。Microsoft的Virtual Server 2005来源于2003年收购Connectix的虚拟化技术。这是一种类似于VMware Workstation结构的虚拟化产品。除了虚拟化的功能外,还有两种特色的功能:undo磁盘功能可以使用户方便地undo客户虚拟系统之前对磁盘的操作,有利于某些情况下的数据恢复;另一种特色技术是二进制翻译,它可以在基于Macintosh的机器上提供x86的虚拟机。但Virtual Server产品其对操作系统种类的支持不是很广泛,主要支持Windows和Linux客户虚拟系统。Linux系统还不能做为Virtual Server的Host平台。


  Xen是最初由剑桥大学计算机实验室发起的开源虚拟机项目。它的开发得到了Intel、HP、IBM等公司的支持。Xen是在x86平台上支持同时运行多个虚拟系统的高性能VMM。它支持x86_32、x86_64、IA64等多种平台,并支持Intel Vanderpool和AMD Pacifica技术。它采用para-virtualization的技术,也就是需要对客户虚拟系统的内核进行适当的修改,使其能够在VMM的管理下尽可能地直接访问本地硬件平台。Xen利用Para-virtualization技术降低了由于虚拟化而引入的系统性能损失。


  Xen的Para-virtualization技术的主要内容是:对于内存分段管理的虚拟化,要求客户操作系统对硬件分段描述符的更新由Xen进行验证,这也就要求客户操作系统不能有高于Xen的特权级别和不允许访问Xen的保留地址空间;对于内存分页管理的虚拟化,要求客户操作系统可以直接读硬件页表,但对页表的更新需要Xen进行验证和处理,Xen支持客户虚拟系统可以分布在不连续的物理内存上;对于客户虚拟系统,其只能运行在低于Xen的特权级别上;客户虚拟系统需要注册一个异常(Exception)处理函数的描述符表,直接支持Xen的虚拟化;客户虚拟系统的硬件中断机制被Xen中的Event处理机制代替;每个客户虚拟系统都有自己的时钟接口,并且可以了解真实的时间和虚拟的时间;客户虚拟系统通过异步I/O rings的内存区域和外部设备(网络、硬盘)来传递数据,采用事件处理机制代替硬件中断通知机制。


  目前,Xen作为高性能的虚拟机软件,越来越受到业界的关注。它可以为企业的生产系统所使用。


  UML(User Mode Linux)是让一个Linux作为一个独立进程,运行在另一个Linux上的开源项目。它是一种在同一时间运行多 Linux 的安全方式。每个进程都独立于其他进程,这非常安全。例如,在同一机器上进行多种测试和开发而不互相干扰,如果一些测试进程被损坏,并不会影响宿主系统或者开发进程。


  与VMware等实现方式不同,UML不需要额外的虚拟化软件。它只需要在Linux Kernel源码上打上相关的补丁。UML的补丁把Linux标准内核转化成一个可以作为独立进程执行的操作系统。当运行UML kernel时,需要指定一个文件系统给其使用。此时,我们就有了一个独立的Linux系统。新的系统内核作为一个用户空间的应用运行。UML内核接收来自应用的系统请求,然后发送Host内核进行处理。由于客户虚拟系统的内核和进程在同一地址空间内,因此,需要把内核的代码和数据段放在虚拟系统进程通常不会使用的地方。由于每个虚拟系统的进程通过Host内核获得,为了让虚拟系统进程共享虚拟系统内核的数据,虚拟系统内核数据被映射到一个文件,然后这个文件被映射到虚拟系统的进程。目前,UML的一个主要应用是进行系统软件的调试和测试。


  硬件抽象层的虚拟化技术有着高度的客户虚拟系统的隔离性(包括客户虚拟系统之间,客户虚拟系统和Host系统之间)。这种隔离性使得在同一个物理平台上,可以同时运行不同类型的操作系统,而且它们的重启等操作不会互相影响。在用户看来,隔离性使得物理平台被划分成不同虚拟机器。由于用户面对的是虚拟机器,用户需要更多的系统安装和配置工作。如果用户希望客户虚拟系统有和Host相同的操作系统,并只是想把多个应用系统进行分离,那么可以考虑采用操作系统层的虚拟化技术。


  3.操作系统层虚拟化技术


  典型的应用程序环境包括:操作系统、用户函数库、文件系统、环境设置等。如果应用系统的这些周边环境保持不变,应用程序自身是无法区分是运行在物理系统内,还是运行在虚拟系统外。操作系统层的虚拟化技术的主要思想在于,在Host操作系统上动态复制操作系统环境,以此来创建虚拟系统环境。


  Jail是FreeBSD系统上的操作系统层虚拟化技术。它可以把操作系统划分成多个独立操作系统环境,称之为Jail。每个Jail内都包含典型的操作系统资源,如进程、文件系统、网络资源。在Jail中的用户会发现,其资源访问范围被限制在Jail内。Jail是通过Jail系统调用创建的,Jail内的第一个进程的所有子进程都属于该Jail。任何一个进程不能同时属于多个Jail。Jail虚拟化技术在隔离应用程序方面有一定的应用价值。


  Virtual Private Server(VPS)技术把服务器的操作系统环境,分割成多个彼此隔离的系统环境,称之为VPS。管理员可以给每个VPS分配指定数量的内存、CPU、网络带宽等资源,还可以支持从物理服务器到虚拟环境或物理服务器之间,进行客户虚拟系统的迁移。VPS技术在网站的服务器整合,提高资源利用率等方面有很好的应用。


  对编程语言级别的虚拟化技术,我们最熟悉的就是Java虚拟机——JVM。Java程序被编译成由JVM可以识别的指令形式,称为Java Bytes Code。当代码被执行时,由JVM进行解释或利用Just-In-Time(JIT)编译器在本地机器上执行。类似的编程语言级别的虚拟化技术还有Microsoft .NET CLI和Perl 6的Parrot。


  虽然有着多种层次的虚拟化技术,但目前各企业和厂商最为关注的是硬件抽象层的虚拟化技术,它也是目前最有应用潜力的虚拟化技术。
 
  图1 服务器虚拟化的典型结构


  图2 Standalone服务器虚拟化结构


  图3 Hosted服务器虚拟化结构


  产品链接


  VMware服务器虚拟化产品


  VMware是业界著名的虚拟机产品,它有VMware workstation、VMware GSX Server、VMware ESX server等系列产品。VMware的VMM可以有两种结构形式,即Standalone和Hosted。Standalone的结构形式是指,VMM作为一层直接运行在硬件平台上的软件层,在它上面可以创建和管理多个客户虚拟系统。这种结构的VMM有点像一个操作系统,它包含硬件平台的驱动,会受到硬件平台种类的限制。它适合于服务器的应用环境,其典型的产品是VMware ESX Server。其大致结构如图2所示。


  Hosted结构的VMM作为操作系统的一个应用程序运行,它可以利用操作系统自身的内存管理、CPU调动、硬件驱动和资源管理。VMware Workstation使用的就是Hosted的结构,其大致结构如图3所示。


  由于VMware的目标平台是x86平台,因此,它也同样面临着x86平台不完全支持虚拟化的问题。VMware的解决方法是其专利技术,在需要VMM参与的地方,动态重写部分虚拟系统的指令,使其可以trap到VMM。


  对于硬件支持虚拟化的方案,今年VMware新推出的VMware Server是一款面向Windows和Linux服务器的,并支持英特尔虚拟化技术的免费产品。


  此外,VMware还有VirtualCenter。VMotion应用在IBM BladeCenter刀片服务器上,使之具备更好的弹性和可用性,结合刀片服务器的模块化和可扩展性,可以增加内存和I/O能力的扩展比例,混合刀片间的工作负载均衡。VirtualCenter采用集中式管理,可以监控系统的可用性及性能,并可以自动告警,SDK与现有管理工具整合,通过稳定的访问控制保证系统安全。VMotion技术使用户在保持连续的服务可用性的同时,还可以将实时运行企业用户关键业务的虚拟机,从一台物理主机转移到另一台物理主机,并动态获得每台物理服务器资源的极佳利用率、零宕机维护、快速重新配置,以及持续的工作负载整合能力。


  服务器虚拟化的概念


  服务器虚拟化技术(Virtualization)是指允许在同一硬件平台上同时运行多个操作系统的相关技术。目前,服务器虚拟化的相关产品使得我们可以在同一台物理服务器上,同时运行多个操作系统环境。典型的虚拟化服务器的结构如图1所示。


  在操作系统环境和硬件平台之间增加了虚拟化软件层,它负责“翻译”硬件ISA,使得操作系统可以看到不同的ISA,构成虚拟的机器。此外,虚拟化软件还负责虚拟的资源、寄存器、内存等到物理资源的映射,以及如何利用物理机器指令来模拟虚拟系统的操作等。这种虚拟化软件通常叫做VMM(Virtual Machine Monitor),它的最初使用可以追溯到上个世纪60年代末。另外,我们还把被虚拟的操作系统环境叫做客户操作系统(Guest),而下面的系统平台成为宿主平台(Host)。


  技术篇


  服务器虚拟化的硬件支持


  2006年初,英特尔宣布了其初步完成的Vanderpool技术外部架构规范(EAS),并称该技术可以帮助改进未来的虚拟化解决方案。英特尔表示,将在今年把Vanderpool应用于安腾架构平台,同时还计划在台式机处理器和芯片组产品中采用该技术。


  Vanderpool的核心思想是给x86 CPU的各种特权指令的执行,都增加可以进行trap的可能。Vanderpool技术使得CPU运行在两种不同的模式下,即VMX-root和VMX-non-root。这两种模式都支持0-3的4个特权级。客户虚拟系统运行在VMX-non-root模式,VMM运行在VMX-root模式。Vanderpool新定义了从VMX-root到VMX-non-root的VMentry和从VMX-non-root返回VMX-root的VMexit的操作。VMentry和VMexit都会重新load CR3,以便VMM和Guest OS有不同的地址空间。CPU在VMX-non-root下执行,而执行CPUID、mov CR3、RDMSR、WDMSR等指令会无条件地触发VMexit;而其他的指令、中断和异常是否触发Vmexit,则根据VMCS的内容进行判断。


  VMentry会先加载客户系统状态区域的VMCS,然后进入VMX-non-root,并且立即引发中断。这样,VMM就可以通过对IDT的修改,在系统进入VMX-non-root的第一时间触发事件,以便模拟事件的传递。


  VMexit会保存CPU状态到客户系统状态区域,并且加载Host状态区域的信息,然后返回VMM。所有的VMexit使用公共的进入VMM的Entry Point,并且每次VMexit都会提供引发VMexit的详细原因,以便VMM进行相应的处理。


  AMD在虚拟化技术方面的Pacifica技术规范,是AMD计划用于其64位产品中的虚拟化技术。该技术将用于基于x86架构的服务器、台式机和笔记本电脑等系列产品,“我们将进一步加快虚拟技术的开发步伐,增强虚拟化技术实力”。在去年底宣布Pacifica技术规范的时候,AMD副总裁兼计算产品部微处理器业务总经理Marty Seyer就曾经这样表态。AMD表示,通过将Pacifica技术预先展示给虚拟化ISV和分析师团队,并通过持续的协作,最终可以在托管基于系统管理程序(hypervisor)的虚拟解决方案方面,向Pacifica用户提供更丰富的功能集和更高性能模型。


  从技术角度看,不论是Vanderpool技术外部架构规范,还是Pacifica技术规范,它们强调的核心功能都是RISC处理器早就实现了分区功能,即基于该技术平台实现在独立分区中高效运行多个操作系统和应用程序,使一个计算机系统像多个虚拟系统一样运行。 (E5)


  需求篇


  服务器虚拟化技术的6大应用需求


  随着计算机硬件的不断发展,当前的计算机性能已经超过了多数的单个应用的需求。为了有效地整合服务器资源,减低企业IT系统的管理成本,采用虚拟化技术进行资源整合成为当前的发展趋势。基于这一现实,我们试图把一台计算机分割成多个小的相互独立的虚拟机(VM)。每台VM上运行独立的操作系统、应用程序(APP)和数据。


  采用虚拟化技术的好处:有利于整合服务器资源,降低系统的总拥有成本;有利于服务那些希望使用服务器资源,但并不希望购买服务器的用户;有利于提高系统的资源利用率;有利于提供对操作系统的监控,提供HA支持和资源使用的负载平衡;简化满足新的应用需求的工作;有利于减少操作系统对硬件平台的依赖。


  虚拟计算环境对虚拟机的主要需求包括:各个虚拟机相互隔离、互不影响;虚拟系统中能够运行多种操作系统,支持各种应用;由a于加入虚拟层而带来的性能损失尽可能要小。


  传统的服务器中,操作系统和服务器的硬件平台紧绑定,其操作系统和应用经常需要安装在特定的物理机器上。而在虚拟计算环境中,有服务器虚拟化软件直接运行在硬件平台上,并且为操作系统模拟提供统一的硬件环境和I/O设备,这就使得已有的大多数应用程序可以不用修改就可直接运行。


  服务器虚拟化技术的主要商业需求有以下6方面。
 
  1.遗留的应用系统的需求


  遗留下来的应用往往只支持早期的操作系统,而对于用户来说同,继续维护早已停产的硬件系统变得十分麻烦。同时,操作系统厂商往往也已经停止发布早期的操作系统或系统软件的补丁。因此,这些系统的安全问题和管理成本成为令人头痛的问题。如果针对新版操作系统重写这些应用又不十分现实。在这种状况下,服务器虚拟化就成了明智的选择。


  2.整合遗留应用系统的需求
  
  企业中多数服务器的利用率不高,IT部门往往希望通过整合应用系统来降低管理成本、硬件成本、空间和能耗。这里的主要问题是,应用系统需要不同版本的操作系统、数据库软件、中间件软件。因此,通常需要重写部分应用系统,才能使它们运行在同一台服务器上。即便通过重写应用系统来整合服务器,也可能出现由于某个应用的问题,如内存泄露,导致其他应用跟着一起重新启动,来修复问题。


  3.隔离应用的执行


  客户虚拟系统可以提供相互隔离的、安全的应用执行环境。它可以用来执行企业中外来的或不被信任的应用程序。


  4.QoS(Quality of Service)的需要


  客户虚拟系统可以被分配一定数量的资源,这样客户虚拟系统就能够保证自身在系统繁忙时,有足够的资源提供服务。


  5.系统软件调试


  服务器虚拟化软件可以用于帮助系统软件(如操作系统等)进行调试工作。


  6.软件测试


  服务器虚拟化软件有助于建立那些在实际物理环境下很难建立的测试环境,进行软件测试和质量保证。


  虽然x86平台的服务器虚拟化技术近几年来不断发展和进步,但目前广泛应用服务器虚拟化技术还有一些需要解决的问题。


  应用篇


  应用服务器虚拟化技术的3大障碍


  服务器虚拟化技术的广泛应用面临的困难有以下几方面。


  1.客户虚拟系统映像的管理


  随着服务器虚拟化技术的应用,也使得在原有的硬件系统平台上运行着更多的客户虚拟系统。系统管理员需要同时管理更多的虚拟系统映像。如果这些系统映像分布在各个服务器上,那么管理员的工作负担将成倍增加。因此,集中管理这些客户虚拟系统映像成为必然的发展方向。这就需要SAN,特别是IP SAN的技术支持。从SAN的角度上看,安装与配置后的服务器软件系统,可以认为是一种特殊的数据。但目前SAN对系统映像这种特殊数据的支持还需要进一步优化。比如,SAN原有快照技术用于支持备份,而大量的相近的虚拟系统映像,也应该支持快速复制和COW等管理功能。


  2.大量虚拟系统的部署和自动管理


  作为一种计算资源,虚拟的服务器资源必须经过安装、配置,并与合适的存储数据结合起来,才能提供人们所需的服务。而当这种服务改变的时候,上述安装与配置的工作又必须重新进行——在服务器机群(或集群)规模非常庞大时,手工完成这些工作的工作量是十分巨大的。为此,服务部署系统应运而生。顾名思义,服务部署系统的核心工作就是通过某种自动或半自动的手段,将服务部署到服务器硬件上,从而达到快速初始化服务器或调度服务器的目的。


  另外,客户虚拟系统的调度是将各个客户虚拟系统比较均衡地分配到不同的物理资源中进行计算处理。在虚拟环境下,通过虚拟环境管理软件,将实现服务器群的虚拟化管理。当发现一个服务器的能力不够用时,通过网络和软件调用另一个服务器,通过软件监控,然后自动做出调整,使系统拥有更强的可靠性,以及高可用性和灵活性。


  3.非技术性困难


  服务器虚拟化技术的广泛应用还面临着一些非技术性困难。比如,采用服务器虚拟化技术需要测试虚拟化系统上的软件包。而某些开发垂直行业应用软件的厂商,由于规模小,缺乏在虚拟化环境中测试软件所需的资金或技能。对于用户来说,要想充分了解各类服务器虚拟架构是相当困难的,因为用户不仅要知道虚拟的策略是什么,还要知道什么才是最适合自己环境的架构,哪些架构能够适应存储和网络资源的虚拟需求,以及这些架构会在多大程度上将自己与厂商的产品捆绑在一起。


  目前,国内用户采用虚拟化技术的并不多,这主要是国内用户传统的采购和使用习惯造成的。对于国内用户来说,买一台服务器,把它划分成若干个不同分区来跑不同的操作系统、不同的数据库、不同应用,他们担心系统一旦出了问题,后果会不堪设想。其实,这从另一个侧面反映出,厂商并没有让用户真正了解虚拟化的实质。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐