如何在 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(以太网)。

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

参考资料

单根 I/O 虚拟化 (SR-IOV)

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

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

1.png

概述

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

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

硬件和软件要求

  1. 服务器平台需配备基于以下 NVIDIA HCA 设备之一的网卡:

  2. 安装权限:安装需要在目标机器上具有管理员权限

  3. 设备 ID:最新设备 ID 列表请访问 NVIDIA 网站。

前提条件

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

  1. 确保在特定服务器的 BIOS 中启用了 SR-IOV。不同服务器的 BIOS 虚拟化配置选项不同。有关 BIOS 配置示例,请参见 HowTo Set Dell PowerEdge R730 BIOS parameters to support SR-IOV

  2. 在 ESXi 服务器上安装 NVIDIA 固件工具 (MFT),请参考 How-to: 在 VMware ESXi 6.7/7.0 上安装 NVIDIA 固件工具 (MFT)

  3. 确保在虚拟机监控程序上安装了最新的 nmlx5_core 原生驱动。 请参考 NVIDIA ConnectX® VMware® ESXi Server 以太网驱动How-to: 在 VMware ESXi 6.5 及以上版本上升级 NVIDIA ConnectX 驱动

  4. 确保拥有支持的固件版本。 请参考 NVIDIA ConnectX® VMware® ESXi Server 以太网驱动How-to: 在 VMware ESXi 6.5 及以上版本上更新 NVIDIA ConnectX-5/6 网卡固件

设置 SR-IOV

在 BIOS 中启用 SR-IOV

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

本节使用的图片仅供说明。

更多信息请参考相应的 BIOS 用户手册:

  1. 在系统 BIOS 中启用 "SR-IOV"

2.png

  1. 保存并退出 BIOS。

在固件中启用 SR-IOV

  1. 使用 MFT 工具检查当前固件配置:

    mlxconfig -d /dev/mst/mt4123_pciconf0 query
    
  2. 启用 SR-IOV:

    mlxconfig -d /dev/mst/mt4123_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=8
    

    其中 NUM_OF_VFS 设置所需的虚拟功能数量。

  3. 重启服务器以使更改生效。

在驱动中启用 SR-IOV

  1. 在 ESXi 主机上,使用以下命令检查当前驱动参数:

    esxcli system module parameters list -m nmlx5_core
    
  2. 设置 SR-IOV 参数:

    esxcli system module parameters set -m nmlx5_core -p "max_vfs=8"
    
  3. 重启 ESXi 主机。

以 SR-IOV 模式向虚拟机添加网卡

  1. 在 vSphere Client 中,编辑虚拟机设置。
  2. 添加新设备,选择“网络适配器”。
  3. 在“适配器类型”中选择“SR-IOV 直通”。
  4. 选择相应的物理功能。
  5. 完成配置并启动虚拟机。

故障排除

  • 确保 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

前提条件

  1. 确保服务器 BIOS 中启用了 Intel 虚拟化技术 (VT-x) 和 SR-IOV。
  2. 安装 NVIDIA 网卡固件和驱动程序。

在 BIOS 中启用 SR-IOV

  1. 重启服务器并进入 BIOS 设置。
  2. 启用 "Intel Virtualization Technology"。

2.png

  1. 启用 "SR-IOV Support"。

3.png

在固件上启用 SR-IOV

  1. 启用 SSH 访问 ESXi 服务器。
  2. 使用 root 权限登录 ESXi vSphere 命令行界面
  3. 运行 MFT 并检查状态。

ESXi 控制台

# /opt/mellanox/bin/mst start
Module mst is already loaded

# /opt/mellanox/bin/mst status

MST devices:
------------
mt4125_pciconf7
  1. 查询设备状态。

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)
...
  1. 启用 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 设备(网卡)执行。在驱动程序中,配置是按模块进行的,这意味着它将适用于服务器上安装的所有网卡。

  1. 将 ESXi 主机进入维护模式
  2. 重启服务器。

注意: 此时,使用 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]
...
  1. 将 ESXi 主机退出维护模式
  2. 检查固件中是否已启用 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

  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"

或者,如果已配置 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 数量是持久的。

  1. 将 ESXi 主机进入维护模式
  2. 重启服务器。
  3. 将 ESXi 主机退出维护模式
  4. 检查 PCI 总线并验证是否看到 VF(每个端口上的 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 中将虚拟功能分配给虚拟机:

  1. 在 vSphere Web Client 中找到虚拟机

    • 选择数据中心、文件夹、集群、资源池或主机,然后单击“相关对象”选项卡。
    • 单击“虚拟机”,然后从列表中选择虚拟机。
  2. 关闭虚拟机电源。

  3. 选择虚拟机并转到“编辑设置”。

    4.png

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

    5.png

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

    6.png

  6. 选中“预留所有客户机内存(全部锁定)”复选框。

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

    7.png

  7. 展开“新网络”部分,将虚拟机连接到屏幕底部的组合框中的“SRIOV net 端口组”。

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

    8.png

    MAC 地址和 MTU 注意事项 注意 1: 您可以保留自动生成的 MAC 地址(默认),或手动更改。 注意 2: 虚拟机监控程序 MTU 应高于或等于客户机 VM 的 MTU,否则数据包可能会被丢弃。您可以修改“设置客户机 OS MTU 更改”以允许从客户机更改 MTU。仅当驱动程序支持此功能时,此步骤才适用。

  8. 打开虚拟机电源。

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

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

故障排除

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

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

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

完成!

作者

BK.jpg Boris Kovalev

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