“看不见”的角逐——AMD与Intel的虚拟化技术比拼
技术讲坛
在很早之前,AMD和Intel就将硬件虚拟化技术融合在了自己的处理器中,并在桌面处理器宣传中将处理器的虚拟化功能当作一个重要的卖点。而AMD将要在今年发布的9系列芯片组,唯一有一点新意的技术,也是一项为虚拟化服务的IOMMU(中文名为“输入输出内存管理单元”)技术。实际上无论是大型企业还是有特殊需求的人群,PC的虚拟化功能都将为他们带来极大的好处,这也是为什么AMD和Intel如此看重硬件虚拟化的原因。可以说,在桌面系统纯粹的平台性能、以及常见的功能外,虚拟化领域是AMD和Intel的另一个战场。
殊途同归,处理a器上的虚拟化比拼
Intel的处理器虚拟技术VT实际上只是Intel Virtualization整套技术中的一环,在安腾服务器处理器上的VT技术叫做VT-i,而在普通桌面处理器上的VT技术叫做VT-x。VT-x提供了一套新指令来建立、管理和退出VM(虚拟机),就如同操作内存管理一样。VT-x扩展了传统的x86处理器架构,它引入了两种操作模式:VMX root operation(根虚拟化操作)和VMX non-root operation(非根虚拟化操作),统称为VMX操作模式。VMX root operation是VMM运行所处的模式,设计给VMM,其行为跟传统Intel处理器的IA32架构并无特别不同。

在这一架构下,一些过去通过软件模拟的指令现在可以通过处理器直接运行在虚拟的操作系统中,这样不但提升了效率,同时还可以让虚拟机模拟使用64bit操作系统。此外,针对过去软件虚拟化技术的不足,Intel的VT-x可以在虚拟机出现问题的时候,让处理器有能力转换控制器,使虚拟的操作系统在不中断的情况下解决问题,保证了虚拟系统的稳定。
而AMD的AMD-V技术从原理上来看,基本和Intel VT-x技术的思路一致,两者在实现手段和效果上也很类似。不过虚拟化很重要的一点就是管理虚拟操作系统的内存,而这则成为了两家公司在处理器虚拟化技术中的差异。要知道,AMD-V技术发布的时候,AMD已经将内存控制器集成在处理器中,而Intel的VT-x技术诞生时,内存控制器还在北桥中,所以AMD-V虚拟化技术相比Intel的VT-x引入了独特的新指令,这使得AMD-V只需要通过内存管理中心向虚拟的系统分配内存即可,而不像传统虚拟化技术那样复杂。这不但为虚拟机提供了更好的性能,同时可以更好地管理虚拟系统的内存。
IOMMU,让虚拟化走向芯片组
IOMMU(Input/Output Memory Management Unit,输入输出内存管理单元)是AMD 9系列芯片组最新加入的功能。IOMMU的功能是管理对系统内存的设备访问,它位于外围设备和主机之间,将来自设备请求的地址转换为系统内存地址,并检查每个接入的适当权限。这主要是把设备可见的虚拟地址映射成物理地址,为服务器、桌面的I/O虚拟化提供一种安全、灵活、高性能的方案。

处理器加入虚拟化技术使x86平台的虚拟化得到硬件的支持,在不需要“二进制翻译”的情况下,人们更多地关注对虚拟化应用带来瓶颈的地方。比如,指令如果需要存取储存装置,都需要通过虚拟机监视器去跟实体设备沟通,但如果可以简化虚拟机监视器存取实体装置所需要经过的节点,直接跟系统下指令,那么虚拟系统的效率无疑要高不少。因此,人们更多地希望可以将一个设备直接交给某一个虚拟机来处理,该虚拟机可以使用自身驱动来管理该设备。而IOMMU技术的出现,恰恰就能够很好地解决这个问题。
IOMMU和CPU的虚拟化技术不一样,IOMMU是北桥芯片内建的技术。IOMMU的功能类似内存管理单元,不同的是它存在于外设和内存之间。IOMMU将DMA(动态内存存取)地址映射到虚拟地址,并截获任何未经允许的DMA操作。就像内存管理单元可以保护应用程序免遭其他程序的干涉一样,IOMMU可以使设备只能到达DMA指定的内存地址,阻止它破坏其他的内核地址空间。有了IOMMU,设备驱动或者板卡固件上任何错误的DMA都会被IOMMU截获,而不会任由其破坏整个系统。
其实IOMMU这项技术并不新鲜,在服务器上,Intel早就有了这样的技术,Intel的IOMMU技术被称为VT-d,也就是Intel的芯片组虚拟化技术,不过这项芯片组技术Intel从来没有应用在桌面芯片组上,但是在服务器上则早已有了比较广泛的使用。IOMMU技术引入到桌面芯片组还是第一次,从这点而言,AMD可以说是抢了一个先手,这样有需求的用户完全可以以更低的成本来购买用于虚拟化的AMD平台,而无需购买服务器。在桌面芯片组中引入IOMMU技术,AMD或许打算提升新一代3A平台在CPU+GPU异构计算架构中的性能表现。
网络虚拟化,Intel先行一步

之前已经说过,和AMD的虚拟化技术相比,Intel在很早之前就形成了一套成系统的硬件虚拟化技术,其中包括了处理器虚拟化技术VT-x、芯片组虚拟化技术VT-d,同时还拥有网络虚拟化技术VT-c。Intel的VT-c技术可针对虚拟化进一步优化网络。通过在专用网络芯片上执行这些功能,VT-c技术大幅提高了交付速度,减小了 VMM 与服务器处理器的负载。从技术角度而言,Intel的VT-c技术主要包括了两个关键技术,一个是VMDq技术(虚拟机设备队列),一个是VMDc技术(虚拟机直接对联)。
在传统服务器虚拟化环境中,VMM 必须对每个单独的数据包进行分类,并将其发送到分配的虚拟机中。这样会占用大量的处理器周期。而借助 VMDq技术,该分类功能可由Intel网卡内的专用硬件来执行,VMM 只需负责将预分类的数据包组发送到适当的客户操作系统。通过这项技术,处理器将获得更多的可用周期来处理业务应用,I/O 吞吐量也会提高一倍以上,使虚拟化应用达到接近本机的数据吞吐率,减少性能的瓶颈。而VMDc技术则支持虚拟机直接访问网络 I/O 硬件,进一步提升 I/O 性能并减小服务器处理器的负载。
Intel的VT-c技术很早就在服务器网卡中使用,目前Intel的万兆网卡以及特定的千兆网卡都支持这项功能,这也使得即使是桌面系统理论上也能使用这项功能,从这点而言,Intel的VT-c技术相比VT-x以及VT-d这两项硬件虚拟化技术更容易走向市场,毕竟独立网卡并不只针对Intel的平台。
写在最后
或许普通用户并没有感觉到,实际上虚拟化技术已经成为企业未来发展的趋势,时下各个领域中的不同行业都在极力推广和应用虚拟化技术。虚拟化技术是一个整体的解决方案,但是作为硬件虚拟化核心的技术来讲,处理器的应用是实现所有虚拟化的关键,这也意味着谁能在处理器虚拟化功能上做得更好,谁就将在未来的市场中获得更多的份额,这也是Intel和AMD极力在桌面处理器中推广自己虚拟化技术的根本原因。
从两家公司的虚拟化技术发展来看,处理器的虚拟化技术基本可以说是不相上下,不过桌面处理器性能的强弱在一定程度上也决定了虚拟化的表现,在这一点Intel可以说暂时占了先手,更好的多线程处理能力以及硬件虚拟化配套方案都使得Intel的虚拟化技术得到更广泛的认可。而AMD率先将IOMMU技术引入桌面系统,也证明了他们在硬件虚拟化上的努力。但无论如何,在新一代Sandy Bridge以及“推土机”架构处理器的推动下,Intel和AMD必然将人们带入一个更美好的虚拟化时代
从软到硬,虚拟化进入“黄金期”
虚拟化就定义来讲通常是指计算元件在虚拟的基础上而不是真实的基础上运行。它允许具有异构操作系统的多个虚拟机在同一台物理机上独立并行运行。就我们常见的情况来说,虚拟化可使物理硬件与操作系统彼此分离,进而可以实现在同一台物理机上同时运行多个具有异构操作系统的虚拟机,如Windows、Linux等等。
虚拟化技术之前一般都是通过软件的方式来进行运作的。纯软件虚拟化解决方案存在很多限制。虚拟的操作系统很多情况下是通过VMM(Virtual Machine Monitor,虚拟机监视器)来与硬件进行联系,由VMM来决定对系统上所有虚拟机的访问。大多数处理器和内存的访问一般都会独立于VMM,只在发生特定事件时才会涉及VMM,效率很低。在纯软件虚拟化解决方案中,VMM在和操作系统联系时需要进行二进制转换,以通过提供到物理资源的接口,模拟硬件环境,这种转换也增加了系统的复杂性。

当虚拟化技术越来越重要的时候,人们越发感受到软件虚拟化的“滞后”,此时硬件虚拟化的出现已是大势所趋,而在硬件平台中处于核心地位的处理器,自然成为了硬件虚拟化技术发展的先行者。IAMD的虚拟化技术叫AMD-V,而 Intel则提供了名为VT的虚拟化技术。支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM很容易提高性能,相比软件的虚拟实现方式会很大程度上提升效率。由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,从而无需进行二进制转换,这样也减少了相关的性能开销,极大简化了VMM设计,进而使虚拟化的性能更加强大。