【IT168评测中心】在上一篇文章中,我们已经看到了I/O虚拟化的必要性,并解析了VMDq虚拟机设备队列技术,现在,我们将继续介绍I/O虚拟化技术中的一种:VMDc(Virtual Machine Direct Connect,虚拟机直接连接),这是一种通过新的IO虚拟化方法来提升虚拟IO性能的方法。
I/O虚拟化的方法有很多种,现在使用的主要有两种,它们都是纯软件的,它们分别是:设备模拟和额外软件界面,如下图所示:
设备模拟:VMM对客户机摸拟一个I/O设备,通过软件完全模拟设备的功能,客户机可以使用对应真实的驱动程序,这个方式可以提供完美的兼容性(而不管这个设备事实上存不存在),但是显然这种模拟会影响到性能。作为例子,各种虚拟机在使用软盘映像提供虚拟软驱的时候,就运行在这样的方式,以及Virtual PC的模拟的真实的S3 Virge 3D显卡,VMware系列模拟的Sound Blaster 16声卡,都属于这种方式,一般的虚拟网卡也是这种方式。
额外软件界面:这个模型比较像I/O模拟模型,VMM软件将提供一系列直通的设备接口给虚拟机,从而提升了虚拟化效率,这有点像Windows操作系统的DirectX技术,从而提供比I/O模拟模型更好的性能,当然兼容性有所降低,例如VMware模拟的VMware显卡就能提供不错的显示速度,不过不能完全支持DirectDraw技术,Direct3D技术就更不用想了。相似的还有VMware模拟的千兆网卡,等等,这些品牌完全虚拟的设备(例如,VMware牌显卡,VMware牌网卡)需要使用特制的驱动程序部分直接地和主机、硬件通信,比起以前完全模拟的通过虚拟机内的驱动程序访问虚拟机的十兆百兆网卡,可以提供更高的吞吐量。
可以看到,这两种纯软件实现的方式有些类似于完全虚拟化和部分虚拟化的分别,不管哪种方式,都是软件实现,转向硬件实现会不会更好呢?
现有方案:基于软件的共享
和处理器上的Intel VT-i和VT-x一样,Intel VT-d技术是一种基于North Bridge北桥芯片(或者按照较新的说法:MCH/IOH)的硬件辅助虚拟化技术,通过在北桥中内置提供DMA虚拟化和IRQ虚拟化硬件,实现了新型的I/O虚拟化方式。Intel VT-d技术通过硬件实现的如硬件缓冲、地址翻译等措施,增加了两种设备虚拟化方式:
通过VT-d实现的直接分配设备虚拟化方式
直接分配:虚拟机直接分配物理I/O设备给虚拟机,这个模型下,虚拟机内部的驱动程序直接和硬件设备直接通信,只需要经过少量,或者不经过VMM的管理。为了系统的健壮性,需要硬件的虚拟化支持,以隔离和保护硬件资源只给指定的虚拟机使用,硬件同时还需要具备多个I/O容器分区来同时为多个虚拟机服务,这个模型几乎完全消除了在VMM中运行驱动程序的需求。例如CPU,虽然CPU不算是通常意义的I/O设备——不过它确实就是通过这种方式分配给虚拟机,当然CPU的资源还处在VMM的管理之下。
原生共享,要实现这个功能,设备需要支持PCI SR-IOV规范,并需要系统支持VT-d
原生共享:这个模型是I/O分配模型的一个扩展,对硬件具有很高的要求,需要设备支持多个Function接口,每个接口可以单独分配给一个虚拟机,这个模型无疑可以提供非常高的虚拟化性能表现。
最后这种设备虚拟化方式到了网卡上的实现就是VMDc方式,这种方式上,网卡需要提供多个Function以提供给虚拟机,每个虚拟机直接连接到网卡的Function上,所以叫做Virtual Machine Direct Connect虚拟机直接连接。
VMDc利用SR-IOV功能将虚拟机的虚拟网卡直接映射到物理网卡的Virtual Function上
支持VMDc技术的网卡提供了多个Function,Function有两类:Physical Function(用来配制管理网卡)和Virtual Function,每一个虚拟机都可以映射到一个Virtual Function,不同的虚拟机使用不同的Virtual Function,从而提供了充足的性能以及虚拟机隔离能力。