四种主要网络 IO 虚拟化模型
网络 I/O 不但是物理服务器最容易出现的瓶颈,也是现在虚拟化技术最大的硬伤。随着硬件虚拟化对网络 I/O 的支持,虚拟化的网络 I/O 模型也不断的进化,虚拟化的 I/O 性能也不断提升。
现在给大家分享 VMware、Redhat、Citrix、Microsoft 主流虚拟化解决方案采用的 4 种主流网络 I/O 模型,主要包括模型原理、模型优点、模型缺点、模型对虚拟化迁移的支持。
500篇关于虚拟化的经典资料,含CPU虚拟化,磁盘虚拟化,内存虚拟化,io虚拟化。
主流的 4 个网络 I/O 模型分别是:
1. Emulation
原理:
仿真(emulation)是一个完全通过软件程序来模拟硬件的技术。早期虚拟化都才采用这种方案来虚拟网络设备。常见仿真软件有 QEMU、VMware WorkStation、VirtualBox。Emulation 网络模型图如下:
不同虚拟化厂商的虚拟网卡产品都不尽相同。
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 模型图如下:
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
原理:
Hypervisor 将一个 PCI 设备(可以是网卡、USB、光驱)直接分配给指定虚拟子机单独访问。为了安全和稳定性考虑,pass-through 使用通常结合 intel VT-D(AMD 也有类似技术)来使用,通过 iommu 保证虚拟子机之间内存访问不冲突。这种技术在 VMware 上叫 VMDirectPath I/O,其他方案中没有找到相关专门名词。
优点:
性能好。单独 PCI 设备分配给虚拟子机,虚拟子机直接跟物理设备通信。
缺点:
设备只能被一个虚拟子机使用,配置也比较复杂,首先需要在 hypervisor 将指定设备通过 PCI id 方式分配给指定虚拟子机,然后虚拟子机识别到设备再安装驱动来使用。
迁移性:
迁移性方面待研究,有兴趣的朋友可以补充完善。
4. SR-IOV
背景:
pass-through 模型让虚拟子机直接使用物理设备,这样使得虚拟子机的网络性能达到最优。SR-IOV 主要用来解决 pass- through 只能被一台虚拟子机访问的问题。SR-IOV 标准由 PCI-SIG,这个标准实现需要 CPU、芯片组和 PCI 设备(主要是网卡等 I/O 资 源)协同在硬件层面实现,SR-IOV 被很多人认为是解决了虚拟化最后一公里的问题。模型图如下:
原理:
SR-IOV 需要网卡硬件支持,支持 SR-IOV 功能的网卡可以在 Hypervior 里面注册成多个网卡(每个网卡都独立的中断 ID、收发队列、QOS 管理机制)。每个设备可以通过 pass-through 方式分配给虚拟子机。
产品:
常见就是基于 intel 82599 和 82598 芯片组的 10Gb 网卡。VMware、Redhat、Citrix 和 Microsoft 都已经或者正在 Hypervisor 里面添 加这个功能的支持。
下面是一篇基于 KVM 的 SR-IOV 性能测试报告。
(404 Not Found Hat/RHEL6_SR-IOV_DB0111.pdf)
不同厂商虚拟化方案都不尽相同。
优点:
优点不用说,X86 虚拟化最新的 IO 虚拟化模型;虚拟机不但性能好,而且结合硬件功能,为虚拟机 IO 管理提出了一个新方案。
缺点:
待定
迁移性:
SR-IOV 同时需要硬件和软件两个层面支持,虚拟子机在相同网卡主机之间迁移时理论上不会有问题。具体还要看虚拟化厂商实现。
评论