如何在 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
参考资料
- 什么是 RDMA?
- 虚拟机的远程直接内存访问
- PVRDMA 支持
- ConnectX® Ethernet Driver for VMware® ESXi Server
- 操作指南:在 VMware ESXi 6.7/7.0 及以上版本上升级 NVIDIA ConnectX 驱动程序
组件概述
vSphere Distributed Switch
vSphere Distributed Switch 提供对所有与该交换机关联的主机的网络配置的集中管理和监控。您必须在 vCenter Server 系统上设置分布式交换机,其设置将传播到所有与该交换机关联的主机。
半虚拟化 RDMA (PVRDMA)
直接内存访问 (DMA) - 设备直接访问主机内存的能力,无需 CPU 干预。
远程直接内存访问 (RDMA) - 在不中断系统 CPU 进程的情况下,访问远程机器内存(读、写)的能力。
RDMA 优势:
- 零拷贝 - 允许应用程序在不涉及网络软件栈的情况下执行数据传输。数据直接发送和接收到缓冲区,无需在网络层之间复制。
- 内核旁路 - 允许应用程序直接从用户空间执行数据传输,无需内核参与。
- CPU 卸载 - 允许应用程序访问远程内存,而无需消耗远程服务器上的任何 CPU 时间。远程内存服务器将在没有远程进程(或处理器)干预的情况下被读取。此外,远程 CPU 的缓存不会填充被访问的内存内容。
PVRDMA 架构

加速 VM 数据

解决方案概述
设置

解决方案逻辑设计

物料清单

解决方案物理网络布线

配置
网络配置
下表提供了 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 主机配置
检查主机配置:
-
启用对 ESXi 服务器的 SSH 访问。
-
使用 root 权限登录 ESXi vSphere 命令行界面。
-
验证主机是否配备了 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。
-
验证逻辑 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:
-
启动 vSphere Web Client,并连接到 vCenter Server 实例。
-
在 vSphere Web Client 主屏幕上,从左侧列表中选择 vCenter 对象。将鼠标悬停在“分布式交换机”上,然后单击“新建分布式交换机”图标(见下图):
这将启动新建 vDS 向导。
-
为新的分布式交换机提供名称,并选择 vCenter 清单中要存储新 vDS 的位置(数据中心对象或文件夹)。单击“下一步”。
-
选择要创建的 vDS 版本:
-
将上行链路端口数设置为 2。勾选“创建默认端口组”框,并为该组命名:
-
单击“下一步”完成。
向 vDS 添加主机
要将 ESXi 主机添加到现有 vDS:
-
启动 vSphere Web Client,并连接到 vCenter Server 实例。
-
导航到分布式交换机列表。
-
从右侧对象列表中选择新的分布式交换机,然后从“操作”菜单中选择“添加和管理主机”:
-
单击“添加主机”按钮,然后单击“下一步”:
-
单击“新主机”选项(绿色加号图标)以添加 ESXi 主机。
这将打开“选择新主机”对话框。
-
从新主机列表中,勾选要添加到 vDS 的 ESXi 主机名称旁边的框。
完成后单击“确定”,然后单击“下一步”继续。
-
在下一个屏幕中,确保同时勾选“管理物理适配器”和“管理 VMkernel 适配器”复选框。单击“下一步”继续。
-
将每个 ESXi 主机中的 vmnic2 配置为 vDS 的 Uplink 1:
-
创建 VMkernel 适配器 vmk2 并将其连接到 sl01-w01-vds02-pvrdma vDS 端口组。单击绿色加号图标,然后选择现有网络之一。单击“确定”。
单击“下一步”。
-
为 vmk2 VMkernel 适配器提供 IPv4 地址和子网掩码:
-
单击“下一步”直到向导完成:
如何在 VMware vSphere 6.5 和 6.7 中配置 PVRDMA
创建分布式虚拟交换机 (DVS)
- 在 vSphere Web Client 中,导航到数据中心。
- 在 Networking 部分,右键单击数据中心并选择 Distributed Switch > New Distributed Switch。
- 输入 DVS 的名称,例如 "PVRDMA-DVS",并选择版本 6.5.0 或 6.6.0。
- 选择要添加的主机,并配置上行链路。
- 单击 Finish。
配置 ESXi 主机以使用 PVRDMA
要在 vSphere 6.5/6.7 中使用 PVRDMA,您的环境必须满足多个配置要求。
要配置 ESXi 主机以使用 PVRDMA,请执行以下步骤。
标记 VMkernel 适配器以用于 PVRDMA
要标记 VMkernel 适配器,请选择它并启用 PVRDMA 通信:
-
在 vSphere Web Client 中,导航到主机。
-
在 Configure 选项卡上,展开 System 子标题,然后单击 Advanced System Settings。
-
找到 Net.PVRDMAvmknic 并单击 Edit。
-
输入要使用的 VMkernel 适配器 的值,然后单击 OK。
在此示例中,使用了 vmk2。
可选: 要标记在 DVS 上创建并由 VRDMA 用于 TCP 通道的 vmknic,可以使用 ESXi CLI 运行以下命令行:
ESXi 控制台
esxcli system settings advanced set -o /Net/PVRDMAVmknic -s vmk2
启用 PVRDMA 的防火墙规则
要在 ESXi 主机的安全配置文件中启用 PVRDMA 的防火墙规则:
-
在 vSphere Web Client 中,导航到主机。
-
在 Configure 选项卡上,展开 System 子标题。
-
转到 Security Profile → Firewall(6.7) 或 Firewall(6.5) 部分,然后单击 Edit。
-
滚动到 pvrdma 规则,并勾选旁边的相关框:
-
单击 OK 完成。
可选: 您可以使用 ESXi CLI 启用 pvrdma 防火墙规则(或禁用防火墙),命令行如下:
ESXi 控制台
esxcli network firewall ruleset set -e true -r pvrdma
将 PVRDMA 适配器分配给虚拟机
要使虚拟机能够使用 RDMA 交换数据,必须将 VM 与 PVRDMA 网络适配器关联。操作步骤如下:
-
在 vSphere Web Client 中找到 VM。
-
选择数据中心、文件夹、集群、资源池或主机,然后单击 VMs 选项卡。
-
单击 Virtual Machines,然后从列表中双击 VM。
-
关闭 VM 电源。
-
在 VM 的 Configure 选项卡中,展开 Settings 子标题,然后选择 VM Hardware。
-
单击 Edit,然后在显示设置的对话框中选择 Virtual Hardware 选项卡。
-
在窗口底部,在 New device 旁边,选择 Network,然后单击 Add。

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

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

-
单击 OK 关闭对话框窗口。
-
打开虚拟机电源。
配置客户机操作系统以使用 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.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 编写的测试,旨在用作性能微基准测试。
这些测试可用于硬件或软件调优,以及功能测试。
安装并运行基准测试:
-
安装 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 -
检查网络接口名称:
VM Console
ifconfig ... ens224f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 -
为网络接口添加静态 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
-------------------------------------------------------------------------------- -------
完成!
作者
![]() |
Boris KovalevBoris Kovalev 过去几年一直担任解决方案架构师,专注于 NVIDIA Networking/Mellanox 技术,负责复杂的机器学习、大数据和基于 VMware 的高级云研究与设计。Boris 曾在多家公司担任高级顾问和解决方案架构师超过 20 年,最近在 VMware 工作。他在 NVIDIA 文档网站上撰写了多篇参考设计,涵盖 VMware、机器学习、Kubernetes 和容器解决方案。 |


