概述
SR-IOV(Single Root I/O Virtualization)是一种基于硬件的虚拟化解决方案,它允许多个云主机高效共享PCIe设备,且同时获得与物理设备性能媲美的I/O性能,能有效提高性能和可伸缩性。
- VF网卡可直接分配给云主机,越过虚拟化层,缩短数据传输路径,使云主机获得接近物理设备的I/O性能。
- 明显减少对物理机CPU资源的消耗,即使物理机CPU压力较大,也能有效减少网络丢包,提高传输效率。

注意事项
- 使用SR-IOV功能前须严格确保准备工作全部完成,否则此功能无法正常使用。详情请参考准备工作章节。
- 已配置Bond的物理网卡不支持SR-IOV切割;已被SR-IOV切割的物理网卡不支持配置Bond。
- 若VF网卡已分配给云主机使用,请勿卸载物理网卡驱动,否则可能导致VF网卡强行回收。
- VF网卡不支持QoS功能。
- 使用启用SR-IOV功能的公有/扁平/VPC网络创建的云主机,其VF网卡不支持使用安全组网络服务。
- 运行状态且加载VF网卡的云主机不支持更改物理机、更改物理机和主存储操作。须停用云主机或卸载VF网卡才能执行这些操作。
- 停用云主机将自动释放VF网卡;启用云主机时重新获取,若无可用VF网卡,将导致启用云主机失败。
准备工作
- 确保物理网卡支持SR-IOV功能,并安装到物理机主板。例如:支持SR-IOV功能的Intel网卡列表Intel官方文档。
- 确保该物理机BIOS已开启Intel VT-d / AMD IOMMU配置和SR-IOV配置。
- 确保物理机已安装物理网卡(PF网卡)驱动;确保已获取到VF网卡对应的驱动。Note: 相关网卡驱动以及安装方法请联系网卡提供厂商获取帮助。
- PF网卡驱动需安装到相关物理机,保证物理网卡可被物理机识别,且能正常进行SR-IOV切割。
- VF网卡驱动需安装到相关云主机,保证VF网卡被云主机识别且正常工作。
- 确保物理机CPU支持Interrupt Remapping。在物理机执行以下脚本,查看CPU是否支持Interrupt
Remapping:
[root@localhost ~]# cat interrupt_remapping_check.sh #!/bin/sh if [ $(dmesg | grep ecap | wc -l) -eq 0 ]; then echo "No interrupt remapping support found" exit 1 fi for i in $(dmesg | grep ecap | awk '{print $NF}'); do if [ $(( (0x$i & 0xf) >> 3 )) -ne 1 ]; then echo "Interrupt remapping not supported" exit 1 fi done若物理机CPU不支持Interrupt Remapping,须执行以下命令进行配置:[root@localhost ~]# echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
典型使用流程
背景信息
- 物理机启用IOMMU设置。
- SR-IOV切割物理网卡。
- 部署启用SR-IOV的网络环境。
- 创建云主机并加载VF网卡。
- 为云主机安装VF网卡驱动。
使用SR-IOV网卡前,请务必确保所有准备工作已完成且准确无误。以下详细介绍SR-IOV功能的操作步骤:
操作步骤
-
物理机启用IOMMU设置。
确保物理机BIOS已开启Intel VT-d / AMD IOMMU配置和SR-IOV配置的前提下,在ZStack Cloud云平台开启物理机IOMMU设置。
- 新添加物理机:在界面添加物理机过程,选择扫描物理机IOMMU设置配置,添加物理机的同时开启IOMMU设置。如图 2所示:
图 2. 新添加物理机并启用IOMMU设置 
- 已添加物理机:在物理机详情页,启用IOMMU启用状态配置,针对已添加物理机开启IOMMU设置,重启物理机生效。如图 3所示:
图 3. 已添加物理机启用IOMMU设置 
Note: 物理机开启IOMMU设置后,还需在物理机详情页确保IOMMU就绪状态为可用,否则也无法正常使用SR-IOV功能。若IOMMU启用状态为启用,但IOMMU就绪状态不可用,可能存在以下原因:- 开启IOMMU设置但未重启物理机,手动重启物理机即可。
- 物理机配置错误,请进入物理机BIOS并开启Intel VT-d / AMD IOMMU配置。
- 新添加物理机:在界面添加物理机过程,选择扫描物理机IOMMU设置配置,添加物理机的同时开启IOMMU设置。
- SR-IOV切割物理网卡。
-
部署启用SR-IOV的网络环境。
确保二层网络使用的物理网卡已进行SR-IOV切割,即可部署使用SR-IOV加速模式的网络环境,包括以下步骤:
- 创建使用SR-IOV网络加速模式的二层网络:创建L2NoVlanNetwork、L2VlanNetwork类型的二层网络时,可选择该加速模式。启用后,该二层网络下的所有三层网络将支持SR-IOV加速。Note: 二层网络使用SR-IOV网络加速模式需要注意以下情况:
- VXLAN类型的二层网络暂不支持使用SR-IOV功能。
- 二层网络使用的物理网卡未进行SR-IOV切割,即使选择使用SR-IOV网络加速模式,SR-IOV功能并不能生效。
- 创建支持SR-IOV功能的三层网络:创建三层网络(公有网络/扁平网络/VPC网络)时须加载启用SR-IOV的二层网络,该三层网络将继承SR-IOV属性,可自定义选择是否启用SR-IOV功能。如图 7所示,创建三层网络时,选择已启用SR-IOV功能的二层网络。
图 7. 创建三层网络 
- 创建使用SR-IOV网络加速模式的二层网络:创建L2NoVlanNetwork、L2VlanNetwork类型的二层网络时,可选择该加速模式。启用后,该二层网络下的所有三层网络将支持SR-IOV加速。
-
创建云主机并加载VF网卡。
启用SR-IOV的网络环境部署完成后,即可使用此三层网络创建云主机并加载VF网卡。
如图 8所示,创建云主机选择支持SR-IOV功能的三层网络,并选择启用SR-IOV按钮。图 8. 创建云主机 
Note: 创建加载VF网卡的云主机,需要注意以下情况:- 同一云主机支持加载多个VF网卡,且VF网卡和vNIC网卡支持互联互通。
- 若SR-IOV按钮置灰,可能因为该三层网络加载的二层网络不支持。
- 若VF网卡数量不足,选择启用SR-IOV按钮,将导致创建云主机失败。
- 已有云主机可通过加载网卡操作追加VF网卡,在云主机详情页的配置信息页面的网卡列加载网卡即可。
- 停止状态的云主机支持将VF网卡切换为vNIC类型,在云主机详情页的配置信息页面的网卡列设置网卡类型即可。
如图 9所示,云主机详情页可查看网卡类型。图 9. 云主机详情页 
-
为云主机安装VF网卡驱动。
相关云主机须安装VF网卡驱动,才能保证VF网卡被云主机识别且正常工作。VF网卡驱动获取以及安装方法请联系网卡提供厂商获取帮助。
典型应用场景
ZStack Cloud云平台凭借简单、健壮、弹性、智能的优势,帮助用户快速上云。但受传统虚拟化系统技术限制,Hypervisor或VMM软件层面消耗了大量资源和时间,导致PCIe设备的性能优势无法彻底发挥。
为了消除这一软件瓶颈,ZStack Cloud支持SR-IOV功能,多个云主机可以高效共享物理网卡设备,获得与物理设备性能媲美的I/O性能,同时又能减少对物理机CPU资源的消耗。可适用于网络NFV、云游戏、视频流(UDP)等典型应用场景。
网络功能虚拟化(NFV)
随着云计算、虚拟化等技术逐渐成熟,电信行业也对传统网络领域的架构进行了虚拟化变革,采用NFV设备加速完成软件化转变,方便网络设备中的应用程序可以进行大规模虚拟化部署,以节省成本并提高灵活性,有效提升竞争力。
但这些应用程序对网络的吞吐、转发、数据包处理等能力有极高要求,需要使用高性能的虚拟网络才能发挥作用。因此,具备SR-IOV功能的网卡凭借其成熟性、可虚拟化等特点在NFV设备中得到大量应用,使得数据中心能够以较低的成本获得高性能、易伸缩的弹性网络管理能力。
云游戏
随着宽带网络的发展,以及移动终端设备的普及,将游戏计算至于云端,客户端仅仅负责显示与控制的游戏模式也悄然开始流行。对于一些实时性能要求较高的游戏来说,网络包转发、瞬间吞吐能力、延迟稳定性等网络性能能必不可少,否则可能出现画面掉帧、操作延时等情况,严重影响游戏体验。
这种云游戏模式下,可以借助物理网卡稳定的网络性能,通过SR-IOV技术将VF直接分配给云主机使用。云主机虚拟网卡的流量直接发送给VF,减去中间的桥接网卡或openswitch等软交换机,明显减少网卡包量的损耗,为用户提供更好的游戏体验。
视频流
随着Internet的发展,多媒体信息在网上的传输越来越重要,为了保证传输速度,基于UDP协议的视频流被广泛使用。对于一些需要实时传输视频的场景(直播、视频会议等),网络包转发、瞬间吞吐能力、延迟稳定性等网络性能能必不可少,否则可能出现画面卡顿、视频分辨率降低等情况,严重影响视频观感。
众所周知,UDP协议虽然能提高传输速度、极大缩短传输时间,但无法保证数据可靠性。网络波动、网络丢包等直接影响视频质量,欲速则不达。具备SR-IOV功能的网卡凭借其成熟性、可虚拟化等特点在实时视频场景能够发挥独特优势,保证网络性能的同时,还能降低CPU压力,有效减少网络丢包,提高传输效率,完美弥补UDP协议可靠性问题,可谓相当契合。



