如何在 VMware vSphere 7.0 中配置 RoCE PVRDMA 命名空间

创建于 2020 年 6 月 8 日 本文档介绍如何在 VMware vSphere 7.0 中通过 NVIDIA ConnectX 网卡启用 RoCE PVRDMA 命名空间。

文档目录

创建于 2020 年 6 月 8 日

本页内容

简介

本文档介绍如何在 VMware vSphere 7.0 中通过 NVIDIA ConnectX 网卡启用 RoCE PVRDMA 命名空间。

本指南假定已安装以下软件和驱动程序:

  • VMware ESXi 7.0.0, build 15843807
  • vCenter 7.0.0, build 15952599
  • Distributed Switch 7.0.0
  • ConnectX® Ethernet Driver for VMware® ESXi Server 4.17.13.1-1vmw.670.2.48.13006603
  • VM Guest OS: Redhat 8.3 or 7.5 with linux kernel 5.5 RDMA features
  • VM Hardware Version: 20

参考

解决方案概述

设置

image2020-6-15_10-51-10.png

解决方案逻辑设计

image2020-7-15_17-36-22.png

物料清单

image2020-6-15_8-29-43.png

解决方案物理网络布线

image2020-7-15_17-41-27.png

配置

网络配置

下表提供了 ESXi 服务器名称及其网络配置的详细信息。

ESXi 服务器服务器名称IP 和网卡
高速以太网网络
ESXi-01sl01w01esx11none
ESXi-02sl01w01esx12none

下表提供了虚拟机名称及其网络配置的详细信息。

VM服务器名称IP 和网卡
高速以太网网络
VM-01pvrdma-ns-vm01192.168.11.51
VM-02pvrdma-ns-vm02192.168.11.52

ESXi 主机配置

前提条件

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

  1. 必须在特定服务器的 BIOS 中启用 SR-IOV。每台服务器的虚拟化 BIOS 配置选项不同。有关 BIOS 配置的示例,请参阅 HowTo Set Dell PowerEdge R730 BIOS parameters to support SR-IOV。
  2. 在 ESXi 服务器上安装 Mellanox Firmware Tools (MFT)。该过程在 How-to: Install NVIDIA Firmware Tools (MFT) on VMware ESXi 6.7/7.0. 中描述。
  3. 安装程序权限:安装需要在目标机器上具有管理员权限。

检查主机配置

  1. 启用 SSH Access to ESXi 服务器。

  2. 以 root 权限登录 ESXi vSphere Command-Line Interface。

  3. 验证主机是否配备了 NVIDIA 网卡。运行:

    ESXi 控制台

    ~ lspci | grep Mellanox
    

    注意: 在此实例中,NVIDIA 网卡使用 vmnic4、5、6 和 7。

  4. 验证系统上当前是否注册了逻辑 RDMA 设备。运行:

ESXi 控制台

~ esxcli rdma device list

或者,在 vSphere Web Client 中验证它们是否已注册:

  1. 启动 vSphere Web Client 并连接到 vCenter Server 实例。

  2. 右键单击 ESXi 服务器(从 清单 列表区域),然后单击 配置 > 网络 > RDMA 适配器。

    image2020-6-14_13-24-22.png

部署

在开始部署过程之前,我们需要创建一个 vSphere Distributed Switch (vDS)。

创建 vDS

要创建新的 vDS:

  1. 启动 vSphere Web Client 并连接到 vCenter Server 实例。

  2. 在 vSphere Web Client 主屏幕上,选择左侧列表中的 vCenter 对象。 将鼠标悬停在清单列表区域中的 分布式交换机 上,然后单击 新建分布式交换机(见下图)以启动新建 vDS 向导:

    image2020-6-14_11-55-56.png

  3. 提供新 分布式交换机 的名称,并 选择 vCenter 清单中要存储新 vDS 的 位置(数据中心对象或文件夹)。单击 下一步。

    image2020-7-15_15-33-56.png

  4. 选择要创建的 vDS 的 版本。

    image2020-6-14_11-58-2.png

  5. 指定 上行链路 端口数为 2,勾选 创建默认端口组 框,并为该组命名。

    image2020-6-14_13-30-39.png

  6. 单击 完成。

    image2020-6-14_13-33-14.png

向 vDS 添加主机

要将 ESXi 主机添加到现有 vDS:

  1. 启动 vSphere Web Client 并连接到 vCenter Server 实例。

  2. 导航到 分布式交换机 列表。

  3. 右键单击对象列表中的新 分布式交换机,然后从 操作 菜单中选择 添加和管理主机。

    image2020-6-14_13-34-21.png

  4. 选择 添加主机 按钮,然后单击 下一步。

    image2020-7-15_15-48-57.png

  5. 单击 新主机绿色加号 图标以添加 ESXi 主机。这将打开“选择新主机”对话框。

  6. 从新主机列表中,勾选要 添加 到 vDS 的 每个 ESXi 主机名称 旁边的 框。

    image2020-6-15_11-1-58.png

    完成后单击 确定,然后单击 下一步 继续。

    image2020-6-15_11-2-45.png

  7. 在下一个 管理物理适配器 屏幕中,配置 每个 ESXi 主机中的 vmnic4 作为 vDS 的 上行链路 1,然后单击 下一步。

    image2020-6-15_11-6-35.png

    image2020-6-15_11-7-41.png

  8. 在

配置 ESXi 主机以使用 PVRDMA 命名空间

创建并附加 VMkernel 适配器

要创建 VMkernel 适配器并将其附加到 vDS 端口组,请执行以下步骤:

  1. 在 vSphere Web Client 中,导航到主机。

  2. 在 Configure 选项卡中,展开 Networking 子标题。

  3. 转到 VMkernel adapters 部分。

  4. 单击 Add Networking... 按钮以创建新的 VMkernel 适配器 vmk1。

    image2020-6-15_11-21-41.png

  5. 在 Select connection type 屏幕中,选择 VMkernel 网卡,然后单击 NEXT。

    image2020-6-15_11-24-27.png

  6. 在下一个 Select target device 屏幕中,单击 Select an existing networking 选项,单击 BROWSE ... 并选择 sl01w01vds01-NS-PG 端口组,然后单击 OK。

    image2020-6-15_11-30-38.png image2020-6-15_11-31-36.png

  7. 单击 NEXT 继续。

    image2020-6-15_11-32-25.png

  8. 在下一个 Port Properties 屏幕中,选择 vMotion,然后单击 NEXT。

    image2020-7-12_13-11-41.png

  9. 为 VMkernel 适配器 vmk1 提供 IPv4 地址 和 子网掩码:

    image2020-6-15_11-39-37.png

  10. 单击 NEXT 和 FINISH。

    image2020-6-15_11-41-52.png

  11. 对第二个 ESXi 主机重复 创建并附加 VMkernel 适配器 步骤。

为 PVRDMA 命名空间配置 ESXi 主机

要在 vSphere 7.0 中使用 PVRDMA,您的环境必须满足多个配置要求。

要配置 ESXi 主机以使用 PVRDMA,请执行以下步骤。

为 PVRDMA 标记 VMkernel 适配器

要标记 VMkernel 适配器,请选择它并启用 PVRDMA 命名空间通信,步骤如下:

  1. 在 vSphere Web Client 中,导航 到 主机。

  2. 在 Configure 选项卡中,展开 System 子标题,然后单击 Advanced System Settings。

  3. 找到 Net.PVRDMAvmknic 并单击 Edit。

    image2020-6-15_12-2-34.png

  4. 输入 要使用的 VMkernel 适配器 的 值(本例中为 vmk1),然后单击 OK。

    image2020-7-15_15-40-43.png

  5. 在 Manage VMkernel adapters 和 Migrate VM networking 屏幕中,单击 NEXT 继续。

    image2020-6-15_11-10-48.png image2020-6-15_11-12-38.png

  6. 单击 FINISH。

    image2020-7-15_15-40-43.png

确定。

image2020-7-1_10-35-42.png

可选: 您可以使用 ESXi CLI 为在 DVS 上创建的 vmknic 打标签,该 vmknic 将用于 VRDMA 的 TCP 通道,运行以下命令行:

esxcli system settings advanced set -o /Net/PVRDMAVmknic -s vmk1

启用 PVRDMA 的防火墙规则

要在 ESXi 主机的安全配置文件中启用 PVRDMA 的防火墙规则,请执行以下步骤:

  1. 在 vSphere Web Client 中,导航到主机。

  2. 在 Configure 选项卡中,展开 System 子标题。

  3. 转到 Firewall 部分,点击 Edit。

    image2020-6-15_12-12-30.png

  4. 滚动到 pvrdma 规则,并勾选旁边的相关复选框:

    image2020-6-15_12-16-42.png

  5. 点击 OK 完成。

    可选: 您可以使用 ESXi CLI 启用 pvrdma 防火墙规则,运行以下命令行:

    esxcli network firewall ruleset set -e true -r pvrdma
    
  6. 进入维护模式 ESXi 主机。

  7. 按照 如何:在 VMware ESXi 6.7/7.0 上安装 NVIDIA 固件工具 (MFT) 中的步骤下载并安装 Mellanox 固件工具 (MFT)。

    您可以使用 MFT 工具版本 4.14.2 for ESXi 7.0。

  8. 按照 如何:在 VMware ESXi 6.5 及以上版本上更新 NVIDIA ConnectX-5/6 适配器的固件 和 如何:在 VMware ESXi 6.7/7.0 及以上版本上升级 NVIDIA ConnectX 驱动程序 中的步骤更新固件和驱动程序。

    您可以使用固件版本 16.27.2008 和驱动程序版本 4.19.70.1 及以上。

  9. 打印 NVIDIA 设备的当前状态。

    ESXi 控制台

    /opt/mellanox/bin/mst status
    

    示例输出: image2020-6-16_12-27-26.png

  10. 在两个 ESXi 上使用 MFT 在 ConnectX 适配器上将 MKEY_BY_NAME 标志设置为 1。

    从 Linux 内核 5.9+ 开始,无需将 MKEY_BY_NAME 标志设置为 1,因为内核补丁已添加支持。

    ESXi 控制台

    /opt/mellanox/bin/mlxconfig -d mt4119_pciconf0 set MKEY_BY_NAME=1
    

    设置 MKEY_BY_NAME=1 将导致网卡或任何 VF 的 PCI 直通不可用,因为 Linux 驱动程序无法识别该固件选项。

  11. 使用模块参数打开 VF。固件和 BIOS 必须配置为 SR-IOV。

    ESXi 控制台

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

    有关启用 VF 和 SR-IOV 的更多信息,请参阅以下文档:如何:在 VMware ESXi 6.7/7.0 及以上版本上以 SR-IOV 模式配置 NVIDIA ConnectX-5/6 适配器。

  12. 重启 ESXi 主机。

  13. 通过在 CLI 中运行以下命令获取已打开的 VF:

    ESXi 控制台

    esxcli hardware pci pcipassthru list
    

    示例: image2020-6-16_12-42-0.png

    或者,如果使用 vSphere Web Client:

    1. 导航到主机。

    2. 在 Configure 选项卡中,展开 Hardware 子标题。

    3. 转到 PCI Devices 部分。

      image2020-6-17_8-45-47.png

  14. 通过在 CLI 中运行以下命令,将已打开的 VF 从用户空间****移动到内核空间。我们需要移动至少两个 VF(vMotion 所需)。

    ESXi 控制台

    esxcli hardware pci pcipassthru set -d 0000:13:00.2 -e 0 -a
    esxcli hardware pci pcipassthru set -d 0000:13:00.3 -e 0 -a
    

    或者,如果使用 vSphere Web Client:

客户端

  1. 导航至 主机。

  2. 在 配置 选项卡中,展开 硬件 子标题。

  3. 进入 PCI 设备 部分。

  4. 在右上角 单击 "配置直通",取消选中 VF 以将所有权移交给 VMkernel。

    image2020-7-1_17-34-45.png

  5. 退出维护模式 ESXi 主机。

将 PVRDMA 适配器分配给虚拟机

要使虚拟机能够使用 RDMA 交换数据,必须将虚拟机与 PVRDMA 网络适配器关联。操作步骤如下:

  1. 在 vSphere Web Client 中 定位 虚拟机。

  2. 选择 数据中心、文件夹、集群、资源池或主机,然后单击 虚拟机 选项卡。

  3. 单击 虚拟机,然后从列表中 双击 该 虚拟机。

  4. 关闭 虚拟机 电源。

  5. 在虚拟机的 摘要 选项卡中,展开 虚拟机硬件 子标题,然后单击 编辑设置。

  6. 在 虚拟硬件 选项卡中单击 添加新设备,从列表中选择 网络适配器,然后单击 确定。

    image2020-6-16_14-59-15.png

  7. 展开 新网络* 部分,将虚拟机连接到分布式端口组。单击 浏览 以选择端口组。

    image2020-6-16_15-1-31.png

  8. 选择 PVRDMA 作为 适配器类型。

    image2020-6-16_15-5-51.png

  9. 展开 内存 部分,选中 预留所有客户机内存(全部锁定) 复选框。

    image2020-6-16_15-6-57.png

  10. 单击 确定 关闭对话框。

  11. 打开 虚拟机 电源。

为 PVRDMA 配置客户机操作系统

注意: 此步骤仅适用于为 Red Hat/CentOS 7.5 或更高版本的虚拟机分配 PVRDMA 适配器的过程。 在我们的实验室中,Red Hat 安装 包括一个 基础架构服务器,并带有以下 附加组件:调试工具、InfiniBand 支持、开发工具 和 系统管理工具。

要配置客户机操作系统以支持 PVRDMA,需要安装 PVRDMA 驱动程序。安装过程取决于 ESXi 版本、VM 工具和客户机操作系统版本:

客户机操作系统:CentOS 7.5 及更高版本
VM 硬件版本 17
ESXi v7.0.0
1. 创建 VM 兼容版本为 17 的虚拟机,并安装 CentOS 7.5 或更高版本。
  1. 从 vCenter 在 DVS 端口组上添加 PVRDMA 适配器。
  2. InfiniBand 软件包是 linux kernel 5.5 RDMA 功能 的一部分。
  3. 验证:日志必须包含此行:vmw_pvrdma 0000:13:00.1: device version 20, driver version 20. |
客户机操作系统:Ubuntu 18.04 及更高版本
VM 硬件版本 17
ESXi v7.0.0
1. 创建 VM 兼容版本为 17 的虚拟机,并安装 Ubuntu 18.04 或更高版本。
  1. 从 vCenter 在 DVS 端口组上添加 PVRDMA 适配器。
  2. InfiniBand 软件包是 linux kernel 5.5 RDMA 功能 的一部分。
  3. 验证:日志必须包含此行:vmw_pvrdma 0000:13:00.1: device version 20, driver version 20. |

验证

在 ESXi 主机上

ESXi 控制台
[root@sl01w01esx11:~] vsish
/> cd /vmkModules/vrdma/pvrdmaDevices/
/vmkModules/vrdma/pvrdmaDevices/> dir
2114737_0/
/vmkModules/vrdma/pvrdmaDevices/> cat /vmkModules/vrdma/pvrdmaDevices/2114737_0/properties
/> cat /vmkModules/vrdma/pvrdmaDevices/2114737_0/properties
PVRDMA Device Properties {
VMM leader ID of VM:2114737
adapter index:0
MAC address:00:50:56:a1:50:19
Physical HCA available:1
Namespace allocated:1
SRQ support enabled:1
MR Key extension enabled:1
Phys handles enabled:1
Prefer RoCE v1 over v2:0
RoCE version:2
Active MTU:1024

注意: 分配的命名空间数量必须为 1。

在虚拟机上

虚拟机控制台
dmesg
...

[176904.512175] vmw_pvrdma 0000:13:00.1: device version 20, driver version 20
[176904.512239] vmw[root@localhost ~]# dmesg_pvrdma 0000:13:00.1: paired device to ens224f0
[176904.512333] vmw_pvrdma 0000:13:00.1: irq 70 for MSI/MSI-X
[176904.512358] vmw_pvrdma 0000:13:00.1: irq 71 for MSI/MSI-X
[176904.512383] vmw_pvrdma 0000:13:00.1: irq 72 for MSI/MSI-X
[176904.582977] vmw_pvrdma 0000:13:00.1: attached to device

日志中必须包含以下行: vmw_pvrdma 0000:13:00.1: device version 20, driver version 20.

部署验证

要使用 PVRDMA 测试通信,我们将使用 Perftest。这是一组基于 uverbs 编写的测试,旨在用作性能微基准测试。

这些测试可用于硬件或软件调优以及功能测试。

安装并运行基准测试:

  1. 安装 Perftest:

    虚拟机控制台

    cd
    wget https://github.com/linux-rdma/perftest/archive/master.zip
    unzip master.zip
    cd perftest-master/
    ./autogen.sh
    ./configure
    make
    
    modprobe ib_core
    modprobe ib_uverbs
    modprobe ib_cm
    modprobe rdma_cm
    modprobe rdma_ucm
    

    警告: InfiniBand 软件包不属于 linux kernel 5.4 的一部分。在这种情况下,您需要在安装 perftest 之前安装以下软件包:

    • rdma-core
    • libtool
    • libibverbs-dev
    • librdmacm-dev
    • libibumad-dev
    • libpci-dev
  2. 检查网络接口名称:

    虚拟机控制台

    ifconfig
    ...
    ens224f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    
  3. 为网络接口添加静态 IP 配置。 修改 /etc/sysconfig/network-scripts/ifcfg-ens224f0。

    添加到文件

    DEVICE=ens224f0
    BOOTPROTO=none
    ONBOOT=yes
    PREFIX=24
    IPADDR=192.168.11.51
    

对第二台虚拟机重复步骤 1-3。

在第一台虚拟机(“服务器”)上,运行以下命令:

VM01 “服务器”控制台
systemctl disable firewall
systemctl stop firewalld
systemctl disable firewalld
firewall-cmd --state
./ib_write_bw -x 0 -d vmw_pvrdma0 --report_gbits

在第二台虚拟机(“客户端”)上,运行以下命令:

VM02 “客户端”控制台
./ib_write_bw -x 0 -F 192.168.11.51 -d vmw_pvrdma0 --report_gbits
************************************

* Waiting for client to connect... *
************************************
-------------------------------------------------------------------------------- -------
RDMA_Write BW Test
Dual-port : OFF Device : vmw_pvrdma0
Number of qps : 1 Transport type : IB
Connection type : RC Using SRQ : OFF
CQ Moderation : 100
Mtu : 1024[B]
Link type : Ethernet
GID index : 0
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
-------------------------------------------------------------------------------- -------
local address: LID 0000 QPN 0x0004 PSN 0xfb9486 RKey 0x000005 VAddr 0x007f68c62 a1000
GID: 254:128:00:00:00:00:00:00:02:80:86:255:254:170:101:146
remote address: LID 0000 QPN 0x0002 PSN 0xe72165 RKey 0x000003 VAddr 0x007f2ab4 361000
GID: 254:128:00:00:00:00:00:00:02:80:86:255:254:170:58:174
-------------------------------------------------------------------------------- -------
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]
65536  5000          90.56           90.39            0.172405
-------------------------------------------------------------------------------- -------

完成!

关于作者

BK.jpgBoris Kovalev

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