在ESXi 7.0 当中测试PVRDMA
RDMA 的全称是 Remote Direct Memory Access (远程内存直接访问),它是一种性能加速技术,通过网卡来直接访问另一台服务器上的内存,而不需要 CPU 的介入。而虚拟化环境当中,虚机使用 HCA 提供的 RDMA 有两种方式,一种就是直通方式,虚机独占使用 HCA,这就是我们第2种测试场景中的网络配置;另一种是虚拟化方式 PVRDMA (Paravirtual RDMA),是 VMware 对于 RDMA 技术的半虚拟化实现,vSphere 会在虚机中提供 PVRDMA 虚拟网卡,再通过 VMkernel 中的 PVRDMA 堆栈来访问 HCA,这种方式可以让多个虚机共享 HCA 设备,并且虚机之间可以利用HCA 来提高网络性能。
我们今天介绍一下,在ESXi 7.0 环境当中,使用Marvell Fastlinq QL41000 系列网卡,实现 PVRDMA 通讯。两台ESXi 主机上,分别创建1个VM 虚机,然后这两个VM 之间可以通过PVRDMA 进行数据交互。
环境准备
- 2台服务器
- 2片QL41262 网卡
- VMware ESXi 7.0
- vCenter
拓扑比较简单,两台服务器,每台服务器上,一张千兆网卡,一张QL41262 双口25G网卡。连接1G 千兆端口到管理网络,连接1个25G 端口到25G交换机,作为PVRDMA的测试网络。vCenter 服务器也连接在管理网络当中。
Marvell Fastlinq 网卡驱动版本
请访问下面 VMware 的官方网站, 然后点击展开 “Driver CD”,会根据时间最新的顺序,列出各个硬件厂商的VMware 驱动。
https://my.vmware.com/en/web/vmware/downloads/info/slug/datacenter_cloud_infrastructure/vmware_vsphere/7_0#drivers_tools
我们这里选择 “VMware ESXi7.0 NIC/iSCSI/FCoE Drivers for Marvell FastLinQ Ethernet 45000 & 41000 Series Controller” 的相关驱动即可。发布这篇文章的时候,最新的Fastlinq 驱动是 2021-02-23 发布的,点击“转至下载”会列出详细驱动版本信息。其中驱动模块版本信息如下:
qedentv-3.40.30.0
qedrntv-3.40.28.0
更新驱动
首先下载 MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680-package.zip 驱动包,然后上传到ESXi 主机的 /tmp 目录。解压zip包,得到驱动文件(也是一个.zip文件)和驱动的介绍文档目录,然后使用esxcli software 命令来安装驱动文件即可。这里注意一下,在使用esxcli 命令安装指定驱动文件时,必须使用完整地址路径,如果省略了完整路径,系统会报错。
1 |
|
安装完驱动,先不要着急重启生效,我们要先修改一下驱动参数配置,来开启网卡驱动的RDMA 功能。否则在ESXi 主机配置当中,你会只能看到普通的物理网卡,在RDMA网卡项目当中,系统会看不到对应项目。这里使用esxcfg-module 命令,将QL41000/QL45000 系列网卡的RoCE 功能打开:
1 | [root@localhost:/tmp] esxcfg-module -s 'enable_roce=1' qedentv |
好了,到了这里,直接重启 ESXi 服务器即可。服务器重启之后,可以看到RDMA网卡这里,已经可以看到25G 端口是active 的状态。
ESXi 主机设置
以下设置均采用vCenter 的GUI 界面配置。
基本网络设置
因为每台服务器是双网卡,1张千兆网卡作为管理网口,25G网卡作为业务网卡。所有先为25G网卡创建新的vswitch:
依次选择 VMKernel Network Adapter -> New standards switch -> Assigned adapters:
在第3步,选择25G网卡的端口,点击“绿色加号”图标,然后在下面列表当中选择25G端口。
在第4步,填写VMkernel 名称:
然后在第5步的时候,设置一个IP:
一路确认完毕之后,在设置当中可以看到生效了,设备名称是vmk1:
创建 vDS 交换机
在datacenter 图标上面右键,选择“distributed switch” 下面的”New Distributed Switch”
起个名字: DSwitch_PVRDMA
第2步选择版本,我这里是7.0;
第3步选择端口数量,默认是4,然后给Port Group起名:
然后一路Next结束,此时在datacenter当中的networking选项当中已经可以看到它了。
添加主机到 vDS
直接在vDS的图标上右键,选择 “Add and Manager Host”:
第1步选择添加:
第2步选择host 主机;
第3步选择主机上的网卡端口,本次测试选择25G网卡端口,如果网卡端口较多,可以通过上面的“View Settings” 来看一下网卡端口详细信息,避免错选。
确认网卡之后,点击“Assign Uplink”,把刚才选择的25G端口设为Uplink1 .
然后界面会更新,你刚刚选择的端口后面会出现(Assigned)标识。
第4步,将刚才在2.4步骤当中的vmk1, 加入到vDS的port group
完成后可看到会在vmk1 后面显示(Reassigned),这是因为把它从一个port group 指定到了新的group。
然后一路Next,结束配置。
ESXi 主机的高级系统配置
刚才设置完成了vDS,我们需要在ESXi 主机配置当中继续完成相关设定。
在Configure 菜单中,左侧选择System 下面的Advanced System Settings . 这里列出了ESXi 系统的详细设置。
我们直接点击右面蓝色的Edit 按钮,然后在文本过滤框中输入net.pv ,它会筛选出唯一的设置项目: Net.PVRDMAVmknic
在Value 框中,直接输入刚才的25G 网卡 vmk1,然后OK保存。
ESXi 主机的防火墙配置
还是在Configure->System 栏目下,选择Firewall. 和上面一样,选择Edit,然后在过滤搜索当中输入pv,会看到pvrdma的端口值,勾选前面的框,然后OK 保存。
创建VM虚拟机,并分配网卡
此时在ESXi 主机当中创建新的VM,一路按照默认,我这里的Guest OS 是CentOS 7.7.
创建完成之后,先进行配置。在VM上面右键,选择“Edit Settings”
首先将内存设置展开,然后勾选“Reserve all guest memory” 。
然后添加一块网卡,并展开新网卡的设置。点开网卡类型“VM Network”,选择Browse
选择之前创建的vDS 网络
然后再把类型选为PVRDMA
完成设置,OK 保存。
虚机安装Linux CentOS 7.7
给虚机安装Linux 系统,过程略。
虚机 CentOS 设置
加载PVRDMA驱动模块
首先通过yum安装相关的依赖包
1 | yum install rdma-core |
此时可以通过ibv_devinfo 命令查看RDMA端口状态:
1 | [root@localhost ~]# ibv_devinfo |
如果状态不是上面的情况,端口状态不是PORT_ACTIVE,则运行下面命令,重新加载相关模块。
1 | modprobe -r vmw_pvrdma //卸载pvrdma 驱动模块 |
关闭防火墙
在开始PVRDMA测试前,设置CentOS 的防火墙等系统服务:
首先关闭防火墙和网络配置服务
1 | service firewalld stop |
然后配置网卡IP。可以看到VM当中有两个网卡,一个是千兆网卡,我这里的IP端是10.x.x.x,另外为25G网卡设置IP 地址为 192.168.0.20/24 (VM20) 192.168.0.30/24 (VM30)
pvrdma 测试
在192.168.0.20 和192.168.0.30 可以互相ping 通,且ibv_devinfo 状态也都是正常后,我们可以开始PVRDMA 测试了:
在VM20 虚机上:
启动ib_write_bw 命令进行带宽测试
1 | ib_write_bw -x 1 -d vmw_pvrdma0 --report_gbits |
在VM30 虚机上:
前面设置与VM20 相同,25G网卡设置IP 为 192.168.0.30/24
启动ib_write_bw 测试命令:
1 | ib_send_bw -x 1 -d vmw_pvrdma0 --report_gbits 192.168.0.20 |
可以看到结果
同理可以进行延迟测试:
在VM20 虚机上:
启动ib_write_lat 命令
1 | ib_write_lat -x 1 -d vmw_pvrdma0 -a -F |
在VM30 虚机上:
1 | ib_write_lat -x 1 -d vmw_pvrdma0 -a -F 192.168.0.20 |