本文主要为大家简要介绍
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
网络模型图如下:
不同虚拟化厂商的虚拟网卡产品都不尽相同。
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 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
被很多人认为是解决了虚拟化最后一公里的问题。模型图如下:
原理: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:
1.
VMwaree
虚拟机可用网络模块( http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1001805
)
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)
5.
Redhat
虚拟化管理配置文档(
https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html-single/Virtualization_Host_Configuration_and_Guest_Installation_Guide/index.html#id3138450
)