走进黑客帝国:CPU虚拟化技术解析
技术空间
微软新一代的操作系统Windows 7已成为今年最热门的话题,在Windows 7上可使用内置的虚拟机安装一个XP系统,用户能随时切换到“XP模式”,可以兼容以前的旧软件。“XP模式”的诞生,得到了广大用户的极大关注。但是,使用“XP模式”是有条件限制的,最重要的条件就是CPU必须支持虚拟化技术(Virtualization Technology,简称VT)。
起源:40年的历史
什么是虚拟化技术呢?通过虚拟化技术,可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上。其实虚拟化技术已有40年的历史,最早使用虚拟化技术的是IBM 7044计算机,它基于麻省理工学院为IBM704计算机开发的分时系统CTSS和曼彻斯特大学的Atlas超级计算机项目。IBM还开发了Model 67的System/360主机,Model 67主机通过虚拟机监视器(VMM, Virtual Machine Monitor)虚拟所有的硬件接口。不过以往的虚拟化技术都是面向服务器系统的,到了2005年,Intel和AMD开始在桌面级CPU中加入对虚拟化技术的支持。
意义:更高的利用率
为什么要使用虚拟化技术呢?在企业和服务器领域,CPU虚拟化可以带来高的部件及系统级利用率,支持具有透明负载均衡、动态迁移、故障自动隔离、系统自动重构的高可靠服务器应用环境,以及更为简洁、统一的服务器资源分配管理模式。比如,一台中档服务器加上一个虚拟技术平台,常常可以取代6或7台低端服务器,节省的费用不仅仅限于最初的购买费用。从总成本角度来看,算上服务器使用寿命期间的电源、维护和散热费用,节省的费用更多。而且虚拟数据中心还可以大大减少管理费用。此外,资源管理在允许动态分配CPU时间、RAM和网络带宽的虚拟化平台上变得更加简单,可以带来更有效的利用。比如世界上最大的时装零售商Gap公司,通过使用虚拟化技术,用3台安装有Vmware的IBM eServer xSeries440服务器取代了原有的100台服务器。
对于个人用户和工作站环境中,CPU虚拟化也有极大的用处。想象一下,一个操作系统几乎不需要花任何时间就可被启动,即使它崩溃了,也只需要简单地将它删除,然后立即安装一个新的。如果你正同时运行几个操作系统,当你准备给其中一个载入新的映像时,你可马上将它关闭,并把该系统正在处理的工作分流给其他系统运行。

软件级:系统复杂化

在桌面级的系统中最早见到的CPU虚拟化都是软件级别的,在2003年,VMware首次在Windows XP平台上运行Linux甚至是Windows Server 2003,还有当时尚未被微软收购的Connectix Virtual PC、开源的VirtualBox等。这里原有操作系统是Host OS(主操作系统),运行在VMware、Virtual PC环境中的操作系统被称作Guest OS(子操作系统)。这些Guest OS有着和普通操作系统完全相同的功能。而且在虚拟机环境中,无论你对Guest OS做什么样的改动,都丝毫不会影响到Host OS的稳定性和安全性。在不用Guest OS的时候,更能像删除普通软件那样随意卸载。
但纯软件虚拟化解决方案也存在很多问题,对于所有运行在x86处理器中的程序来说,x86处理器的响应有4个不同优先级,称为Ring 0~Ring3,其中Ring 0的优先级最高,Ring 3最低。Ring 0用于操作系统内核, Ring 1和Ring 2用于操作系统服务,Ring 3用于应用程序。一般来说,操作系统当然是要运行在Ring 0下的,但为了避免Guest OS破坏Host OS,Guest OS必须运行在低于Ring 0的权限下(如Ring 1权限)。问题随之而来,为了让Guest OS实现完整的系统功能,又必须让它发出的线程是Ring 0级的,于是虚拟软件就要不断协调Guest OS和Host OS之线程的优先级,这种转换必然会增加系统的复杂性,会导致软件虚拟技术的性能低下,CPU和内存的处理能力在这样的协调中被大量耗费,引起系统性能下降5%~40%。而且其无法直接对硬件进行操作,也限制了软件的功能,比如在软件虚拟系统中无法运行日益普及的64bit操作系统。所以只有对x86 CPU体系进行改进,提供专用的虚拟化应用指令来实现硬件级的虚拟化支持,才能为用户提供高速、稳定、全面的虚拟化技术支持。
硬件级:Intel、AMD全力支持
2005年Intel正式公布了Intel VT(Intel Vanderpool Technology)技术,这种技术可以应用于PC和服务器系统,它可以让一台计算机同时运行多个操作系统,通过新的硬件指令,让一个平台能在独立的分区 (partitions) 或 容器 (containers)内执行多个操作系统。软件方面则由虚拟机监视器VMM对虚拟机进行不间断的管理。同年Intel推出的Prescott 核心Pentium 4处理器中的部分型号就已经支持Intel VT技术。当然AMD也有自己的CPU虚拟技术,称为AMD-V(虚拟化技术)。其实无论是Intel还是AMD,它们基于x86 CPU的硬件虚拟技术的本质都大致相同,就是为Guest OS提供专门的执行、切换区域,来避免虚拟系统的频繁协调操作,从而提升稳定性和性能。而且根据平台和发展的不同,CPU虚拟技术也分为数个版本,对应Itanium平台的叫做VT-i,对应x86平台的叫做VT-x。
下面我们就以Intel的VT技术为例,来看看硬件虚拟技术的执行方法。Intel为CPU增加了一种新的VMX(Virtual Machine eXtensions)执行模式,VMX给CPU带来了10个新的虚拟专用指令:VMPTRLD、VMPTRST、VMCLEAR、VMREAD、VMWRITE、VMCALL、VMLAUCH、VMRESUME、VMXOFF和VMXON。在这个模式下,CPU提供一个虚拟机监视器VMM,通过它能够随意控制Guest OS。VMM工作在和Ring 0权限大致相同的VMX Root 模式下,这样就能保证VMM对Guest OS的完整控制和安全性。AMD的处理方式与之类似,只不过AMD把这种执行模式称作VMRUN,把虚拟机监控器称作Hypervisor,VMRUN根模式叫做SVM。
支持VT技术后,所有Guest OS都将运行在VMX模式下。此时VMM将对所有的Guest OS的指令进行统一协调管理,Guest OS和Host OS的线程的优先级等各种冲突将得以避免。具体来说,VMM执行VMXON指令调入VMM软件,VMM软件使用VMLAUNCH指令来进入每一个虚拟机,使用VMRESUME指令来退出。而且各个VMX模式切换也极为方便,每个Guest OS会有4KB的VMCS状态存储区,这个区域用来存储Guest OS状态,所以多个不同的Guest OS能够被高效地同时执行,而且同时能够被快速切换。而对于AMD的产品来说,由于CPU内部整合了内存控制器,因此在SVM模式下,VMM还有着相应的内存访问控制机制,更能进一步提升Guest OS的运行性能。
另外,虚拟化技术是一套解决方案,需要CPU、主板芯片组、BIOS和软件的配套支持。据测试,在开启VT技术后,虚拟机软件的内存和磁盘性能可以得到极大的提升,尤其在VMware下提升更为明显。在64bit主机操作系统下,打开VT还可以获得更好的CPU性能。而且只有在开启VT后,才能够在32bit操作系统中虚拟出64bit操作系统。

小贴士:如何检测自己的CPU是否支持VT技术
目前Intel众多CPU均不支持XP模式需要的VT技术,包括Pentium E5200、Core 2 Duo E7400、Core 2 Quad Q8200等。换句话说,现在不少主流的Intel平台与Windows 7的“XP模式”无缘。相比Intel,AMD也已经发布了支持AMD Virtualization Technology虚拟化技术的一系列处理器产品,并且绝大多数的AMD主流处理器都支持,只有Sempron系列不支持VT技术。
对于Intel的CPU,读者可以去http://processorfinder.intel.com/Default.aspx查询自己的CPU是否支持VT技术。我们也可以使用CPU虚拟技术支持检测软件(SecurAble工具)来检测自己的CPU到底能否支持硬件虚拟技术,以及自己的主板BIOS是否开启了VT技术支持。
后记:广泛的应用前景
虽然CPU虚拟化的概念和实施最早来源于大型服务器主机,但随着以Intel、VMware和微软等为代表的软硬件厂商将虚拟化技术引入x86平台,一个崭新的时代即将到来。从2003年起,各个虚拟化厂商就在逐步发力:EMC公司以6.25亿美金收购VMware;SWsoft公司进入中国,成立中国公司;微软免费提供Virtual Server;VMware免费提供VMware Server;Xen与诸多操作系统集成;Intel和AMD公司相继推出集成虚拟化功能的微处理器,太多的事实证明了,虚拟化的步伐正在逐步加快。仅VMware一家公司的收入就能达到了近9亿美元,有超过400万的用户和2.6万家不同类型和规模的企业客户。虚拟化市场的巨大,可见一斑,而Windows7的XP模式只是向我们揭示了CPU虚拟化的冰山一角。