虚拟化,曾经是一个技术人员最不喜欢的词,因为对于一个搞工程科学的人来说,实在、量化、数据逻辑才是工作进行的根本。
但是现在,最前沿的IT技术工程师们狂热地爱上了这个词,因为它代表着一系列先进的技术和产品,掀起信息科学界又一轮技术的高潮。究竟什么是虚拟化?人们往往既清晰又模糊,仿佛看到它就在面前,可是又变幻着这样或那样的模样。
通俗的定义来说,虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构之间的壁垒。未来,所有的资源都透明地运行在各种各样的物理平台上,资源的管理都将按逻辑方式进行,完全实现资源的自动化分配,而虚拟化技术就是实现它的理想工具。也就是说,虚拟化技术的绝妙之处在于,终端用户在信息化应用中,感觉不到物理设备的差异、物理距离的远近以及物理数量的多少,按照自己正常习惯操作,进行需要的信息资源调用和交互。
随着虚拟化技术的蹿红,打着它的旗号的“衍生品”层出不穷。然而尽管到现在各种虚拟化技术还没能泾渭分明,但毕竟大浪淘沙,随着时间的推移,五种主流的虚拟化技术逐步展露,它们就像如来佛祖那座著名的“五指山”一样,在天边等待人们“到此一游”。
这五种虚拟化技术分别是:CPU虚拟化、网络虚拟化、服务器虚拟化、存储虚拟化和应用虚拟化。让我们逐步揭开它们的面纱,看看它们各自的美丽。
CPU的虚拟化技术是一种硬件方案,支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易提高性能,相比软件的虚拟实现方式会很大程度上提高性能。虚拟化技术可提供基于芯片的功能,借助兼容VMM软件能够改进纯软件解决方案。由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,从而无须进行二进制转换,减少了相关的性能开销,极大简化了VMM设计,进而使VMM能够按通用标准进行编写,性能更加强大。另外,在纯软件VMM中,目前缺少对 64 位客户操作系统的支持,而随着 64 位处理器的不断普及,这一严重缺点也日益突出。而CPU的虚拟化技术除支持广泛的传统操作系统之外,还支持 64 位客户操作系统。
虚拟化技术是一套解决方案。完整的情况需要CPU、主板芯片组、BIOS和软件的支持,例如VMM软件或者某些操作系统本身。即使只是CPU支持虚拟化技术,在配合VMM的软件情况下,也会比完全不支持虚拟化技术的系统有更好的性能。
两大CPU巨头英特尔和AMD都想方设法在虚拟化领域中占得先机,但是AMD的虚拟化技术在时间上要比英特尔落后几个月。英特尔自 2005 年末开始便在其处理器产品线中推广应用英特尔Virtualization Technology(Intel VT)虚拟化技术。目前,英特尔已经发布了具有Intel VT虚拟化技术的一系列处理器产品,包括桌面平台的Pentium 4 6X2 系列、Pentium D 9X0 系列和Pentium EE 9XX系列,还有Core Duo系列和Core Solo系列中的部分产品,以及服务器/工作站平台上的Xeon LV系列、Xeon 5000 系列、Xeon 5100 系列、Xeon MP 7000 系列以及Itanium 2 9000 系列;同时绝大多数的Intel下一代主流处理器,包括Merom核心移动处理器,Conroe核心桌面处理器,Woodcrest核心服务器处理器,以及基于Montecito核心的Itanium 2 高端服务器处理器都将支持Intel VT虚拟化技术。
而AMD方面也已经发布了支持AMD Virtualization Technology(AMD VT)虚拟化技术的一系列处理器产品,包括Socket S1 接口的Turion 64 X2 系列以及Socket AM2 接口的Athlon 64 X2 系列和Athlon 64 FX系列等等,并且绝大多数的AMD下一代主流处理器,包括即将发布的Socket F接口的Opteron都将支持AMD VT虚拟化技术,如图1.3 所示。
图 1.3 CPU虚拟化
网络虚拟化是目前业界关于虚拟化细分领域界定最不明确,存在争议较多的一个概念。微软眼中的“网络虚拟化”,是指虚拟专用网络(VPN)。VPN 对网络连接的概念进行了抽象,允许远程用户访问组织的内部网络,就像物理上连接到该网络一样。网络虚拟化可以帮助保护 IT环境,防止来自 Internet 的威胁,同时使用户能够快速安全地访问应用程序和数据。
但是网络巨头思科(Cisco)不那么认为。思科公司在对IT未来的考虑上以网络为核心。它认为在理论上,网络虚拟化能将任何基于服务的传统客户端/服务器安置到“网络上”。那么,这意味着可以让路由器和交换机执行更多的服务,自然,思科在业界的重要性和生意额都将大幅增加。思科表示网络虚拟化由三个部分组成:访问控制、路径提取以及服务优势。从思科的产品规划图上看,该公司的路由器和交换机将拥有诸如安全、存储、VoIP、移动和应用等功能。对思科而言,他们的战略是通过扩大网络基础设备的销售来持续产生盈利。而对用户来讲,这能帮助他们提高网络设备的价值,并调整原有的网络基础设备。
对于网络阵营的另一巨头,3Com公司在网络虚拟化方面的动作比思科更大。3Com的路由器中可以插入一张工作卡。该卡上带有一套全功能的Linux服务器,可以和路由器中枢相连。在这个Linux服务器中,用户可以安装诸如sniffer、VoIP、安全应用等等。此外,该公司还计划未来在Linux卡上运行VMware,以让用户运行Windows Server。3Com的这个开源网络虚拟化活动名为 3Com ON(又名开放式网络)。
当然,思科与 3Com自己的一厢情愿决不能作为网络虚拟化大旗真正升起的标志,现在,网络虚拟化依然处于初期的萌芽阶段,但在人类网络信息化飞速需求的现在,我们有理由相信它的突破和成长将是飞速的,如图 1.4 所示。
图 1.4 网络虚拟化
与网络虚拟化不同,服务器虚拟化却是虚拟化技术最早细分出来的子领域。根据 2006年 2 月Forrester Research的调查,全球范围的企业对服务器虚拟化的认知率达到了 75%。三分之一的企业已经在使用或者准备部署服务器虚拟化。这个产生于 20 世纪60 年代的技术日益显示出其重要价值。由于服务器虚拟化发展时间长,应用广泛,所以很多时候人们几乎把服务器虚拟化等同于虚拟化。
关于服务器虚拟化的概念,各个厂商有自己不同的定义,然而其核心思想是一致的,即它是一种方法,能够通过区分资源的优先次序并随时随地能将服务器资源分配给最需要它们的工作负载来简化管理和提高效率,从而减少为单个工作负载峰值而储备的资源。似乎与所有颠覆性技术一样,服务器虚拟化技术先是悄然出现,然后突然迸发,最终因为节省能源的合并计划而得到了认可。如今,许多公司使用虚拟技术来提高硬件资源的利用率,进行灾难恢复、提高办公自动化水平。
有了虚拟化技术,用户可以动态启用虚拟服务器(又叫虚拟机),每个服务器实际上可以让操作系统(以及在上面运行的任何应用程序)误以为虚拟机就是实际硬件。运行多个虚拟机还可以充分发挥物理服务器的计算潜能,迅速应对数据中心不断变化的需求。虚拟化概念并不是新概念。早在 20 世纪 70 年代,大型计算机就一直在同时运行多个操作系统实例,每个实例也彼此独立。不过直到最近,软硬件方面的进步才使得虚拟化技术有可能出现在基于行业标准的大众化x86 服务器上。
微软于 2004 年底宣布了其Virtual Server 2005 计划。与其他服务器虚拟化技术一样,Virtual Server 2005 允许用户对服务器进行分区,以使这些服务器能够支持多个操作系统和应用。2005 年面市的Virtual Server建立在去年年初时通过购买Connectix而获得的技术基础之上,该软件可以在Windows、Linux和Mac OS服务器及工作站上运行。
微软宣布Windows Server 2008 发行版将包括虚拟化服务器(WSV)的测试版在内,Windows Server 2008 是微软最新的服务器操作系统,可在一个服务器上虚拟化多种操作系统,如Windows、Linux 等等。服务器操作系统内置的虚拟化技术和更加简单灵活的授权策略,获得前所未有的易用性优势并降低成本。借助Terminal Services Gateway 和 Terminal Services RemoteApp ,可轻松进行远程访问并与本地桌面应用程序进行集成,还可实现在无须 VPN 的情况下,安全无缝地部署应用程序。
另外,在服务器虚拟化技术方面走得比较靠前的应该是IBM和HP等服务器厂商。今年以来,这两家公司在虚拟化领域也非常积极,在最新的RISC架构服务器及最新版的操作系统中,都嵌入了虚拟化技术。
先说说IBM,早在p690 服务器和AIX 5L操作系统首次公布的时候,IBM就宣布在其动态逻辑分区(LPAR)技术的支持下,一个系统内可独立运行多个分区,每个分区运行独立的操作系统。这时候的分区,是以CPU为“颗粒”的。
到发布p5 服务器时,IBM大张旗鼓地扯出了虚拟技术的大旗。不过,与以前相比,在虚拟化技术的帮助下, IBM最新的微分区技术打破了分区上以CPU为“颗粒”的限制,可以将单个CPU划分为 10 个微分区,从而创建和运行比物理处理器数量更多的分区。IBM 同时宣布,新版操作系统AIX 5.3 可以支持 1/10 CPU颗粒的微分区。
接着IBM进一步拓展了其服务器虚拟技术的范畴,推出了由操作系统、系统技术和系统服务三部分组成的服务器虚拟引擎。其中,操作系统涉及AIX、i5/OS、z/OS和Linux,其技术宗旨是单台服务器内运行多种操作系统、在异构IT基础架构中以统一的方式实现资源的共享和管理以及管理非IBM 操作系统平台;系统技术包括微分区、vLan、虚拟I/O、Hypervisor等;而系统服务则包括一个服务器系统服务套件和一个存储系统服务套间。在服务器系统服务套间中,包括硬件监督模块VE console虚拟引擎控制台,可以利用两个主要的功能模块Launchpad和Health Center,监控资源的健康状态、进行问题诊断和系统管理;另外还包括硬件管理模块IBM Direction Multiplatform(DCM)整合系统管理。
同时,IBM还推出了应用虚拟工具套件,包括应用监督模块Enterprise Workload Management企业负载管理器(EWLM),可以在异构环境下自动管理分布式企业级系统,根据业务优先级将IT服务分类,并设立相应的性能目标,并根据这些性能目标,提供端到端的性能分析和评估,通过分析,EWLM自动按照应用拓扑调整网络路由。与EWLM相配合的是一个应用管理模块Tivoli Provisioning Manger(TPM),该模块与EWLM配合,可以实现系统部署和配置步骤的自动化,为IT系统的自动部署、资源分配和启用提供解决方案。
对于HP,我们最熟悉的就是HP提供三个层次的虚拟化解决方案。其中,部件虚拟化可以优化不同类型IT资源的利用,如服务器、存储和网络资源,包括分区、集群、工作负载管理和应用虚拟化;集成虚拟化可以把优化多个部件的虚拟化方法结合在一起,自动调度资源满足服务水平协议(SLO),包括虚拟服务器环境、连续访问存储专用服务器等;而完全虚拟化可以优化所有异构资源、使得资源供应能够实时满足业务需求。HP-UX 下的分区连续技术能够把服务器划分成物理或逻辑独立的分区,为优化资源利用、提高服务器的可用性提供坚实的基础。
●硬件分区(nPars):HP nPars 是单个服务器中的硬件分区。nPars 根据服务器类型最多提供 16 个硬件分区、完全的硬件和软件隔离能力以及在一个服务器上运行多个OS实例。
●虚拟分区(vPars):HP vPars 具有在一个系统或硬件分区内实现执行多个OS实例的独特特性。每个 vPar 能够拥有规定的内存量、一个或多个物理内存区域、一个规定的CPU池、服务器内一个或多个I/O 卡。vPars 能够使用软件命令动态地创立和修改。因此,每个应用能够在性能最大、OS配置要求得到满足的环境中运行。
●资源分区:进程资源管理软件(PRM)能够动态地以多种方式把系统资源(CPU,内存和磁盘 I/O)分配给客户的应用,分配的方式可以是根据份额、百分比和处理器组(pSets)。 pSets 允许在服务器上创立处理器组,而应用或用户可以被分配到在规定的pSet 上运行,如图 1.5 所示。
图 1.5 服务器虚拟化
随着信息业务的不断运行和发展,存储系统网络平台已经成为一个核心平台,大量高价值数据积淀下来,围绕这些数据的应用对平台的要求也越来越高,不仅在存储容量上,还包括数据访问性能、数据传输性能、数据管理能力、存储扩展能力等多个方面。可以说,存储网络平台的综合性能的优劣,将直接影响到整个系统的正常运行。因为这个原因,虚拟化技术又一子领域——虚拟存储技术,应运而生。
其实虚拟化技术并不是一件很新的技术,它的发展,应该说是随着计算机技术的发展而发展起来的,最早是始于 70 年代。由于当时的存储容量,特别是内存容量成本非常高、容量也很小,对于大型应用程序或多程序应用就受到了很大的限制。为了克服这样的限制,人们就采用了虚拟存储的技术,最典型的应用就是虚拟内存技术。
随着计算机技术以及相关信息处理技术的不断发展,人们对存储的需求越来越大。这样的需求刺激了各种新技术的出现,比如磁盘性能越来越好、容量越来越大。但是在大量的大中型信息处理系统中,单个磁盘是不能满足需要,这样的情况下存储虚拟化技术就发展起来了。在这个发展过程中也有几个阶段和几种应用。首先是磁盘条带集(RAID,可带容错)技术,将多个物理磁盘通过一定的逻辑关系集合起来,成为一个大容量的虚拟磁盘。而随着数据量不断增加和对数据可用性要求的不断提高,又一种新的存储技术应运而生,那就是存储区域网络(SAN)技术。
SAN的广域化则旨在将存储设备实现成为一种公用设施,任何人员、任何主机都可以随时随地获取各自想要的数据。目前讨论比较多的包括iSCSI、 FC Over IP 等技术,由于一些相关的标准还没有最终确定,但是存储设备公用化、存储网络广域化是一个不可逆转的潮流。
所谓虚拟存储,就是把多个存储介质模块(如硬盘、RAID)通过一定的手段集中管理起来,所有的存储模块在一个存储池(Storage Pool)中得到统一管理,从主机和工作站的角度,看到就不是多个硬盘,而是一个分区或者卷,就好像是一个超大容量(如1T以上)的硬盘。这种可以将多种、多个存储设备统一管理起来,为使用者提供大容量、高数据传输性能的存储系统,就称之为虚拟存储,如图 1.6 所示。
图 1.6 存储虚拟化
前面几种虚拟化技术,主要还专注于对硬件平台资源的虚拟优化分配,随着IT应用的日益广泛,应用虚拟化作为虚拟化家族的明日之星登上了历史舞台。2006 年 7 月由Forrester咨询公司在美国对各种不同行业的高层IT管理人员所做的一项研究显示,当今的机构现在将应用虚拟化当作是业务上的一个必由之路,而不是一个IT决策。据统计,全世界目前至少有超过 18 万个机构在利用应用虚拟化技术进行集中IT管理、加强安全性和减少总体成本。
尽管在过去十年间虚拟技术有了迅速的发展,但现实情况是,当需要使用应用系统的时候,我们仍然把自己的思维局限在电脑机箱之内。从键盘、鼠标、麦克风或扫描仪接收用户输入的设备,通常也是处理和存储数据、通过对显示器、打印机和扬声器的输出来进行响应的同一设备。然而,随着虚拟化概念的发展和变化,“应用虚拟化”成为一个正在迅速发展的市场。
简单来讲,应用虚拟化技术使机构能够用更少的投入做更多的事情,并最终节省经费。这样,企业决策者就能够在IT开销与业务需求之间达成更好的平衡——由运营成本降低所节省的经费可以重新投入到能够推动增长的业务领域中。
从技术角度来讲,应用虚拟化可以简单描述为以IT应用客户端集中部署平台为核心,以对最终用户透明的方式完全使用户的应用和数据在平台上统一计算和运行,并最终让用户获得与本地访问应用同样的应用感受和计算结果。
虚拟化背后的主要推动力是基础设施各方面的猛烈增长,同时伴随着IT硬件和应用的大量增加。而且,IT系统正在变得越来越大,分布越来越广,并且更加复杂,因而难以管理,但要求加强IT控制的业务和监管压力却在继续增大。这听起来可能很专业,但对业务决策者来说却很中听,因为应用虚拟化正在帮助解决当今机构所面临的很多推动力方面的问题——提高业务效率、增强员工移动性、遵守安全与监管规定、向新兴市场拓展、业务外包以及业务连续性等等。
在可能实现的一系列利益当中,应用虚拟化技术能帮助企业解决三个关键方面的问题——安全性、性能和成本。从安全角度来讲,应用虚拟化从其设计本身来看是安全的。采用客户—服务器端应用,数据安全面临风险。IT人员不仅必须应对数据的存放、打印和操控环境,而且还必须考虑数据在网络内和网络外如何迁移,并保证知识产权不会泄露,电脑病毒也不会潜入。启动应用虚拟化项目后,一个公司的所有系统和数据都被整合到了一起,从而几乎消除了在设备层面上数据被盗或数据丢失的风险。性能改善对很多公司来说是另一个吸引人的因素。因为客户—服务器端应用依靠网络来传输流量,所以它们会为网络增添带宽消耗问题。这种问题困扰着很多企业,反过来又会降低应用系统的性能。应用虚拟化技术可以将各种应用系统集中起来,只有一个通过网络传送的虚拟界面。这样可以保证在极低的带宽上实现高性能,而不管设备、网络和地点如何。所以在业务扩张或合并的情况下,企业能够在几分钟或几小时时间内让新用户上网,而不像过去那样需要几个星期或几个月。因此,容易理解为什么应用虚拟化是很多所谓的“业务流程外包”公司所欢迎的一种方式。
个人计算设备和操作系统的繁多使得客户—服务器端应用的测试、调试和客户定制开发成本高昂且耗费时间。采用应用虚拟化技术之后,将不需要在每个用户的桌面上部署和管理多个软件客户端系统,所有应用客户端系统都将一次性地部署在数据中心的一台专用服务器上,这台服务器就放在应用服务器的前面。客户也将不需要通过网络向每个用户发送实际的数据,只有虚拟的客户端界面(屏幕图像更新、按键、鼠标移动等等)被实际传送并显示在用户的电脑上。这个过程对最终用户是一目了然的,最终用户的感觉好像是实际的客户端软件正在他的桌面上运行一样。
客户—服务器端应用要求在每个用户的电脑上安装客户端软件,从而导致更高的成本,因为需要在分布式网络上管理这些软件的部署、补丁和升级。这个问题随着用户登录到每个新应用系统的需求量呈增长趋势,因为IT部门需要在每个用户的桌面上部署另一个独特的客户端设备。即便在最讲究战术的接入服务场景中,应用虚拟化可以带来的成本效益也是相当诱人的。通过将IT系统的管理集中起来,企业能够同时实现各种不同的效益——从带宽成本节约到提高IT效率和员工生产力以及延长陈旧的或当前的系统的寿命等等。
目前,应用虚拟化能够展现给用户最直接的功能还是远程应用交付,或者叫远程接入,应用虚拟化领域,从全球看,走在最前沿的厂商还是Citrix(思杰),其推出的应用虚拟化平台Citrix交付中心(Citrix Delivery Center),即Citrix应用交付基础架构解决方案正在逐步进行中国全面本地化的进程。国内最具实力的应用虚拟化领导厂商极通科技,也在 2008 年 7 月向全球推出极通EWEBS 2008 应用虚拟化系统,该产品在EWEBS 2008 中采用了极通科技独创的AIP(Application Integration Protocol)技术,把应用程序的输入输出逻辑(应用程序界面)与计算逻辑指令隔离开来,在用户访问EWEBS服务器发布的应用时,在EWEBS 服务器上会为用户开设独立的会话,占用独立的内存空间,应用程序的计算逻辑指令在这个会话空间中运行,应用程序的界面会通过AIP协议传送到用户计算机上,用户计算机只需要通过网络把键盘、鼠标及其他外设的操作传送到服务器端,从服务器端接收变化的应用程序界面,并且在用户端显示出来就可以获得在本地运行应用一样的访问感受,最终实现用户客户端使用人员不受终端设备和网络带宽的限制,在任何时间、任何地点、使用任何设备、采用任何网络连接,都能够高效、安全地访问EWEBS服务器(集群)上的各种应用软件,如图 1.7 所示。
图 1.7 应用虚拟化
虚拟机虚拟化技术所能提供的优势取决于客户的目标、所选择的特殊虚拟技术以及现有的IT基础架构。并非所有的客户都能够从实现某一特殊虚拟化解决方案中获得同样的利益。现在,即使是使用虚拟化进行简单的服务器整合,客户们也经常可以在某种程度上获得以下很多利益:更高的资源利用率——虚拟可支持实现物理资源和资源池的动态共享,提高资源利用率,特别是针对那些平均需求远低于需要为其提供专用资源的不同负载。
虚拟可通过以下途径提高工作人员的效率:减少必须进行管理的物理资源的数量;隐藏物理资源的部分复杂性;通过实现自动化、获得更好的信息和实现中央管理来简化公共管理任务;实现负载管理自动化。另外,虚拟还可以支持在多个平台上使用公共的工具。
通过虚拟可实现动态的资源部署和重配置,满足不断变化的业务需求。
虚拟可实现较简单的共享机制无法实现的隔离和划分,这些特性可实现对数据和服务进行可控和安全的访问。
虚拟可在不影响用户的情况下对物理资源进行删除、升级或改变。
根据不同的产品,资源分区和汇聚可支持实现比个体物理资源小得多或大得多的虚拟资源,这意味着您可以在不改变物理资源配置的情况下进行规模调整。
虚拟资源可提供底层物理资源无法提供的与各种接口和协议的兼容性。
与个体物理资源单位相比,虚拟能够以更小的单位进行资源分配。与物理资源相比,虚拟资源因其不存在硬件和操作系统方面的问题而能够在出现崩溃后更快地恢复。
是不是一切都很简单和完美?然而在虚拟化世界并非一切都是尽善尽美的。最显而易见的就是那么多的副本操作系统同时运行在一台计算机上需要占据很多的资源并导致更昂贵的服务器开销。数据传输在任何情况下都变得更难,因为越多东西被载入,需要的存储器容量也就越多。
是的,真正的杀手就是系统开销。目前在计算机虚拟化方面有几项技术,但它们都伴有不同程度降低系统性能方面的问题。单就CPU而言,其占用率可以从 10%到超过 40%。
很显然,我们需要新的技术来解决这些问题。Intel所要采用的VT技术背后的思想就是降低虚拟化时的系统开销。在深入了解它如何工作之前,有必要了解一下虚拟化技术到底是如何实现不同的操作系统工作在同一CPU上的。
目前主要存在有 3 种类型的虚拟化技术:Paravirtualisation、二元码转译和模拟器。大家最为熟悉可能就是模拟器了。你可以让一个超级任天堂的模拟器在Windows XP的一个窗口中运行,同时还可有另一个PS模拟器。这些都可看作是虚拟化的最基本形式。模拟器需耗费巨大的CPU开销,如果你非要去模拟硬件装置的每一个Bit位,你将花费大量的时间和精力。比较好的方法是跳过其中的某些部分,我们使用的模拟器就是这样,它工作得也还过得去。
这个领域的另一端就是目前较流行的并被业界认可的“Paravirtualisation”(以下简称PV)技术。按字面意思理解,是编程序模拟的意思。它让主机操作系统知道它们正工作在一个虚拟化的环境中,通过修改它们以使之工作得更好。因此操作系统需针对这种方法进行修改和调整,它们必须来回于操作系统的编写人员和编写虚拟化软件人员之间。从这个角度来看,它不是完全的虚拟化,因为存在这种合作的关系。
PV技术在开源代码的操作系统中工作得不错,Linux、xBSD都是很合适的PV工作平台的候选者,可在这些系统中任意调整所需调整的地方,使PV能工作得更好。而Windows则不行,这大概能解释最近为什么众多IT巨头吹捧开源虚拟化技术Xen了。
而“二元码转译”(以下简称BT)技术可说是较折中的方法了。它所要做的取决于操作系统将要做些什么,并在不知不觉中改变它。假如操作系统试图去执行指令A,但该指令A会给虚拟化引擎带来某些问题,那么BT将把它转换成某些更合适的指令并伪造指令A应该返回的结果。这是一项欺骗工作,且占用大量CPU资源,另外用许多代码取代一条代码也不会使事情运作得快些。
对于X86 系统架构的CPU而言,至少在 32 位领域,有太多让人头痛的条条框框,但作为一条总则,它们都包含有环转换器(Ring Transitions)和有关指令。从概念意义上说,环是一种划分系统特权级别的方法(因此“Ring”也称作特权环)。你可让操作系统运行在一个特权级别上而不会使之被用户程序更改。这样即使你的程序出了问题,它也不会导致系统崩溃,而操作系统能取得控制权,关闭出毛病的程序。这些环强行控制系统的不同部分。
Intel公司的X86 系列CPU(包括 80386、80486、Pentium、Pentium Pro、Pentium Ⅱ、Pentium Ⅲ以及现在的Pentium 4CPU),提供 4 个特权级别R0、R1、R2 和R3。较大的数字表示较低的特权,我们可简单理解为运行在某一级别的程序无法改变运行在较小数字级别上的程序,但较低数字级别上的程序可干扰甚至控制运行在较高数字级别的程序。
在实际运用中,被经常用到的只有R0 和R3,即最高级别和最低级别。操作系统运行在R0 上,而用户程序运行在R3 上。X86 架构在向 64 位扩展时,采用的方法之一就是通过去掉中间的特权级别——R1 和R2。几乎没有人注意到它们消失了,除了那些使用虚拟化技术的特定人群。
像VMware这类软件模式的虚拟化机(Virtual Machines,以下简称VM)显然必须运行在R0 级别上,但如它们要想保持完全控制权,就必须使操作系统在这个级别之外。最显而易见的解决办法是强迫主机操作系统运行在一个较低级别的环中,如R1。它们的部分代码原先被设定为从R0 到R3,而不是R1 到R3。虽然在PV环境中,你能修改操作系统从而使它工作得很好,但如果你要找到一个圆满的解决方法,就必须使操作系统工作在R1 级别中。
可如此一来又出现问题了,有些指令只有当它们从R0 级里发出或发往R0 级时才会工作,如果不在正确的环中,这些指令会运作得很古怪。如果你试图这么去做,会有很不好的后果。让代码在正确的环中执行确实能防止操作系统破坏VM,同时也防止运行在主机操作系统上的软件破坏操作系统自身。这就是所谓的“0/1/3”模式。
还有一种模式被称为“0/3”模式。这种模式将VM放入R0 级别中运行,而将操作系统和用户程序都放入R3 级别中。但从本质上而言,它还是像“0/1/3”模式一样去处理其他事情。在R3 级别里,有特权的操作系统能更轻松地执行用户程序,由于不存在环的阻隔,也使它运行得更快一些,但系统稳定性不佳。
另外一个方式去使用“0/3”模式,就是让CPU保有两份运行于R0 级别中的事物的页表。一份为操作系统,另一份为运行在R3 级别中的老程序。这样可拥有一份完整的存储器保护集,用来把用户程序隔离到操作系统空间之外。当然,这同样需要消耗性能,只是以不同的方式罢了。
概括来说,在“0/1/3”模式中,系统安全性更高一些,但从R3 到R1、R3 到R0 或R1到R0 转换时性能会受到一些影响,反过来也是。在“0/3”模式中,只存在R0 与R3 之间的转换,所以它潜在地比一个非主机操作系统运行得更快一些。但如你碰到一个问题,“0/3”模式比“0/1/3”模式更容易出现蓝屏。尽管未来将广泛使用“0/3”模式,主要是因为上文我们提到向在 64 位扩展时已去掉了R1 和R2,所以你必须被迫使用“0/3”模式。对计算机而言,这被称作是进步,同样,毁灭性的崩溃被认为是“古怪”行为。
理论上,如果你可忍受一点不稳定性,或者在“0/1/3”模式中牺牲一点速度,那么应该说很完美的。可它们在某些方面确实还存在一些缺陷,主要存在以下 4 点。首先是那些检验指令自己所在环的指令,另外是那些处在错误的环中却没有正确保护CPU现场的指令。最后两点是截然相反的,就是那些应引发错误却没有导致错误的指令,以及那些本不该导致错误却引发许多错误的指令。所有这些都让编写VM的天才程序员们活得不轻松。
其中第一点是显而易见的。如果你给予操作系统R1 级别的特权,当它检验自己运行所处的环时,它会返回 1 而不是 0。如果此时运行于该系统的一段程序期望自己应该处在R0 环时,那么它会因为得到的是R1 而导致错误。这会导致蓝屏的出现,存储器清除或另一些不理想的后果。二元码转译技术可捕捉到这种错误,并把返回值伪装成 0,但这意味着需要几十上百条指令来完成这一工作,显然速度受到极大影响。
保护现场是一个潜在的更糟糕的问题,有些CPU里的东西在上下文开关程序中并不是很容易被保存的。那些隐藏的段寄存器状态就是一个很好的例子。一旦它们被载入主存,其中一部分无法被保存,导致内存常驻部分和CPU中实际值间的不同而引起意外中断。当然我们可为它们设立工作区,但这样做极为复杂且需付出很高的代价使之表现得聪明一些。
那些本该引起某些问题却没有导致这些问题的指令也是摆在我们眼前的一道难题。如果你期望一条指令应在你后面的设计的中断陷阱中造成错误,但却没有,这一点也不会让人因为没有错误而高兴。与此相反的情况也极为常见,如果不在正确的环中向CR0 和CR4 写入,则会产生错误,导致系统崩溃。虽然这两种错误在你不注意时可被修正,但却造成很多性能损失。
虚拟化技术就是要将操作系统放在一个它本不应该在的地方,不断地运转去尝试解决所有扑来的问题。虚拟化技术存在许多问题,这些问题也不断地发生,所以性能损失也就没什么奇怪的了。
Intel的VT技术能解决这些困扰。VT的目的是在尽可能最小化程序员痛苦的同时尽可能多增加“virtualization holes”(虚拟化孔)。这种解决方案中,VT-X针对X86 而VT-i针对Itanium,分别引入了一种新的模式针对不同的CPU。这里我们主要来看看VT-X,实际上VT-i的功能与VT-X有很多相同的地方。
这种新的模式被称为VMX,并且引入了一个虚拟化机监控器VMM运行于其中。它被设定在R0 级别下,你可以认为是R-1 级或者看成是在环的旁边运行。主机操作系统和所有的程序在VMX模式中运行,与此同时VMM运行在VMX根模式中。
任何一个运行在VMX模式下的操作系统,都拥有所有运行于非VT系统中的一般操作系统的功能和特性。它也处在R0 级别中,与平常一样有权利处理每一件事情,而且并不知道有什么东西正在它的旁边运行。当情况得到授权,CPU进入VMX根模式,VMM就可以切换到其他一个运行在另一VMX实例的操作系统。这些切换被称为VM登录和VM退出。
VT技术所表现出来的不可思议的地方就在于它将从VMX模式到VMX根模式(或从VMX根模式到VMX模式)的登录和退出处理易于操作。一旦主机操作系统被涉及,那它一定是独自处在自己的世界里的,你必须保存虚拟化世界的完整状态并当你返回时重新载入它。虽然在VT里还有很多事物要去处理,但它被设计为一项任务,所以客观地说它实际是一个简单而并不费力的进程。
因为每一个操作系统实例都在正确的位置运行,所以前面所提到的 4 个问题也就不存在了。相关联的工作区也不再需要,与此有关的系统开销没有了。这些能有效提高速度。但这些并非免费,只是付出的代价要少很多。
启动一个新的主机操作系统,你需要为其留出一块 4kB的存储区并将它传递给一个VMPTLRD指令。这块区域将用来存储该系统实例不被激活时的所有状态和重要Bit位。只要该操作系统实例存在,则这块区域一直有效,直到在其上运行一条VMCLEAR指令。这样就设立了一个虚拟化机实例。
如果你想要把控制权交给虚拟化机,你要么登录VMX非根模式或简单一点,运行VMX模式即可。这些提到的VM登录指令就是VMLAUNCH和VMRESUME,两者并没有太大的区别。VMRESUME指令只是简单地从刚开始已经初始化的 4kB存储区里载入CPU状态,并把控制权交给主机操作系统。VMLAUNCH做的也是同样的工作,但它会启动一个虚拟化机控制构件VMCS,它包含一些设立VM的现场背后的记录,因为这需花费一些时间,所以人们尽量避免在并发登录时使用VMLAUNCH。
从这一点来看,主机操作系统开始了它的愉快之旅,尽可能地运转,毫无察觉是否有其他东西正在它的一旁运行。正如过去所计划的一样,它存在于自己的世界里,全速运行,或接近全速。唯一的问题是你如何打破这一切美好的景象而将它关闭到一边,以使得机器里的其他操作系统能真正运行。这就是VT技术所体现出来的复杂的一面——VMCS中一些特别的位映像。
这些位映像是一些 32 位的字段,每一个Bit位标志一个事件。如果某个事件被触发,则对应的Bit位被置位,CPU触发一条VM退出指令,并将控制权返还给运行在VMX根模式下的VMM。VMM可做任何想做的事,然后将VMRESUME指令传递给下一个操作系统,或刚离开的那个操作系统。这个被启动的操作系统同样很好地运行着,直到触发另一条VM退出指令。如此这样以每秒上千次的速度重复着。
什么能触发这些指令呢?它们可以是引脚信号、CPU、异常和页面错误这些平台事件,所有这些都会触发VM退出指令。VT技术的完美之处在于它有很强的适应性,另一个与此类似之处就是在调试程序中设置断点,你可在每个事件上都设置一个,或者一个也不设置,这都取决于你自己。
引脚信号事件要做的是当有一个内部中断或一个不可屏蔽中断发生时,则触发退出指令。而CPU事件,则是当你设置任意Bit位在某一字段,当相应的CPU状态接收到它时,则触发退出指令。虽然大多数指令需要去设置,但也有一些指令无条件地引发VM退出指令。这是在一个非常细小的层面上控制VM,允许每当你需要时登录和退出。
异常位映像也是一些 32 位的字段,每个Bit位标志每个 32 位指令地址的异常情况。如果Bit位被设定并有一个异常被抛出,它就会引发VM退出指令。如果Bit位是空的或没有异常,那么主机操作系统则继续它的快乐之旅,与平常一样。这是一种从VMX模式退出而进入VMX根模式的系统开销非常低的方法。
最后还有页面错误退出,它与异常退出十分相像,只不过它用两个 32 位字段来控制。这些字段内的Bit位对每一个可能出问题的页面错误代码进行映像,因此你可细心地从中挑选从哪里退出。同样,它也是基于很细小的层面,系统开销也很低。
在计算机里,VT工作在一个比传统的R0 环更有特权的级别中。任何一个主机操作系统都可在没有改变的旧有架构下运行,并且不知道一个控制程序在控制它们。当遭遇到某些用户设置的触发器,控制权将被转交给运行在更高级别的VMX根模式上的VMM。因为这是一种被动触发事件,而不需被积极监视,因此系统开销降到了最低限。
VT技术使得安装和卸载那些比以往VM模式更稳定的运行环境变得简单。如果你需运行虚拟化系统,没有理由不用一个拥有Vanderpool功能的CPU去实现它,而软件虚拟化机会逐渐不被人关注。