电脑技术学习

IO虚拟化:虚拟设备队列VMDq技术解析

dn001

  现在人们已经接受并开始逐步实施虚拟化技术,为提供理想的性能和可靠的安全性,硬件虚拟化技术必不可少。它的发展是循序渐进的,在我们最熟悉的世界,硬件虚拟化是先从处理器开始,再到芯片组,再到IO设备,因为每一个阶段都以上一个阶段作为基础,如下图所示:

  其中VT-x和VT-d技术已经被人熟悉(竞争对手也有类似的技术)

  现在的阶段就处在IO虚拟化阶段,一个老生常谈的问题是:外部IO已经逐渐跟不上处理器等的发展。无论你需不需要虚拟化,你都需要解决IO的问题。何况,随着处理器的架构越来越先进,核心数越来越多,提高资源利用率的需求使这些机器越来越倾向于虚拟化。

  现在IO虚拟化的问题和处理器虚拟化等的问题差不多,就是人们希望硬件辅助方案能解决软件方案的性能损耗问题。在IO设备上,频繁的VMM切换以及对中断的处理是导致虚拟化效率低下的两个重点因素,如下图所示:

  软件实现的IO虚拟化网络吞吐量低下

  硬件的IO虚拟化就是为了解决这个问题,对应的解决方案相关的很多,我们这次介绍的是Intel的VMDq:Virtual Machine Device Queue,虚拟机设备队列。这是一个专门用于提升网卡的虚拟化IO性能的技术,对于服务器来说,最关键的IO组成部分就是网络和存储了,甚至网络更为重要一些。

  虚拟化的精髓就是多个虚拟机共享一定的硬件资源,特别地:网卡。尽管VT-d技术提供了不同的虚拟机直接使用不同的网卡的可能性,不过多个虚拟机共用一块或者数块网卡仍然是绝大多数情况。对于VT-d技术,一些人可能会很高兴地看到,不同的显卡也可以通过它在不同的虚拟机之间直接分配,如Paralles Workstation Extreme软件可以主机和虚拟机直接使用不同的Quadro显卡进行渲染工作(是的,它和前面说的还有些距离,不过原理相同)。

  因为这样的缘故,实际上所有的提供上网能力的虚拟机软件都内置了一个虚拟交换机,大部分还在这个基础上提供了路由器的功能,作用就是和真实的交换机/路由器一样,将多台虚拟机连成一个或者多个网络:

  VMDq实际上将这个虚拟交换机的一部分功能用硬件进行加速

  VMDq实际上实现了一个半软半硬的虚拟交换机,和原有的纯软件方案相比,新的方案提供了更高的性能、更低的资源占用率,它怎么实现的呢?

  VMDq技术提供了一个属于ISO OSI 9层网络模型中的第二层的分类/排序引擎实现了交换机的部分功能,为了提供合适的性能,它必须使用到一堆缓存队列,因此支持VMDq的网卡通常也支持RSS接收方扩展功能

  在支持VMDq的网卡上,用硬件实现了一个Layer 2分类/排序器,通过MAC地址或者VLAN来讲数据包发送到指定的虚拟机队列中去(这堆队列叫做pool),最后的VMM软件只需要非常简单的数据复制工作就可以完成虚拟交换机的任务。从而极大地提升了虚拟化网络效率。

  支持VMDq队列的网卡通常也支持RSS队列,例如Intel 82576EB网卡支持8个虚拟机队列,支持16个RSS队列,它们实质上都是16个发送/接收队列对的划分,另外意味着,每个虚拟机可以分配到两个发送/接收队列对。

  Hyper-V 1.0,也就是Windows Server 2008携带的版本,所有的网络IO都需要经过经过纯软件实现的虚拟交换机

  Hyper-V 2.0,也就是Windows Server 2008 R2携带的版本,提供了一个新的VMQ特性,它利用硬件的VMDq将虚拟交换机的大部分工作放到了网卡上,并通过内存映射设计避免了数据需要在多个空间来来回复制移动

  VMware的NetQueue同样也利用了VMDq技术,实现了两倍以上的吞吐量提升

  VMDq的效果是不是真有这么明显呢?还有IO虚拟化相关的技术还有很多,且听下回分解。