如何在 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。
注意: 设置虚拟机不在本文讨论范围内。
参考
- ConnectX® Ethernet Driver for VMware® ESXi Server
- How-to: Install NVIDIA Firmware Tools (MFT) on VMware ESXi 6.7/7.0.
- How-to: NVIDIA ConnectX driver upgrade on VMware ESXi 6.5 and above.
- How-to: Firmware update for NVIDIA ConnectX-5/6 adapter on VMware ESXi 6.5 and above.
单根 IO 虚拟化 (SR-IOV)
单根 IO 虚拟化 (SR-IOV) 是一种允许物理 PCIe 设备通过 PCIe 总线多次呈现自身的技术。该技术支持具有独立资源的多个设备虚拟实例。NVIDIA 网卡在 ConnectX-6 网卡中最多可暴露 128 个虚拟实例,称为虚拟功能 (VF)。这些虚拟功能可以单独配置。每个 VF 可视为连接到物理功能的附加设备,与物理功能共享相同资源。
SR-IOV 通常与支持 SR-IOV 的虚拟机监控程序结合使用,为虚拟机提供对网络资源的直接硬件访问,从而提高其性能。

概述
SR-IOV 配置包括以下步骤:
- 在 BIOS 中启用虚拟化 (SR-IOV)(前提条件)
- 在固件中启用 SR-IOV
- 在 MLNX_OFED 驱动中启用 SR-IOV
- 通过 SR-IOV 将虚拟机 (VM) 映射到相关端口
硬件和软件要求
- 具有支持 SR-IOV 的主板 BIOS 的服务器平台
- NVIDIA ConnectX®-6 网卡
- 安装权限:安装需要在目标机器上具有管理员权限
前提条件
要设置 SR-IOV 环境,需要满足以下条件:
- 确保在特定服务器的 BIOS 中启用了 SR-IOV。每台服务器的虚拟化 BIOS 配置选项不同。有关 BIOS 配置示例,请参见 How-to Set Dell PowerEdge R730 BIOS parameters to support SR-IOV。
- 在 ESXi 服务器上安装 NVIDIA 固件工具 (MFT),请参考 How-to: Install NVIDIA Firmware Tools (MFT) on VMware ESXi 6.7/7.0.。
- 确保使用最新的受支持固件版本。请参考 NVIDIA ConnectX® Ethernet Driver for VMware® ESXi Server 和 How-to: Firmware update for NVIDIA ConnectX-5/6 adapter on VMware ESXi 6.5 and above.。
设置 SR-IOV
在 BIOS 中启用 SR-IOV
每台服务器的虚拟化 BIOS 配置选项不同。
本节中的图片仅供说明之用。有关更多信息,请参考相应的 BIOS 用户手册。
- 启用 "SR-IOV" 在系统 BIOS 中。

- 启用 "Intel Virtualization Technology"。

在固件中启用 SR-IOV
-
启用 SSH 访问 ESXi 服务器。
-
使用 root 权限登录 ESXi vSphere 命令行界面。
-
将 ESXi 主机进入维护模式。
-
运行 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 -
查询设备状态。
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) ... -
将一个或两个端口的链路类型设置为 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 上运行,该端口必须直通到虚拟机。
-
启用以太网 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 -
重启服务器。
-
启用 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设备(网卡)执行。同时,在驱动中配置是按模块进行的,这意味着它将适用于服务器上安装的所有网卡。
- 重启服务器。
注意: 此时,使用
lspci看不到VF。只有当驱动中启用SR-IOV后,才能看到它们。
- 检查固件中是否已启用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
- 获取模块参数列表:
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
...
- 在驱动中启用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数量是持久的。
-
重启服务器。
-
检查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中将虚拟功能分配给虚拟机:
- 在vSphere Web Client中找到虚拟机。
- 选择数据中心、文件夹、集群、资源池或主机,然后单击“相关对象”选项卡。
- 单击“虚拟机”,然后从列表中选择虚拟机。
- 关闭虚拟机电源。
- 选择虚拟机,进入“编辑设置”。
- 单击“添加网络适配器”。

- 在“适配器类型”下,选择“SR-IOV直通”连接选项。

-
勾选 Reserve all guest memory (All locked) 复选框。
I/O 内存管理单元 (IOMMU) 必须能够访问所有虚拟机内存,以便直通设备通过直接内存访问 (DMA) 访问内存。

-
展开 New Network 部分,将虚拟机连接到屏幕底部组合框中的 SRIOV net port group。
虚拟网卡不使用此端口组进行数据流量。该端口组用于提取网络属性(例如 VLAN 标记)以应用于数据流量。

警告
MAC 地址和 MTU 注意事项
注意 1: 您可以保留自动生成的 MAC 地址(默认),或手动更改。
注意 2: 管理程序 MTU 应高于或等于客户机 VM,否则数据包可能会被丢弃。您可以修改“Set Guest OS MTU change”以允许从客户机更改 MTU。仅当驱动程序支持此功能时,此步骤才适用。
-
启动 VM。
-
打开 VM 命令行,确保已连接接口。
- 在客户机 VM 上安装操作系统 NVIDIA 驱动程序(OFED、WinOF 等)。
- 配置 IP 地址并检查网络连接。
故障排除
-
固件上配置的 VF 数量必须至少比驱动程序上多一个。在我们的示例中,固件上配置了 8 个 VF,而驱动程序上配置了 4 个。
-
mlxconfig 必须针对每个 PCI 设备(网卡)执行。同时,在驱动程序中,配置是按模块进行的,这意味着它将适用于服务器上安装的所有网卡。
-
确保 VM 版本为 Rel. 10 或更高版本,如有必要,通过访问 Compatibility 部分进行升级(否则 SR-IOV 不会作为网络适配器选择中的选项出现)。
完成!
作者
![]() |
Boris KovalevBoris Kovalev 过去几年一直担任解决方案架构师,专注于 NVIDIA Networking/Mellanox 技术,负责复杂的机器学习、大数据和基于 VMware 的先进云研究与设计。Boris 曾在多家公司担任高级顾问和解决方案架构师超过 20 年,最近在 VMware 工作。他在 NVIDIA 文档网站上撰写了多篇涵盖 VMware、机器学习、Kubernetes 和容器解决方案的参考设计。 |


