在过去的近20年间,X86处理器的核心指令集没有什么变化,但AMD和Intel却在处理器中加入了许多创新功能,如64位内存扩展技术、图像处理指令、浮点运算指令以及多核心技术等等。这两年,AMD和Intel又在CPU中加入了芯片辅助虚拟化技术,这一创新有望将虚拟化从梦想推向现实。
芯片辅助为虚拟化铺平道路
基于Hypervisor的服务器虚拟化和操作系统分区(OS partITioning)是当前的两大主要软件虚拟化方法,但前者面临的问题更多。操作系统分区可以让宿主操作系统(host OS)访问所有的硬件资源,消除了hypervisor固有的许多问题,但对操作系统的种类数量有限制。
而基于Hypervisor的虚拟化在支持多操作系统方面的灵活性更好,但在CPU、内存和I/O资源分配方面却产生了大量的技术问题,需要通过大量的软件手段来调配。Vmware之所以成为X86虚拟化领域的领导者,不仅仅因为它是最早的厂商,更重要是因为Vmware能够克服这些硬件问题,从而为大规模虚拟化提供可行的管理环境。
但从架构上来说,传统的X86平台并不是为支持多操作系统并行而设计的。因此,AMD和Intel需要重新设计CPU,增加虚拟化特性,以解决上述问题。
ring转换:Intel VT-x和AMD-V异曲同工
在传统的x86运行环境下,操作系统运行在CPU中受保护的ring 0位置。在没有处理器辅助的虚拟化中,ring 0还需要运行VMM(virtual machine monITor,虚拟机监控器)或Hypervisor,以帮助VM(虚拟机)及其VOS(虚拟操作系统)管理硬件资源。
因此,芯片厂商引入了一个新的、具有超级特权和受保护的ring -1位置来运行虚拟机监控器(VMM)。这个新位置可以让VOS和平共存于ring 0,而通信改道于ring -1,并且,VOS并不知道正在和同一系统的其他OS共享物理资源。
芯片上的这一重要创新消除了操作系统的ring转换问题,降低了虚拟化门槛,支持任何操作系统的虚拟化而无须修改OS内核或run-time。Intel和AMD分别推出了VT-x和 AMD-V(即Pacifica)芯片辅助技术,并得到了虚拟化软件厂商的支持。
Intel VT-x技术是在芯片内创建新的ring -1,并且提供了新的指令集,用来建立、管理和退出各种VM。在带有虚拟化功能的芯片中,Hypervisor处于ring-1位置,它生成一个VM控制结构来支持每个新VM。可见,这提供了一种机制,可以根据需要来启动、恢复和退出VM,并且在VMM和大量的VM之间提供了内容交换框架(framework for context-swITching)。
对VM的控制,Intel称之为VMXs,而AMD称之为SVMs(secure VMs),虽然名称不同,但两家芯片的处理方式是比较相似的。更重要的是,都允许客机操作系统(guest OS)进驻ring 0,从而消除了ring转换问题。由于许多指令对位置具有敏感性(location-sensITive),而且被设计为只能在ring 0和ring 3之间转化,因此,如果VOS运行在ring 0之外的地方,就可能会导致关键进程的运行出现无法预知的错误,或者在应该出错的时候却没有出错。
以往,虚拟化厂商都是通过软件机制来截取和纠正相应问题。现在,由于虚拟机可以安全地运行在ring 0位置,因此,这一软件机制也就无须再考虑了。当VM发生错误时,处理器可以将控制权转给受保护的VMM,从而解决问题和重新控制VM,或者终止出错进程但不影响同一系统上的其他VM。
内存管理:AMD和Intel的不同之处
Intel和AMD的不同之处在于:Intel处理器使用外部内存控制器,因此VT-x技术不提供虚拟内存管理功能,这就意味着仍然需要通过软件来解决物理/虚拟内存资源之间的地址转换问题。这种方法虽然有效,但不是最好的。
集成内存控制器的AMD Opteron 处理器,增加处理器数量就能增加内存带宽
Intel平台上的所有Xeon处理器都共享一个外部内存控制器
而AMD的处理器集成了内存控制器,所以AMD-V虚拟化技术引入了独特的新指令,可以实现独特的内存模式和特性。其中大部分指令都是针对MMU(内存管理单元 memory management unIT)设计的,可以进行内存分配。在虚拟化环境下,当需要映射多操作系统和运行多个应用程序时,MMU可以对物理内存寻址进行大量有效的跟踪协调。AMD-V提供了更高级的内存特性,如Tagged Translation Look-Aside Buffers,可通过帮助VM识别最近访问的内存页表来提升性能。AMD-V还提供了Paged Real Mode,支持某些需要在虚拟环境下以真实模式(real-mode)进行寻址的应用程序。
另外,最有意思的特性可能是AMD对各种嵌套页表(NPT,nested page table)的支持。与Intel的软件方法不同,NPT允许每个VM通过独立于硬件、虚拟的CR3内存寄存器对其内部内存管理进行更有力的控制。虽然使用NPT增加了内存查找的数量,但NPT却消除了VT-x必须的软件层。这种方法通过硬件管理内存的方式大大提高了VM的内存性能。在内存密集型应用,特别是在多个VM共存的环境下,这一方法的效果最为明显。
I/O:芯片/硬件厂商的共同困境
CPU和VMM内存管理只是问题的一部分。对于硬件厂商来说,下一个巨大挑战是要改善共享I/O设备的内存交互和安全性。可能最艰巨的任务会落在I/O硬件厂商身上,需要开发可以在多个VM之间共享存取通道的设备。当前的存储、网络和图形卡等设备都只能向OS提供单一接口界面。这意味着,对于具有多个VM的系统来说,只有通过软件方法来处理IRQ中断、内存和记时器功能,除非I/O硬件可以支持多个功能性接口。
从处理器的角度来看,挑战在于要为共享设备开发处理器级的架构。目前,AMD和Intel已经制定了非常相似的规划,已在06年春季公布,并得到了虚拟化厂商的支持。
在这方面,AMD可能率先推出IOMMU(I/O memory mapping unit ,I/O内存映射单元)技术,可以提供额外的指令来支持硬件虚拟化。相应的新特性可以改进DMA(direct memory access,直接内存读取)映射和硬件设备的访问,取代当前的图形寻址机制,支持VM对设备的直接控制,同时在VM中可以直接访问相应用户的I/O。
Intel的VT-d(Virtualization Technology for Directed I/O,定向I/O虚拟化技术)标准也非常关注直接设备访问和内存保护的问题。跟IOMMU相似,VT-d提供了在多个VM和I/O设备之间进行直接通信的架构。
不过,就目前来说,这些对于推动虚拟化应用还是有名无实,因为I/O虚拟化本身还在探讨中。当前的I/O设备还不能管理共享VM对硬件资源的访问。实际上,现在连通过PCI总线来实现设备共享的合适标准还没有。可能需要经过2-4年,普遍的、基于设备的I/O硬件虚拟化解决方案才会出现。到那时,虚拟化厂商需要提供一个提取层,来支持对存储、网络和其他设备的共享访问。
总的来说,虚拟化象旋风一样席卷全球IT市场。特别是在Intel和AMD在各自新推出的x86处理器中内置了虚拟化功能,更是为X86平台虚拟化的广泛普及铺平了道路。我们认为AMD的虚拟化策略可能比Intel的更具潜力。微软和XEN开源厂商推出的基于hypervisor的虚拟化产品都会建立在这种芯片辅助技术之上,但VMware仍会继续支持没有芯片辅助的老系统。
【编辑推荐】