如何在 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-01 sl01w01esx21 none
ESXi-02 sl01w01esx22 none
ESXi-03 sl01w01esx23 none
ESXi-04 sl01w01esx24 none

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

VM 服务器名称 IP 和网卡
高速以太网网络
VM-01 pvrdma-vm01 192.168.11.51
VM 名称 主机名 IP 地址 管理网络
VM-01 pvrdma-vm01 192.168.11.51 eno0: 来自 DHCP(保留)
VM-02 pvrdma-vm02 192.168.11.52 eno0: 来自 DHCP(保留)
VM-03 pvrdma-vm03 192.168.11.53 eno0: 来自 DHCP(保留)
VM-04 pvrdma-vm04 192.168.11.54 eno0: 来自 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 硬件版本 14ESXi v6.7 客户机操作系统:CentOS 7.2VM 硬件版本 13ESXi 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.04VM hardware version 14ESXi v6.7vmw_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.jpg Boris KovalevBoris Kovalev 过去几年一直担任解决方案架构师,专注于 NVIDIA Networking/Mellanox 技术,负责复杂的机器学习、大数据和基于 VMware 的高级云研究与设计。Boris 曾在多家公司担任高级顾问和解决方案架构师超过 20 年,最近在 VMware 工作。他在 NVIDIA 文档网站上撰写了多篇参考设计,涵盖 VMware、机器学习、Kubernetes 和容器解决方案。