如何在 VMware ESXi 6.7 和 7.0 及以上版本中为 NVIDIA ConnectX-5 或 ConnectX-6 网卡配置 SR-IOV 模式
创建于 2019 年 6 月 9 日,更新于 2021 年 9 月 13 日。本文介绍如何在 VMware ESXi 6.7/7.0 上为 NVIDIA ConnectX-5/6 网卡配置 SR-IOV(以太网)原生驱动。
文档目录
创建于 2019 年 6 月 9 日
更新于 2021 年 9 月 13 日
引言
本文介绍如何在 ESXi 6.7/7.0 原生驱动中为 NVIDIA ConnectX-5/6 驱动配置 SR-IOV(以太网)。
注意: 虚拟机的设置不在本文讨论范围内。
参考资料
- ConnectX® VMware® ESXi Server 以太网驱动
- How-to: 在 VMware ESXi 6.7/7.0 上安装 NVIDIA 固件工具 (MFT)
- How-to: 在 VMware ESXi 6.5 及以上版本上升级 NVIDIA ConnectX 驱动
- How-to: 在 VMware ESXi 6.5 及以上版本上更新 NVIDIA ConnectX-5/6 网卡固件
单根 I/O 虚拟化 (SR-IOV)
单根 I/O 虚拟化 (SR-IOV) 是一种允许物理 PCIe 设备通过 PCIe 总线多次呈现自身的技术。该技术支持创建具有独立资源的多个设备虚拟实例。NVIDIA 网卡在 ConnectX-4/ConnectX-5 网卡上最多可暴露 128 个称为虚拟功能 (VF) 的虚拟实例。这些虚拟功能可以单独配置。每个 VF 可视为连接到物理功能的附加设备,并与物理功能共享相同的资源。
SR-IOV 通常与支持 SR-IOV 的虚拟机监控程序结合使用,为虚拟机提供对网络资源的直接硬件访问,从而提高性能。

概述
SR-IOV 配置包括以下步骤:
- 在 BIOS 中启用虚拟化 (SR-IOV)(前提条件)。
- 在固件中启用 SR-IOV。
- 在 MLNX_OFED 驱动中启用 SR-IOV。
- 通过 SR-IOV 将虚拟机 (VM) 映射到相关端口。
硬件和软件要求
-
服务器平台需配备基于以下 NVIDIA HCA 设备之一的网卡:
-
安装权限:安装需要在目标机器上具有管理员权限。
-
设备 ID:最新设备 ID 列表请访问 NVIDIA 网站。
前提条件
要设置 SR-IOV 环境,需要满足以下条件:
-
确保在特定服务器的 BIOS 中启用了 SR-IOV。不同服务器的 BIOS 虚拟化配置选项不同。有关 BIOS 配置示例,请参见 HowTo Set Dell PowerEdge R730 BIOS parameters to support SR-IOV。
-
在 ESXi 服务器上安装 NVIDIA 固件工具 (MFT),请参考 How-to: 在 VMware ESXi 6.7/7.0 上安装 NVIDIA 固件工具 (MFT)。
-
确保在虚拟机监控程序上安装了最新的 nmlx5_core 原生驱动。 请参考 NVIDIA ConnectX® VMware® ESXi Server 以太网驱动 和 How-to: 在 VMware ESXi 6.5 及以上版本上升级 NVIDIA ConnectX 驱动。
-
确保拥有支持的固件版本。 请参考 NVIDIA ConnectX® VMware® ESXi Server 以太网驱动 和 How-to: 在 VMware ESXi 6.5 及以上版本上更新 NVIDIA ConnectX-5/6 网卡固件。
设置 SR-IOV
在 BIOS 中启用 SR-IOV
不同服务器的 BIOS 虚拟化配置选项不同。
本节使用的图片仅供说明。
更多信息请参考相应的 BIOS 用户手册:
- 在系统 BIOS 中启用 "SR-IOV"。

- 保存并退出 BIOS。
在固件中启用 SR-IOV
-
使用 MFT 工具检查当前固件配置:
mlxconfig -d /dev/mst/mt4123_pciconf0 query -
启用 SR-IOV:
mlxconfig -d /dev/mst/mt4123_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=8其中
NUM_OF_VFS设置所需的虚拟功能数量。 -
重启服务器以使更改生效。
在驱动中启用 SR-IOV
-
在 ESXi 主机上,使用以下命令检查当前驱动参数:
esxcli system module parameters list -m nmlx5_core -
设置 SR-IOV 参数:
esxcli system module parameters set -m nmlx5_core -p "max_vfs=8" -
重启 ESXi 主机。
以 SR-IOV 模式向虚拟机添加网卡
- 在 vSphere Client 中,编辑虚拟机设置。
- 添加新设备,选择“网络适配器”。
- 在“适配器类型”中选择“SR-IOV 直通”。
- 选择相应的物理功能。
- 完成配置并启动虚拟机。
故障排除
-
确保 BIOS 中启用了 VT-d 和 SR-IOV。
-
检查固件和驱动版本是否兼容。
-
使用
esxcli命令验证 VF 是否已创建:esxcli network sriovnic list
作者
NVIDIA 网络团队
如何在 VMware ESXi 6.7 和 7.0 及以上版本中以 SR-IOV 模式配置 NVIDIA ConnectX-5 或 ConnectX-6 网卡
简介
本文档介绍如何在 VMware ESXi 6.7 和 7.0 及以上版本中为 NVIDIA ConnectX-5 或 ConnectX-6 网卡启用 SR-IOV 模式。
参考
单根输入/输出虚拟化 (SR-IOV) 概述
SR-IOV 允许将单个 PCIe 设备呈现为多个独立的物理设备(称为虚拟功能,VF),从而在虚拟机之间直接共享硬件资源。
硬件和软件要求
- NVIDIA ConnectX-5 或 ConnectX-6 网卡
- VMware ESXi 6.7 或 7.0 及以上版本
- 支持 SR-IOV 的服务器 BIOS
前提条件
- 确保服务器 BIOS 中启用了 Intel 虚拟化技术 (VT-x) 和 SR-IOV。
- 安装 NVIDIA 网卡固件和驱动程序。
在 BIOS 中启用 SR-IOV
- 重启服务器并进入 BIOS 设置。
- 启用 "Intel Virtualization Technology"。

- 启用 "SR-IOV Support"。

在固件上启用 SR-IOV
- 启用 SSH 访问 ESXi 服务器。
- 使用 root 权限登录 ESXi vSphere 命令行界面。
- 运行 MFT 并检查状态。
ESXi 控制台
# /opt/mellanox/bin/mst start
Module mst is already loaded
# /opt/mellanox/bin/mst status
MST devices:
------------
mt4125_pciconf7
- 查询设备状态。
ESXi 控制台
# /opt/mellanox/bin/mlxconfig -d mt4125_pciconf7 q
Device #1:
----------
Device type: ConnectX6DX
Name: MCX623106AC-CDA_Ax
Description: ConnectX-6 Dx EN adapter card; 100GbE; Dual-port QSFP56; PCIe 4.0 x16; Crypto and Secure Boot
Device: mt4125_pciconf7
Configurations: Next Boot
...
NUM_OF_VFS 0
SRIOV_EN False(0)
...
- 启用 SR-IOV 并设置所需的虚拟功能 (VF) 数量。
- SRIOV_EN=1
- NUM_OF_VFS=16(示例:每个端口 8 个 VF)
ESXi 控制台
# /opt/mellanox/bin/mlxconfig -d mt4125_pciconf7 s SRIOV_EN=1 NUM_OF_VFS=16
Device #1:
----------
Device type: ConnectX6DX
Name: MCX623106AC-CDA_Ax
Description: ConnectX-6 Dx EN adapter card; 100GbE; Dual-port QSFP56; PCIe 4.0 x16; Crypto and Secure Boot
Device: mt4125_pciconf7
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 设备(网卡)执行。在驱动程序中,配置是按模块进行的,这意味着它将适用于服务器上安装的所有网卡。
- 将 ESXi 主机进入维护模式。
- 重启服务器。
注意: 此时,使用 lspci 看不到 VF。只有在驱动程序上启用 SR-IOV 后,才能看到它们。
ESXi 控制台
# lspci -d | grep Mellanox
0000:39:00.0 Ethernet controller: Mellanox Technologies ConnectX-6 Dx EN NIC; 100GbE; dual-port QSFP56; PCIe4.0 x16; (MCX623106AC-CDA) [vmnic0]
0000:39:00.1 Ethernet controller: Mellanox Technologies ConnectX-6 Dx EN NIC; 100GbE; dual-port QSFP56; PCIe4.0 x16; (MCX623106AC-CDA) [vmnic1]
...
- 将 ESXi 主机退出维护模式。
- 检查固件中是否已启用 SR-IOV。
ESXi 控制台
# /opt/mellanox/bin/mlxconfig -d mt4125_pciconf7 q
Device #1:
----------
Device type: ConnectX6DX
Name: MCX623106AC-CDA_Ax
Description: ConnectX-6 Dx EN adapter card; 100GbE; Dual-port QSFP56; PCIe 4.0 x16; Crypto and Secure Boot
Device: mt4125_pciconf7
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"
或者,如果已配置 PFC:
ESXi 控制台
# esxcli system module parameters set -m nmlx5_core -p "pfctx=0x08 pfcrx=0x08 max_vfs=16,16"
注意 1: 确保固件上配置的 VF 数量(num_of_vfs)至少比驱动程序上配置的多一个。在我们的示例中,固件上配置了 8 个 VF,而驱动程序上配置了 4 个(max_vfs)。 注意 2: mlxconfig 必须对每个 PCI 设备(网卡)执行。在驱动程序中,配置是按模块进行的,这意味着它将适用于服务器上安装的所有网卡。 注意 3: 更改 VF 数量是持久的。
ESXi 控制台
# lspci -d | grep Mellanox
0000:39:00.0 Ethernet controller: Mellanox Technologies ConnectX-6 Dx EN NIC; 100GbE; dual-port QSFP56; PCIe4.0 x16; (MCX623106AC-CDA) [vmnic0]
0000:39:00.1 Ethernet controller: Mellanox Technologies ConnectX-6 Dx EN NIC; 100GbE; dual-port QSFP56; PCIe4.0 x16; (MCX623106AC-CDA) [vmnic1]
0000:39:00.2 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_0]
0000:39:00.3 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_1]
0000:39:00.4 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_2]
0000:39:00.5 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_3]
0000:39:00.6 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_4]
0000:39:00.7 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_5]
0000:39:01.0 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_6]
0000:39:01.1 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_7]
0000:39:01.2 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_8]
0000:39:01.3 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_9]
0000:39:01.4 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_10]
0000:39:01.5 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_11]
0000:39:01.6 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_12]
0000:39:01.7 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_13]
0000:39:02.0 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_14]
0000:39:02.1 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_15]
现在,您可以在虚拟机中使用这些 VF 了。
目录
简介
本文档提供了在 VMware ESXi 6.7 和 7.0 及以上版本中为 NVIDIA ConnectX-5 或 ConnectX-6 网卡配置 SR-IOV 模式的分步指南。
参考资料
单根输入输出虚拟化 (SR-IOV) 概述
SR-IOV 允许将单个 PCIe 设备呈现为多个独立的物理设备(虚拟功能),从而在虚拟机之间高效共享网络资源。
硬件和软件要求
- NVIDIA ConnectX-5 或 ConnectX-6 网卡
- VMware ESXi 6.7 或 7.0 及以上版本
- 支持 SR-IOV 的服务器硬件和 BIOS 设置
前提条件
- 确保 BIOS 中启用了 SR-IOV 和 VT-d。
- 确保网卡固件版本支持 SR-IOV。
配置步骤
1. 在固件中启用 SR-IOV
使用 mlxconfig 工具启用 SR-IOV 并设置虚拟功能数量。
mlxconfig -d /dev/mst/mt4123_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=8
2. 在驱动程序中启用 SR-IOV
在 ESXi 中,使用以下命令加载驱动程序并启用 SR-IOV:
esxcli system module parameters set -m nmlx5_core -p "max_vfs=8"
3. 验证虚拟功能
使用 lspci 命令验证虚拟功能是否已创建:
lspci | grep Mellanox
输出示例:
0000:39:00.0 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_0]
0000:39:00.1 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_1]
...
0000:39:02.1 Ethernet controller: Mellanox Technologies ConnectX Family nmlx5Gen Virtual Function [PF_0.57.0_VF_15]
此时您可以看到 16 个 VF 和 一个物理功能 (PF)。
4. 以 SR-IOV 模式向虚拟机添加网络适配器
注意 1: 确保 VM 版本为 Rel. 10 或更高,如有需要,通过访问 兼容性 部分进行升级(否则 SR-IOV 不会作为网络适配器选项出现)。 注意 2: 开始前,请关闭虚拟机电源。
在主机上启用虚拟功能后,每个虚拟功能都会作为 PCI 设备可用。
要在 vSphere Web Client 中将虚拟功能分配给虚拟机:
-
在 vSphere Web Client 中找到虚拟机。
- 选择数据中心、文件夹、集群、资源池或主机,然后单击“相关对象”选项卡。
- 单击“虚拟机”,然后从列表中选择虚拟机。
-
关闭虚拟机电源。
-
选择虚拟机并转到“编辑设置”。

-
单击“添加网络适配器”。

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

-
选中“预留所有客户机内存(全部锁定)”复选框。
I/O 内存管理单元 (IOMMU) 必须能够访问所有虚拟机内存,以便直通设备通过直接内存访问 (DMA) 访问内存。

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

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


