如何在 VMware ESXi 7.0 及以上版本中将 NVIDIA ConnectX-6 InfiniBand 网卡配置为 SR-IOV 模式

创建于 2022 年 6 月 27 日。本文介绍如何在 ESXi 7.0 主机上使用 NVIDIA ConnectX®-6 InfiniBand 网卡设置和配置 SR-IOV。

文档目录

创建于 Jun 27, 2022

简介

本文介绍如何在 ESXi 7.0 主机上使用 NVIDIA ConnectX®-6 InfiniBand 网卡(使用原生驱动)设置和配置 SR-IOV。

注意: 设置虚拟机不在本文讨论范围内。

参考

单根 IO 虚拟化 (SR-IOV)

单根 IO 虚拟化 (SR-IOV) 是一种允许物理 PCIe 设备通过 PCIe 总线多次呈现自身的技术。该技术支持具有独立资源的多个设备虚拟实例。NVIDIA 网卡在 ConnectX-6 网卡中最多可暴露 128 个虚拟实例,称为虚拟功能 (VF)。这些虚拟功能可以单独配置。每个 VF 可视为连接到物理功能的附加设备,与物理功能共享相同资源。

SR-IOV 通常与支持 SR-IOV 的虚拟机监控程序结合使用,为虚拟机提供对网络资源的直接硬件访问,从而提高其性能。

1.png

概述

SR-IOV 配置包括以下步骤:

  • 在 BIOS 中启用虚拟化 (SR-IOV)(前提条件)
  • 在固件中启用 SR-IOV
  • 在 MLNX_OFED 驱动中启用 SR-IOV
  • 通过 SR-IOV 将虚拟机 (VM) 映射到相关端口

硬件和软件要求

  • 具有支持 SR-IOV 的主板 BIOS 的服务器平台
  • NVIDIA ConnectX®-6 网卡
  • 安装权限:安装需要在目标机器上具有管理员权限

前提条件

要设置 SR-IOV 环境,需要满足以下条件:

  1. 确保在特定服务器的 BIOS 中启用了 SR-IOV。每台服务器的虚拟化 BIOS 配置选项不同。有关 BIOS 配置示例,请参见 How-to Set Dell PowerEdge R730 BIOS parameters to support SR-IOV
  2. 在 ESXi 服务器上安装 NVIDIA 固件工具 (MFT),请参考 How-to: Install NVIDIA Firmware Tools (MFT) on VMware ESXi 6.7/7.0.
  3. 确保使用最新的受支持固件版本。请参考 NVIDIA ConnectX® Ethernet Driver for VMware® ESXi ServerHow-to: Firmware update for NVIDIA ConnectX-5/6 adapter on VMware ESXi 6.5 and above.

设置 SR-IOV

在 BIOS 中启用 SR-IOV

每台服务器的虚拟化 BIOS 配置选项不同。

本节中的图片仅供说明之用。有关更多信息,请参考相应的 BIOS 用户手册。

  1. 启用 "SR-IOV" 在系统 BIOS 中。 2.png
  2. 启用 "Intel Virtualization Technology"3.png

在固件中启用 SR-IOV

  1. 启用 SSH 访问 ESXi 服务器

  2. 使用 root 权限登录 ESXi vSphere 命令行界面

  3. 将 ESXi 主机进入维护模式

  4. 运行 MFT 并检查状态。

    ESXi 控制台

    # /opt/mellanox/bin/mst start
    Module mst is already loaded
    
    # /opt/mellanox/bin/mst status -vv
    PCI devices:
    ------------
    DEVICE_TYPE             MST                           PCI       RDMA            NET                       NUMA
    ConnectX6(rev:0)        mt4123_pciconf1               37:00.0
    
    ConnectX6(rev:0)        mt4123_pciconf1.1             37:00.1
    
  5. 查询设备状态。

    ESXi 控制台

    # /opt/mellanox/bin/mlxconfig -d mt4123_pciconf1 q
    
    Device #1:
    ----------
    Device type:    ConnectX6
    Name:           MCX654106A-HCA_Ax
    Description:    ConnectX-6 VPI adapter card; HDR IB (200Gb/s) and 200GbE; dual-port QSFP56; Socket Direct 2x PCIe3.0 x16; tall bracket; ROHS R6
    Device:         mt4123_pciconf1
    
    Configurations:             Next Boot
    ...
    NUM_OF_VFS					0
    SRIOV_EN 					False(0)
    ...
    
  6. 将一个或两个端口的链路类型设置为 InfiniBand(默认)

    ESXi 控制台

    # /opt/mellanox/bin/mlxconfig -d mt4123_pciconf1 set LINK_TYPE_P1=1
    
    Device #1:
    ----------
    
    Device type:    ConnectX6
    Name:           MCX654106A-HCA_Ax
    Description:    ConnectX-6 VPI adapter card; HDR IB (200Gb/s) and 200GbE; dual-port QSFP56; Socket Direct 2x PCIe3.0 x16; tall bracket; ROHS R6
    Device:         mt4123_pciconf1
    
    Configurations:                              Next Boot       New
             LINK_TYPE_P1                        ETH(2)           IB(1)
    
    Apply new Configuration? (y/n) [n] : y
    Applying... Done!
    
    # /opt/mellanox/bin/mlxconfig -d mt4123_pciconf1 set LINK_TYPE_P2=1
    
    Device #1:
    ----------
    
    Device type:    ConnectX6
    Name:           MCX654106A-HCA_Ax
    Description:    ConnectX-6 VPI adapter card; HDR IB (200Gb/s) and 200GbE; dual-port QSFP56; Socket Direct 2x PCIe3.0 x16; tall bracket; ROHS R6
    Device:         mt4123_pciconf1
    
    Configurations:                              Next Boot       New
             LINK_TYPE_P2                        ETH(2)           IB(1)
    
    Apply new Configuration? (y/n) [n] : y
    Applying... Done!
    -I- Please reboot machine to load new configurations.
    

    每个子网必须有一个 InfiniBand 端口专用于运行子网管理器 (SM)。由于 SM 只能在 PF 上运行,该端口必须直通到虚拟机。

  7. 启用以太网 PCI 子类覆盖。

    ESXi 控制台

    # /opt/mellanox/bin/mlxconfig -d mt4123_pciconf1 set ADVANCED_PCI_SETTINGS=1
    # /opt/mellanox/bin/mlxconfig -d mt4123_pciconf1 set FORCE_ETH_PCI_SUBCLASS=1
    
  8. 重启服务器。

  9. 启用 SR-IOV 并设置所需的虚拟功能 (VF) 数量。

SRIOV_EN=1

NUM_OF_VFS=16;此示例每个端口有8个VF。

ESXi控制台

# /opt/mellanox/bin/mlxconfig -d mt4123_pciconf1 s SRIOV_EN=1 NUM_OF_VFS=16

Device #1:
----------

Device type:    ConnectX6
Name:           MCX654106A-HCA_Ax
Description:    ConnectX-6 VPI adapter card; HDR IB (200Gb/s) and 200GbE; dual-port QSFP56; Socket Direct 2x PCIe3.0 x16; tall bracket; ROHS R6
Device:         mt4123_pciconf1

Configurations:                              Next Boot       New
         SRIOV_EN                            False(0)        True(1)
         NUM_OF_VFS                          0               16

 Apply new Configuration? (y/n) [n] : y
Applying... Done!
-I- Please reboot machine to load new configurations.

注意: mlxconfig必须对每个PCI设备(网卡)执行。同时,在驱动中配置是按模块进行的,这意味着它将适用于服务器上安装的所有网卡。

  1. 重启服务器。

注意: 此时,使用lspci看不到VF。只有当驱动中启用SR-IOV后,才能看到它们。

  1. 检查固件中是否已启用SR-IOV。

ESXi控制台

# /opt/mellanox/bin/mlxconfig -d mt4123_pciconf1 q

Device #1:
----------

Device type:    ConnectX6
Name:           MCX654106A-HCA_Ax
Description:    ConnectX-6 VPI adapter card; HDR IB (200Gb/s) and 200GbE; dual-port QSFP56; Socket Direct 2x PCIe3.0 x16; tall bracket; ROHS R6
Device:         mt4123_pciconf1
  Configurations: Current

...

NUM_OF_VFS 16

SRIOV_EN True(1)

...

在驱动中启用SR-IOV

  1. 获取模块参数列表:

ESXi控制台

# esxcli system module parameters list -m nmlx5_core

Name Type Value Description
...
max_vfs array of uint Number of PCI VFs to initialize
Values : Array of 'uint' of range 0-128, May be limited by device, 0 - disabled
Default: 0
...
  1. 在驱动中启用SR-IOV并设置max_vfs模块参数。

ESXi控制台

# esxcli system module parameters set -m nmlx5_core -p "max_vfs=16,16"

或者,如果您的服务器有第二张NVIDIA网卡。 示例:

ESXi控制台

# esxcli system module parameters set -m nmlx5_core -p "max_vfs=0,0,16,16"

注意1: 固件上配置的VF数量(num_of_vfs)应至少比驱动上配置的多一个。在我们的示例中,固件上配置了8个VF,而驱动上配置了4个(max_vfs)。 注意2: mlxconfig必须对每个PCI设备(网卡)执行。同时,在驱动中配置是按模块进行的,这意味着它将适用于服务器上安装的所有网卡。 注意3: 更改VF数量是持久的。

  1. 重启服务器。

  2. 退出ESXi主机的维护模式

  3. 检查PCI总线,确认看到VF(每个端口VF数量相同)。

ESXi控制台

# lspci -d | grep Mellanox

0000:37:00.0 Ethernet controller: Mellanox Technologies MT28908 Family [ConnectX-6] [vmnic4]
0000:37:00.1 Ethernet controller: Mellanox Technologies MT28908 Family [ConnectX-6] [vmnic5]
0000:37:00.2 Ethernet controller: Mellanox Technologies MT28908 Family [ConnectX-6 Virtual Function] [PF_0.55.0_VF_0]
0000:37:00.3 Ethernet controller: Mellanox Technologies MT28908 Family [ConnectX-6 Virtual Function] [PF_0.55.0_VF_1]
...
0000:37:04.1 Ethernet controller: Mellanox Technologies MT28908 Family [ConnectX-6 Virtual Function] [PF_0.55.1_VF_15]

此时可以看到16个VF一个物理功能(PF)

以SR-IOV模式向虚拟机添加网络适配器

注意1: 确保虚拟机版本为Rel. 10或更高,如有需要,通过访问兼容性部分进行升级(否则SR-IOV不会作为网络适配器选项出现)。 注意2: 开始前,请关闭虚拟机电源。

在主机上启用虚拟功能后,每个VF都作为PCI设备可用。

要在vSphere Web Client中将虚拟功能分配给虚拟机:

  1. 在vSphere Web Client中找到虚拟机。
    • 选择数据中心、文件夹、集群、资源池或主机,然后单击“相关对象”选项卡。
    • 单击“虚拟机”,然后从列表中选择虚拟机。
  2. 关闭虚拟机电源。
  3. 选择虚拟机,进入“编辑设置”。 Add 网卡 to the VM in SR-IOV Mode 01.PNG
  4. 单击“添加网络适配器”。 5.png
  5. 在“适配器类型”下,选择“SR-IOV直通”连接选项。 SR-IOV passthrough

6.png

  1. 勾选 Reserve all guest memory (All locked) 复选框。

    I/O 内存管理单元 (IOMMU) 必须能够访问所有虚拟机内存,以便直通设备通过直接内存访问 (DMA) 访问内存。

    7.png

  2. 展开 New Network 部分,将虚拟机连接到屏幕底部组合框中的 SRIOV net port group

    虚拟网卡不使用此端口组进行数据流量。该端口组用于提取网络属性(例如 VLAN 标记)以应用于数据流量。

    8.png

    警告

    MAC 地址和 MTU 注意事项

    注意 1: 您可以保留自动生成的 MAC 地址(默认),或手动更改。

    注意 2: 管理程序 MTU 应高于或等于客户机 VM,否则数据包可能会被丢弃。您可以修改“Set Guest OS MTU change”以允许从客户机更改 MTU。仅当驱动程序支持此功能时,此步骤才适用。

  3. 启动 VM。

  4. 打开 VM 命令行,确保已连接接口。

  • 在客户机 VM 上安装操作系统 NVIDIA 驱动程序(OFED、WinOF 等)。
  • 配置 IP 地址并检查网络连接。

故障排除

  1. 固件上配置的 VF 数量必须至少比驱动程序上多一个。在我们的示例中,固件上配置了 8 个 VF,而驱动程序上配置了 4 个。

  2. mlxconfig 必须针对每个 PCI 设备(网卡)执行。同时,在驱动程序中,配置是按模块进行的,这意味着它将适用于服务器上安装的所有网卡。

  3. 确保 VM 版本为 Rel. 10 或更高版本,如有必要,通过访问 Compatibility 部分进行升级(否则 SR-IOV 不会作为网络适配器选择中的选项出现)。

完成!

作者

BK.jpg Boris KovalevBoris Kovalev 过去几年一直担任解决方案架构师,专注于 NVIDIA Networking/Mellanox 技术,负责复杂的机器学习、大数据和基于 VMware 的先进云研究与设计。Boris 曾在多家公司担任高级顾问和解决方案架构师超过 20 年,最近在 VMware 工作。他在 NVIDIA 文档网站上撰写了多篇涵盖 VMware、机器学习、Kubernetes 和容器解决方案的参考设计。