如何在 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-01 sl01w01esx11 none
ESXi-02 sl01w01esx12 none

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

VM 服务器名称 IP 和网卡
高速以太网网络
VM-01 pvrdma-ns-vm01 192.168.11.51
VM-02 pvrdma-ns-vm02 192.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

配置 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. 单击 NEXTFINISH

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