文档目录

概述

什么是SR-IOV

SR-IOV(Single Root I/O Virtualization)是一种基于硬件的虚拟化解决方案。该技术允许一个PCIe设备(例如物理网卡)创建出多个独立的虚拟功能(Virtual Functions,简称VF),并能将这些VF直接分配给多个实例,包括云主机、VPC路由器、负载均衡实例。SR-IOV能提供接近原生物理设备的I/O性能与低延迟,显著提升虚拟化环境下的数据处理性能和可伸缩性。

ZStack Cloud支持SR-IOV技术规范。管理员可将一张物理网卡虚拟化切割成多张VF类型网卡。切割后,可直接将VF网卡分配给实例使用。

与传统的vNIC网卡相比,VF网卡具有以下优势:
  • 越过虚拟化层,缩短数据传输路径,使云主机、VPC路由器或负载均衡实例获得接近物理设备的I/O性能。
  • 明显减少对物理机CPU资源的消耗,即使物理机CPU压力较大,也能有效减少网络丢包,提高传输效率。
图 1所示:
图 1. SR-IOV工作原理


应用场景

网络功能虚拟化 (NFV)

随着云计算、虚拟化等技术逐渐成熟,电信行业也对传统网络领域的架构进行了虚拟化变革,采用NFV设备加速完成软件化转变,方便网络设备中的应用程序可以进行大规模虚拟化部署,以节省成本并提高灵活性,有效提升竞争力。

但这些应用程序对网络的吞吐、转发、数据包处理等能力有极高要求,需要使用高性能的虚拟网络才能发挥作用。因此,具备SR-IOV功能的网卡凭借其成熟性、可虚拟化等特点在NFV设备中得到大量应用,使得数据中心能够以较低的成本获得高性能、易伸缩的弹性网络管理能力。

云游戏

随着宽带网络的发展,以及移动终端设备的普及,将游戏计算至于云端,客户端仅仅负责显示与控制的游戏模式也悄然开始流行。对于一些实时性能要求较高的游戏来说,网络包转发、瞬间吞吐能力、延迟稳定性等网络性能能必不可少,否则可能出现画面掉帧、操作延时等情况,严重影响游戏体验。

这种云游戏模式下,可以借助物理网卡稳定的网络性能,通过SR-IOV技术将VF直接分配给云主机使用。云主机虚拟网卡的流量直接发送给VF,减去中间的桥接网卡或openswitch等软交换机,明显减少网卡包量的损耗,为用户提供更好的游戏体验。

视频流

随着Internet的发展,多媒体信息在网上的传输越来越重要,为了保证传输速度,基于UDP协议的视频流被广泛使用。对于一些需要实时传输视频的场景(直播、视频会议等),网络包转发、瞬间吞吐能力、延迟稳定性等网络性能能必不可少,否则可能出现画面卡顿、视频分辨率降低等情况,严重影响视频观感。

众所周知,UDP协议虽然能提高传输速度、极大缩短传输时间,但无法保证数据可靠性。网络波动、网络丢包等直接影响视频质量,欲速则不达。具备SR-IOV功能的网卡凭借其成熟性、可虚拟化等特点在实时视频场景能够发挥独特优势,保证网络性能的同时,还能降低CPU压力,有效减少网络丢包,提高传输效率,完美弥补UDP协议可靠性问题,可谓相当契合。

使用须知

重要约束与限制

SR-IOV功能与物理网卡的聚合功能之间存在以下约束条件:
  • 若物理网卡已在聚合口中,当聚合口中的网卡数量大于2时,将不能SR-IOV切割此物理网卡。
  • 若物理网卡已在聚合口中,SR-IOV切割此物理网卡时,将同时对聚合口中的所有网卡执行切割。
  • 若聚合口中已有被SR-IOV切割的物理网卡,则该聚合口中无法再添加或删除物理网卡。
  • 物理网卡被SR-IOV切割后,将不能被添加进有未切割网卡的聚合口。
SR-IOV功能与热迁移功能之间存在以下约束条件:
  • 加载VF网卡的云主机在热迁移前,需提前安装性能优化工具(QGA),且确保性能优化工具处于正常运行状态。
  • VPC路由器或负载均衡实例自带性能优化工具(QGA),无需额外安装,即可实现带VF网卡热迁移。
  • 若云主机、VPC路由器或负载均衡实例的内部驱动版本过低,可能导致带VF网卡热迁移失败,请提前检查并按需更新驱动版本。
  • 根据实际物理网络环境,带VF网卡热迁移时可能发生短暂网络中断,业务敏感场景请谨慎使用。
其他使用限制或约束:
  • 安全组网络服务对VF网卡不可用。
  • 对于已启用SR-IOV的VPC路由器,若其挂载的网络中配置了虚拟IP QoS或网络带宽服务,将影响VPC路由器性能。
  • 对于从ZStack Cloud 5.5.0 之前版本升级的用户,若升级前的VPC路由器已经启用了SR-IOV,且没有配置虚拟IP QoS或网络带宽,升级后,为确保VPC路由器性能,建议手动重启VPC路由器。
  • 对于已经使用VF网卡的云主机、VPC路由器或负载均衡实例:
    • 请勿卸载物理网卡的PF驱动,否则将导致系统强行回收VF网卡。
    • 停用实例将自动释放VF网卡,启用实例时将重新获取VF网卡。若无可用VF网卡,实例将启用失败。

准备工作

要在ZStack Cloud中使用SR-IOV功能,需确保环境满足以下配置要求:
  1. 确保物理网卡支持SR-IOV功能,并开启SR-IOV。
  2. 确保物理机BIOS已开启Intel VT-d或AMD IOMMU配置和SR-IOV配置。

    不同服务器BIOS配置有所差别,具体操作方法请参阅硬件供应商文档。

  3. 确保物理机CPU支持Interrupt Remapping。
    1. 使用以下内容创建一个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
    2. 赋予这个脚本可执行权限。
    3. 在物理机中执行interrupt_remapping_check.sh脚本,查看CPU是否支持Interrupt Remapping。
      • 若输出No interrupt remapping support foundInterrupt remapping not supported,表示CPU不支持Interrupt Remapping。
      • 若无输出,表示CPU支持Interrupt Remapping。
    4. 若CPU不支持Interrupt Remapping,可执行以下命令进行配置。
      [root@localhost ~]# echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
  4. 确保相关驱动程序已安装。
    • 物理机需安装PF网卡驱动,确保物理网卡可被物理机识别,且能正常进行SR-IOV切割。
    • 云主机、VPC路由器或负载均衡实例需安装VF网卡驱动,确保VF网卡可被识别且正常工作。
    Note: 对于某些网卡,操作系统版本中包含默认驱动程序;对于其他网卡,则必须从网卡供应商或服务器提供商所提供的位置下载并手动安装驱动程序。

使用SR-IOV

为云主机配置VF网卡

前提条件

使用SR-IOV功能前,请确保环境满足准备工作中的软硬件兼容性要求。

操作步骤

  1. 登录ZStack Cloud
  2. 开启物理机IOMMU设置。
    对于新添加物理机:
    1. ZStack Cloud主菜单,点击资源中心 > 硬件设施 > 物理机
    2. 物理机页面,点击添加物理机
    3. 添加物理机页面,填写物理机信息后,开启扫描物理机IOMMU
    添加物理机时开启扫描物理机IOMMU所示:
    图 2. 添加物理机时开启扫描物理机IOMMU


    对于已有物理机:
    1. ZStack Cloud主菜单,点击资源中心 > 硬件设施 > 物理机
    2. 物理机页面,点击目标物理机名称,进入详情页。
    3. 在目标物理机的总览详情页,开启IOMMU启用状态
    4. 开启后,重启物理机使配置生效。
    为已有物理机开启IOMMU启用状态所示:
    图 3. 为已有物理机开启IOMMU启用状态


  3. SR-IOV切割物理网卡。
    1. 在目标物理机详情页,点击关联资源 > 物理网卡
      管理员可在物理网卡列表中查看虚拟化状态,以确定物理网卡是否支持SR-IOV。
    2. 物理网卡列表中,选择目标物理网卡,然后点击操作 > SR-IOV切割
    3. SR-IOV切割弹窗中,输入要切割的VF数量。
    4. 点击确定
    图 4所示:
    图 4. SR-IOV切割物理网卡


  4. 创建支持SR-IOV的网络。
    1. ZStack Cloud主菜单,点击资源中心 > 网络资源 > 二层网络
    2. 二层网络页面,点击创建二层网络
    3. 创建二层网络页面,按需填写相关信息。其中,集群需选择已开启IOMMU的物理机所在集群,网卡名称需选择已SR-IOV切割的物理网卡名称。
    4. 点击确定
    5. 网络资源菜单,点击扁平网络
    6. 扁平网络页面,点击创建扁平网络
    7. 创建扁平网络页面,按需填写相关网络配置。其中,二层网络选择刚才创建的二层网络。
    8. 点击确定
  5. 创建云主机并加载VF网卡。
    1. ZStack Cloud主菜单,点击资源中心 > 云资源池 > 云主机
    2. 云主机页面,点击创建云主机
    3. 创建云主机页面,完成云主机基础配置。在资源配置中,网络需选择步骤4创建的扁平网络,并且勾选启用SR-IOV选项。
    4. 继续完成云主机系统配置,然后点击确定
    图 5所示:
    图 5. 创建云主机并加载VF网卡


  6. 为云主机安装VF网卡驱动。
    云主机需安装VF网卡驱动以确保VF网卡能被云主机识别且正常工作。有关VF网卡驱动程序的获取和安装方法的更多信息,请联系网卡供应商获取帮助。

为VPC路由器配置SR-IOV Bond网卡

前提条件

  • 使用SR-IOV功能前,请确保环境满足准备工作中的软硬件兼容性要求。
  • 确保要切割的物理网卡所在的聚合口中,网卡数量不超过两张,否则将无法进行SR-IOV切割。有关使用限制的更多信息,请参阅重要约束与限制
  • 需提前获取VPC路由器使用的openEuler 22.03镜像。
  • 需提前规划VPC路由器使用的公有网络和管理网络,要求两个网络需分离部署。
  • (可选)您可根据实际资源和业务需求,规划使用两台独立服务器新建集群,用于承接VPC路由器,提供高性能网络。这两台服务器可创建VPC路由器高可用组形成冗余。有关更多信息,请参阅(可选) 创建VPC路由器高可用组

操作步骤

  1. 登录ZStack Cloud
  2. 开启物理机IOMMU设置。
    对于新添加物理机:
    1. ZStack Cloud主菜单,点击资源中心 > 硬件设施 > 物理机
    2. 物理机页面,点击添加物理机
    3. 添加物理机页面,填写物理机信息后,开启扫描物理机IOMMU
    添加物理机时开启扫描物理机IOMMU所示:
    图 6. 添加物理机时开启扫描物理机IOMMU


    对于已有物理机:
    1. ZStack Cloud主菜单,点击资源中心 > 硬件设施 > 物理机
    2. 物理机页面,点击目标物理机名称,进入详情页。
    3. 在目标物理机的总览详情页,开启IOMMU启用状态
    4. 开启后,重启物理机使配置生效。
    为已有物理机开启IOMMU启用状态所示:
    图 7. 为已有物理机开启IOMMU启用状态


  3. 添加聚合口。
    1. 在目标物理机详情页,点击关联资源 > 物理网卡
    2. 物理网卡页面,选择聚合口,然后点击添加聚合口
      图 8所示:
      图 8. 添加聚合口


    3. 添加聚合口抽屉页中,选择2张物理网卡,选择聚合模式,指定IPv4地址和子网掩码。
      • 建议选择类型、厂商、型号一致的物理网卡。
      • 指定聚合模式后,交换机侧需要同步调整为对应模式。
      图 9所示:
      图 9. 填写聚合口配置信息


    4. 点击确定
  4. SR-IOV切割Bond网卡。
    1. 物理网卡页面,选择物理网卡选项卡。
    2. 物理网卡列表中,选择目标物理网卡,然后点击操作 > SR-IOV切割
    3. SR-IOV切割弹窗中,输入要切割的VF数量。
      由于所选物理网卡已在聚合口中,切割时将同时对聚合口中的所有网卡执行切割。
    4. 点击确定
    图 10所示:
    图 10. SR-IOV切割Bond网卡


  5. 创建二层网络。
    1. ZStack Cloud主菜单,点击资源中心 > 网络资源 > 二层网络
    2. 二层网络页面,点击创建二层网络
    3. 创建二层网络页面,按需填写相关信息。其中,集群需选择已开启IOMMU的物理机所在集群,网卡名称需选择已SR-IOV切割的物理网卡名称。
    4. 点击确定
    图 11所示:
    图 11. 创建二层网络


  6. 创建公有网络。
    1. 网络资源菜单下,点击公有网络
    2. 公有网络页面,点击创建公有网络
    3. 创建公有网络页面,完成公有网络配置。
    4. 点击确定
    图 12所示:
    图 12. 创建公有网络


  7. 创建管理网络。
    1. 网络资源菜单下,点击管理网络
    2. 管理网络页面,点击创建管理网络
    3. 创建管理网络页面,完成管理网络配置。
    4. 点击确定
    图 13所示:
    图 13. 创建管理网络


  8. 添加路由器镜像。
    1. 网络资源菜单下,点击路由器镜像
    2. 路由器镜像页面,点击添加路由器镜像
    3. 添加路由器镜像页面,将获取到的openEuler镜像通过URL或本地文件方式上传。
    4. 点击确定
    图 14所示:
    图 14. 添加路由器镜像


  9. 创建路由器规格。
    1. 网络资源菜单下,点击路由器规格
    2. 路由器规格页面,点击创建路由器规格
    3. 创建路由器规格页面,完成规格配置。
      • 设置路由器规格名称、CPU、内存大小。
      • 对于镜像,选择步骤8中添加的VPC路由器镜像。
      • 对于管理网络和公有网络,选择分离部署的两个网络:选择步骤6创建的公有网络和步骤7创建的管理网络。
    4. 点击确定
    图 15所示:
    图 15. 创建路由器规格


  10. 创建VPC路由器并启用SR-IOV。
    1. 网络资源菜单下,点击VPC路由器
    2. VPC路由器页面,点击创建VPC路由器
    3. 创建VPC路由器页面,勾选启用SR-IOV,然后完成其他路由器配置。
    图 16所示:
    图 16. 创建VPC路由器


  11. 创建VPC网络。
    1. 网络资源菜单下,点击VPC网络
    2. VPC网络页面,点击创建VPC网络
    3. 创建VPC网络页面,完成VPC网络配置。
    4. 点击确定
    图 17所示:
    图 17. 创建VPC网络


  12. 为VPC网络加载VPC路由器并启用SR-IOV。
    1. 网络资源菜单下,点击VPC网络
    2. VPC网络页面,找到步骤11中创建的VPC网络。
    3. 点击操作 > 加载VPC路由器
    4. 选择VPC路由器抽屉页,选择步骤10中创建的VPC路由器。
    5. 勾选启用SR-IOV
    6. 点击确定
    图 18所示:
    图 18. 加载VPC路由器并启用SR-IOV


  13. (可选)创建VPC路由器高可用组。
    1. ZStack Cloud主菜单,点击资源中心 > 网络资源 > VPC路由器高可用组
    2. VPC路由器高可用组页面,点击创建VPC路由器高可用组
    3. 创建VPC路由器高可用组页面,选择导入已有的VPC路由器或新建VPC路由器。
    4. 点击确定
    图 19所示:
    图 19. 创建VPC路由器高可用组


常见问题

物理机IOMMU启用状态为启用,但IOMMU就绪状态为不可用

物理机开启IOMMU设置后,还需确保物理机IOMMU就绪状态为可用,否则也无法正常使用SR-IOV功能。

可能原因一

开启IOMMU设置但未重启物理机。

解决方案

操作步骤

  1. 找到目标物理机,点击操作 > 电源控制 > 重启
  2. 确认风险提示信息后,点击确定

可能原因二

物理机配置错误。

解决方案

操作步骤

  1. 找到目标物理机,进入物理机BIOS。
  2. 开启Intel VT-d或AMD IOMMU配置,以使得IOMMU配置在内核生效。
    不同服务器BIOS配置有所差别,具体操作方法请参阅硬件供应商文档。

云主机加载三层网络时,无法勾选启用SR-IOV按钮

创建云主机时,在网络配置中选择了三层网络后,三层网络的启用SR-IOV选项置灰,无法勾选。

可能原因

此三层网络对应的物理网卡没有可用的VF类型网卡。

解决方案

  • 检查此三层网络所在的物理网卡是否进行SR-IOV切割。
  • 更换三层网络。
SR-IOV网卡虚拟化使用教程 | 5.5.30 | ZStack Cloud · ZCF | ZStack 资源中心