本文主要为大家简要介绍 VMware Redhat Citrix Microsoft 主要虚拟化厂商使用的 4 种主要的虚拟化 IO 模型( emulation para-virtualization pass-through SR-IOV )。
本文主要为大家穿针引线,信息量比较大,组织排版有限,看官们就将就点看着。
网络 I/O 不但是物理服务器最容易出现的瓶颈,也是现在虚拟化技术最大的硬伤。随着硬件虚拟化对网络 I/O 的支持,虚拟化的网络 I/O 模型也不断的进化,虚拟化的 I/O 性能也不不断提升。
今天给大家分享 VMware Redhat Citrix Microsoft 主流虚拟化解决方案采用的 4 种主流网络 I/O 模型,主要包括模型原理、模型优点、模型缺点、模型对虚拟化迁移的支持。
4 个主流网络 I/O 模型分别是:
1、Emulation
原理:
仿真(emulation )是一个完全通过软件程序来模拟硬件的技术。早期虚拟化都才采用这种方案来虚拟网络设备。常见仿真软件有QEMU VMware WorkStation VirtualBox Emulation 网络模型图如下:
p_w_picpath001.png

不同虚拟化厂商的虚拟网卡产品都不尽相同。
VMware Emulation 类型网卡有:E1000 (仿真intel 82545M 千兆网卡)、Flexible Vlance (仿真AMC 79C970 PCnet32 LANCE 10M 网卡)、VMXNET VMXNET 一共有3 个版本,分别是VMXNET VMXNET2 VMXNET3 ;暂时没有找到VMware 的明确资料对这三个版本进行分类。个人暂把VMXNET 定为emulation VMXNET2 VMXNET3 定义为para-virtualization 类型。VMXNET3 也支持部分SR-IOV 功能)。
 
Redhat KVM Citrix XEN 这类型网卡都是采用QEMU 实现,在KVM XEN 上面可用的emulation 网卡有:RTL8139 (仿真RealTek Link 8139 100M 网卡)、E1000 (仿真intel 82545M 千兆网卡)。
Microsoft Hyper-V Emulation 类型网卡有:Intel/DEC 21140 100M 网卡
 
优点:
软件模拟不需要硬件支持,通过CPU 计算来模拟,跟宿主机物理网卡隔离,没有平台要求。
虚拟机操作系统不需要修改,模拟的都是常见网卡(比如:Intel E1000 RTL8139 等),主流操作系统都已经自带这些驱动,因此默认情况下虚拟机不需要再安装驱动。
 
缺点:
CPU 资源消耗大,尤其当虚拟机数量多的时候。网卡性能一般,由于是软件模拟,只能模拟常见的、功能比较简单的网卡。
 
虚拟机迁移支持:
剥离了硬件要求,使用这类型可迁移性强。由于XEN KVM 都是使用qemu 仿真,所以这类型虚拟机在XEN KVM 之间混合迁移实现难度也不大。
 
2、para-virtualization
原理:
Para-virtualization 又称半虚拟化,最早由Citrix xen 提出使用。在半虚拟化模型中,物理硬件资源统一由Hypervisor 管理,由Hypervisor 提供资源调用接口。虚拟子机通过特定的调用接口与Hypervisor 通信,然后完整I/O 资源控制操作。Para-virtualization 模型图如下:
p_w_picpath002.png
Para-virtualization 又称半虚拟化,最开始由XEN 提出的,XEN 本身就是从本虚拟化起家的。Para-virtualization 模型下,虚拟子机的网卡驱动只能有Hypervisor 厂商来开发,Redhat VMware Citrix Microsoft 这几大虚拟厂商都有各自的para-virtualization 驱动。比如Redhat KVM 就叫virtio VMware 的有VMXNET2 VMXNET 3 Citrix XEN xen-pv Mircrosoft 暂时没有找到(欢迎朋友们补充)。
 
优点:个人认为是一种改进版的emulation 模型,但是由于子机和Hypervisor 之间通信,性能比emulation 要很多。
 
缺点:需要修改虚拟子机操作系统内核,添加不同Hypervisor 厂商的网络驱动。比如Linux Redhat Novell )就在发行版里面添加了Mircosoft para-virtualizaiton 网络驱动,同样Microsoft 也在自己发行版里面添加对KVM virtio xen-pv 驱动支持。
 
虚拟机迁移支持:虽然不同虚拟化厂商的para-virtualization 方案都不相同,由于主流操作系统都同时提供对这些方案的支持;所以这类型虚拟子机可迁移性也比较容易实现。
 
3、pass-through
 
p_w_picpath003.png
原理:Hypervisor 将一个PCI 设备(可以是网卡、USB 、光驱)直接分配给指定虚拟子机单独访问。为了安全和稳定性考虑,pass-through 使用通常结合intel VT-D AMD 也有类似技术)来使用,通过iommu 保证虚拟子机之间内存访问不冲突。这种技术在VMware 上叫 VMDirectPath I/O ,其他方案中没有找到相关专门名词。不同方案有关 pci pass-through 资料如下: VMware(http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1010789  ; http://www.vmware.com/pdf/vsp_4_vmdirectpath_host.pdf  ; )  KVM(http://publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic=%2Fliaat%2Fliaatbppcipassthru.htm)XEN(http://wiki.xen.org/wiki/Xen_PCI_Passthrough)
优点:性能好。单独 PCI 设备分配给虚拟子机,虚拟子机直接跟物理设备通信。
缺点:设备只能被一个虚拟子机使用,配置也比较复杂,首先需要再 hypervisor  将制定设备通过 PCI id 方式分配给指定虚拟子机,然后虚拟子机识别到设备再安装驱动来使用。
迁移性:迁移性方面待研究,有兴趣的朋友可以补充完善。
4、SRIOV
背景:pass-through 模型让虚拟子机直接使用物理设备,这样使得虚拟子机的网络性能达到最优。SRIOV 主要用来解决pass-through 只能被一台虚拟子机访问的问题。SRIOV 标准由PCI-SIG ,这个标准实现需要CPU 、芯片组和PCI 设备(主要是网卡等I/O 资源)协同在硬件层面实现,SRIOV 被很多人认为是解决了虚拟化最后一公里的问题。模型图如下:
p_w_picpath004.png
 
 
原理:SIROV 需要网卡硬件支持,支持SIROV 功能的网卡可以在Hypervior 里面注册成多个网卡(每个网卡都独立的中断ID 、收发队列、QOS 管理机制)。每个设备可以通过pass-through 方式分配给虚拟子机。
产品:常见就是基于intel 82599 82598 芯片组的10Gb 网卡。VMware Redhat Citrix Microsoft 都已经或者正在Hypervisor 里面添加这个功能的支持。下面是一篇基于KVM SRIOV 性能测试报告。( http://www.principledtechnologies.com/clients/reports/Red%20Hat/RHEL6_SR-IOV_DB0111.pdf) ,不同厂商虚拟化方案都不尽相同,有兴趣可以在google 里面搜索到更多资料。
 
优点:优点不用说,X86 虚拟化最新的IO 虚拟化模型;虚拟机不但 性能好,而且结合硬件功能,为虚拟机IO 管理提出了一个新方案。
 
缺点:待定
迁移性:SRIOV 同时需要硬件和软件两个层面支持,虚拟子机在相同网卡主机之间理论迁移时不会有问题。具体还要看虚拟化厂商实现。
 
 
 
Reference:
2.       QEMU 仿真技术( http://en.wikipedia.org/wiki/QEMU
3.       VMware I/O architecture for virtualization http://labs.vmware.com/download/79/  
4.       Microsoft Hyper-v ( http://en.wikipedia.org/wiki/Hyper-V)