如何在 VMware vSphere 6.5 和 6.7 中配置 PVRDMA

创建于 2019 年 8 月 8 日。本文档介绍如何在 VMware vSphere 6.5/6.7 中使用 NVIDIA ConnectX 网卡启用 PVRDMA。本指南假设以下软件和驱动程序已预装:VMware ESXi 6.7 Update 2, build 13006603;vCenter 6.7 Update 2, build 13007421;Distributed Switch 6.6.0;ConnectX® Ethernet Driver for VMware® ESXi Server 4.17.13.1-1vmw.670.2.48.13006603;CentOS 7.6。

文档目录

创建于 2019 年 8 月 8 日

简介

本文档介绍如何在 VMware vSphere 6.5/6.7 中使用 NVIDIA ConnectX 网卡启用 PVRDMA。

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

  • VMware ESXi 6.7 Update 2, build 13006603
  • vCenter 6.7 Update 2, build 13007421
  • Distributed Switch 6.6.0
  • ConnectX® Ethernet Driver for VMware® ESXi Server 4.17.13.1-1vmw.670.2.48.13006603
  • CentOS 7.6

参考资料

组件概述

vSphere Distributed Switch

vSphere Distributed Switch 提供对所有与该交换机关联的主机的网络配置的集中管理和监控。您必须在 vCenter Server 系统上设置分布式交换机,其设置将传播到所有与该交换机关联的主机。

半虚拟化 RDMA (PVRDMA)

直接内存访问 (DMA) - 设备直接访问主机内存的能力,无需 CPU 干预。

远程直接内存访问 (RDMA) - 在不中断系统 CPU 进程的情况下,访问远程机器内存(读、写)的能力。

RDMA 优势:

  • 零拷贝 - 允许应用程序在不涉及网络软件栈的情况下执行数据传输。数据直接发送和接收到缓冲区,无需在网络层之间复制。
  • 内核旁路 - 允许应用程序直接从用户空间执行数据传输,无需内核参与。
  • CPU 卸载 - 允许应用程序访问远程内存,而无需消耗远程服务器上的任何 CPU 时间。远程内存服务器将在没有远程进程(或处理器)干预的情况下被读取。此外,远程 CPU 的缓存不会填充被访问的内存内容。

PVRDMA 架构

image2019-8-23_10-14-57.png

加速 VM 数据

image2019-8-23_10-14-38.png

解决方案概述

设置

image2019-7-28_16-46-21.png

解决方案逻辑设计

image2019-8-15_11-57-53.png

物料清单

bom PVRDMA.png

解决方案物理网络布线

image2019-7-29_8-39-55.png

配置

网络配置

下表提供了 ESXi 服务器名称及其网络配置详情:

ESXi 服务器服务器名称IP 和网卡
高速以太网网络
ESXi-01sl01w01esx21none
ESXi-02sl01w01esx22none
ESXi-03sl01w01esx23none
ESXi-04sl01w01esx24none

下表提供了 VM 名称及其网络配置详情:

VM服务器名称IP 和网卡
高速以太网网络
VM-01pvrdma-vm01192.168.11.51
VM 名称主机名IP 地址管理网络
VM-01pvrdma-vm01192.168.11.51eno0: 来自 DHCP(保留)
VM-02pvrdma-vm02192.168.11.52eno0: 来自 DHCP(保留)
VM-03pvrdma-vm03192.168.11.53eno0: 来自 DHCP(保留)
VM-04pvrdma-vm04192.168.11.54eno0: 来自 DHCP(保留)

ESXi 主机配置

检查主机配置:

  1. 启用对 ESXi 服务器的 SSH 访问。

  2. 使用 root 权限登录 ESXi vSphere 命令行界面。

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

    ESXi 控制台

    ~ lspci | grep Mellanox
    
    0000:02:00.0 Network controller: Mellanox Technologies MT28800 Family [ConnectX-5 Ex] [vmnic2]
    0000:02:00.1 Network controller: Mellanox Technologies MT28800 Family [ConnectX-5 Ex] [vmnic3]
    

    注意: 在本例中,NVIDIA 网卡使用 vmnic2 和 vmnic3。

  4. 验证逻辑 RDMA 设备是否已在系统上注册:

    ESXi 控制台

    ~ esxcli rdma device list
    Name 	 Driver 	 State 	 MTU    Speed 	   Paired Uplink 	Description
    -------	 ----------	 ------	 ----   --------   -------------	-----------------------------------
    vmrdma0	 nmlx5_rdma  Active	 1024	100 Gbps   vmnic2			MT28800 Family [ConnectX-5 MT28831]
    vmrdma1	 nmlx5_rdma  Down	 1024	0		   vmnic3			MT28800 Family [ConnectX-5 MT28831]
    

部署

在开始部署过程之前,必须创建一个 vSphere Distributed Switch (vDS):

创建 vDS

要创建新的 vDS:

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

  2. 在 vSphere Web Client 主屏幕上,从左侧列表中选择 vCenter 对象。将鼠标悬停在“分布式交换机”上,然后单击“新建分布式交换机”图标(见下图):

    1-dvs create -1.PNG

    这将启动新建 vDS 向导。

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

    1-dvs create -2.PNG

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

    1-dvs create -3.PNG

  5. 将上行链路端口数设置为 2。勾选“创建默认端口组”框,并为该组命名:

    1-dvs create -4.PNG

  6. 单击“下一步”完成。

向 vDS 添加主机

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

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

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

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

    1-dvs create -5.PNG

  4. 单击“添加主机”按钮,然后单击“下一步”:

    1-dvs create -6.PNG

  5. 单击“新主机”选项(绿色加号图标)以添加 ESXi 主机。

    1-dvs create -7.PNG

    这将打开“选择新主机”对话框。

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

    1-dvs create -8.PNG

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

  7. 在下一个屏幕中,确保同时勾选“管理物理适配器”和“管理 VMkernel 适配器”复选框。单击“下一步”继续。

    1-dvs create -9.PNG

  8. 将每个 ESXi 主机中的 vmnic2 配置为 vDS 的 Uplink 1:

    1-dvs create -10.PNG

  9. 创建 VMkernel 适配器 vmk2 并将其连接到 sl01-w01-vds02-pvrdma vDS 端口组。单击绿色加号图标,然后选择现有网络之一。单击“确定”。

    1-dvs create -11.PNG

    1-dvs create -12.PNG

    单击“下一步”。

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

    1-dvs create -13.PNG

  11. 单击“下一步”直到向导完成:

    1-dvs create -14.PNG

如何在 VMware vSphere 6.5 和 6.7 中配置 PVRDMA

创建分布式虚拟交换机 (DVS)

  1. 在 vSphere Web Client 中,导航到数据中心。
  2. 在 Networking 部分,右键单击数据中心并选择 Distributed Switch > New Distributed Switch。
  3. 输入 DVS 的名称,例如 "PVRDMA-DVS",并选择版本 6.5.0 或 6.6.0。
  4. 选择要添加的主机,并配置上行链路。
  5. 单击 Finish。

配置 ESXi 主机以使用 PVRDMA

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

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

标记 VMkernel 适配器以用于 PVRDMA

要标记 VMkernel 适配器,请选择它并启用 PVRDMA 通信:

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

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

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

  4. 输入要使用的 VMkernel 适配器 的值,然后单击 OK。

    Tag PVRDMA 1.PNG Tag PVRDMA.PNG

    在此示例中,使用了 vmk2。

可选: 要标记在 DVS 上创建并由 VRDMA 用于 TCP 通道的 vmknic,可以使用 ESXi CLI 运行以下命令行:

ESXi 控制台

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

启用 PVRDMA 的防火墙规则

要在 ESXi 主机的安全配置文件中启用 PVRDMA 的防火墙规则:

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

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

  3. 转到 Security Profile → Firewall(6.7) 或 Firewall(6.5) 部分,然后单击 Edit。

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

    Firewall rules PVRDMA.PNG

  5. 单击 OK 完成。

可选: 您可以使用 ESXi CLI 启用 pvrdma 防火墙规则(或禁用防火墙),命令行如下:

ESXi 控制台

esxcli network firewall ruleset set -e true -r pvrdma

将 PVRDMA 适配器分配给虚拟机

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

  1. 在 vSphere Web Client 中找到 VM。

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

  3. 单击 Virtual Machines,然后从列表中双击 VM。

  4. 关闭 VM 电源。

  5. 在 VM 的 Configure 选项卡中,展开 Settings 子标题,然后选择 VM Hardware。

  6. 单击 Edit,然后在显示设置的对话框中选择 Virtual Hardware 选项卡。

    PVRDMA adapter to VM.PNG

  7. 在窗口底部,在 New device 旁边,选择 Network,然后单击 Add。

    image2019-8-22_18-57-25.png

  8. 展开 New Network 部分,将 VM 连接到分布式端口组。 对于适配器类型,选择 PVRDMA。

    image2019-8-22_18-58-40.png

  9. 展开 Memory 部分,勾选 Reserve all guest memory (All locked) 旁边的框。

    image2019-8-22_18-59-22.png

  10. 单击 OK 关闭对话框窗口。

  11. 打开虚拟机电源。

配置客户机操作系统以使用 PVRDMA

此步骤的先决条件是将 PVRDMA 适配器分配给运行 CentOS 7.2 或更高版本以及 Ubuntu 18.04 的虚拟机。

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

客户机操作系统:CentOS 7.3 及更高版本
VM 硬件版本 14
ESXi v6.7
客户机操作系统:CentOS 7.2
VM 硬件版本 13
ESXi v6.5
1. 创建 VM 兼容性版本为 14 的 VM,并安装 CentOS 7.3 或更高版本。
2. 从 vCenter 通过 DVS 端口组添加 PVRDMA 适配器。
3. 安装 InfiniBand 包,并使用以下命令行重新加载 pvrdma 驱动程序:
VM 控制台
```
yum groupinstall "Infiniband Support" –y
rmmod vmw_pvrdma
modprobe vmw_pvrdma
ibv_devinfo
```1. 创建 VM 兼容性版本为 13 的 VM,并安装 CentOS 7.2。
2. 从 vCenter 通过 DVS 端口组添加 PVRDMA 适配器。
3. 使用以下命令行安装 InfiniBand 驱动程序:
VM 控制台
```
yum groupinstall "Infiniband Support" –y

安装 pvrdma 驱动:

**VM Console**

```bash
tar xf vrdma_ib_devel.tar
cd vrdma_ib_devel/
make
cp pvrdma.ko /lib/modules/3.10.0-327.el7.x86_64/extra/
depmod –a
modprobe pvrdma

安装 vrdma 库:

VM Console

cd /tmp/
tar xf libvrdma_devel.tar
cd libvrdma_devel/
./autogen.sh
./configure --libdir=/lib64
make
make install
cp pvrdma.driver /etc/libibverbs.d/
rmmod pvrdma
modprobe pvrdma
ibv_devinfo

对于 Guest OS:Ubuntu 18.04,VM hardware version 14,ESXi v6.7,vmw_pvrdma 驱动应已包含在 18.04 中。用户级库可通过以下命令安装:

VM Console

apt-get install rdma-core
reboot

注意: 如果 VM 兼容版本与上述不匹配,请在 ESXi 6.5 中将 VM 兼容性升级到版本 13,在 ESXi 6.7 中升级到版本 14。

部署验证

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

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

安装并运行基准测试:

  1. 安装 Perftest:

    VM Console

    yum install git
    git clone https://github.com/linux-rdma/perftest.git
    cd perftest/
    yum install autotools-dev automake
    yum install libtool
    yum install libibverbs-devel
    ./autogen.sh
    ./configure
    make -j 8
    
  2. 检查网络接口名称:

    VM Console

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

    Add to file

    HWADDR=00:50:56:aa:65:92
    DNS1=192.168.1.21
    DOMAIN=vwd.clx
    BOOTPROTO="static"
    NAME="ens224f0"
    DEVICE="ens224f0"
    ONBOOT="yes"
    USERCTL=no
    IPADDR=192.168.11.51
    NETMASK=255.255.255.0
    PEERDNS=no
    IPV6INIT=no
    IPV6_AUTOCONF=no
    ping 192.168.11.51
    

对第二个 VM 重复步骤 1-3。

在第一个 VM("Server")上运行以下命令:

VM01 "Server" Console

systemctl disable firewall
systemctl stop firewalld
systemctl disable firewalld
firewall-cmd --state
./ib_write_bw -x 0 -d vmw_pvrdma0 --report_gbits

在第二个 VM("Client")上运行以下命令:

VM02 "Client" Console

./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[MB/sec] BW average[MB/sec] MsgRate[Mpps]
65536  5000          90.56           90.39            0.172405
-------------------------------------------------------------------------------- -------

完成!

作者

BK.jpgBoris Kovalev

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