在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 来提高网络性能。

pvrdma_intro

我们今天介绍一下,在ESXi 7.0 环境当中,使用Marvell Fastlinq QL41000 系列网卡,实现 PVRDMA 通讯。两台ESXi 主机上,分别创建1个VM 虚机,然后这两个VM 之间可以通过PVRDMA 进行数据交互。

环境准备

  • 2台服务器
  • 2片QL41262 网卡
  • VMware ESXi 7.0
  • vCenter

pvrdma_topo

拓扑比较简单,两台服务器,每台服务器上,一张千兆网卡,一张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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

[root@localhost:~] cd /tmp
[root@localhost:/tmp] ls
MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680-package.zip
[root@localhost:/tmp] unzip MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680-package.zip
Archive: MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680-package.zip
inflating: MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680.zip
inflating: doc/README.txt
inflating: doc/release_note_qedrntv_3.40.28.0-1OEM.700.1.0.15843807.txt
inflating: doc/release_note_qedentv_3.40.30.0-1OEM.700.1.0.15843807.txt
inflating: doc/release_note_qedi_2.19.51.0-1OEM.700.1.0.15843807.txt
[root@localhost:/tmp]
[root@localhost:/tmp] ls
MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680-package.zip doc
MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680.zip
[root@localhost:/tmp]
[root@localhost:/tmp] esxcli software component apply -d /tmp/MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680.zip
Installation Result
Components Installed: MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807
Components Removed: MRVL-E4-CNA-Driver-Bundle_5.0.219.0-1OEM.700.1.0.15843807
Components Skipped:
Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
Reboot Required: true
[root@localhost:/tmp]


安装完驱动,先不要着急重启生效,我们要先修改一下驱动参数配置,来开启网卡驱动的RDMA 功能。否则在ESXi 主机配置当中,你会只能看到普通的物理网卡,在RDMA网卡项目当中,系统会看不到对应项目。这里使用esxcfg-module 命令,将QL41000/QL45000 系列网卡的RoCE 功能打开:

1
2
3
[root@localhost:/tmp] esxcfg-module -s 'enable_roce=1' qedentv


好了,到了这里,直接重启 ESXi 服务器即可。服务器重启之后,可以看到RDMA网卡这里,已经可以看到25G 端口是active 的状态。

nic_status

ESXi 主机设置

以下设置均采用vCenter 的GUI 界面配置。

基本网络设置

因为每台服务器是双网卡,1张千兆网卡作为管理网口,25G网卡作为业务网卡。所有先为25G网卡创建新的vswitch:

add_networking_pic1

依次选择 VMKernel Network Adapter -> New standards switch -> Assigned adapters:

add_networking_pic2

在第3步,选择25G网卡的端口,点击“绿色加号”图标,然后在下面列表当中选择25G端口。

add_networking_pic3

在第4步,填写VMkernel 名称:

add_networking_pic4

然后在第5步的时候,设置一个IP:

add_networking_pic5

一路确认完毕之后,在设置当中可以看到生效了,设备名称是vmk1:

add_networking_pic6

创建 vDS 交换机

在datacenter 图标上面右键,选择“distributed switch” 下面的”New Distributed Switch”

creat_vds_pic1

起个名字: DSwitch_PVRDMA

creat_vds_pic2

第2步选择版本,我这里是7.0;

第3步选择端口数量,默认是4,然后给Port Group起名:

creat_vds_pic3

然后一路Next结束,此时在datacenter当中的networking选项当中已经可以看到它了。

creat_vds_pic4

添加主机到 vDS

直接在vDS的图标上右键,选择 “Add and Manager Host”:

add_host_vds_pic1

第1步选择添加:

add_host_vds_pic2

第2步选择host 主机;

第3步选择主机上的网卡端口,本次测试选择25G网卡端口,如果网卡端口较多,可以通过上面的“View Settings” 来看一下网卡端口详细信息,避免错选。

add_host_vds_pic3

确认网卡之后,点击“Assign Uplink”,把刚才选择的25G端口设为Uplink1 .

然后界面会更新,你刚刚选择的端口后面会出现(Assigned)标识。

add_host_vds_pic4

第4步,将刚才在2.4步骤当中的vmk1, 加入到vDS的port group

add_host_vds_pic5

完成后可看到会在vmk1 后面显示(Reassigned),这是因为把它从一个port group 指定到了新的group。

add_host_vds_pic6

然后一路Next,结束配置。

ESXi 主机的高级系统配置

刚才设置完成了vDS,我们需要在ESXi 主机配置当中继续完成相关设定。

在Configure 菜单中,左侧选择System 下面的Advanced System Settings . 这里列出了ESXi 系统的详细设置。

esxi_host_pvrdma_pic1

我们直接点击右面蓝色的Edit 按钮,然后在文本过滤框中输入net.pv ,它会筛选出唯一的设置项目: Net.PVRDMAVmknic

esxi_host_pvrdma_pic2

在Value 框中,直接输入刚才的25G 网卡 vmk1,然后OK保存。

ESXi 主机的防火墙配置

还是在Configure->System 栏目下,选择Firewall. 和上面一样,选择Edit,然后在过滤搜索当中输入pv,会看到pvrdma的端口值,勾选前面的框,然后OK 保存。

esxi_host_firewall_pic1

创建VM虚拟机,并分配网卡

此时在ESXi 主机当中创建新的VM,一路按照默认,我这里的Guest OS 是CentOS 7.7.

创建完成之后,先进行配置。在VM上面右键,选择“Edit Settings”

vm_config_pic1

首先将内存设置展开,然后勾选“Reserve all guest memory” 。

vm_config_pic2

然后添加一块网卡,并展开新网卡的设置。点开网卡类型“VM Network”,选择Browse

vm_config_pic3

选择之前创建的vDS 网络

vm_config_pic4

然后再把类型选为PVRDMA

vm_config_pic5

完成设置,OK 保存。

虚机安装Linux CentOS 7.7

给虚机安装Linux 系统,过程略。

虚机 CentOS 设置

加载PVRDMA驱动模块

首先通过yum安装相关的依赖包

1
2
3
4
yum install rdma-core
yum install perftest
yum install libibverbs-utils
yum install infiniband-diags

此时可以通过ibv_devinfo 命令查看RDMA端口状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost ~]# ibv_devinfo
hca_id: vmw_pvrdma0
transport: InfiniBand (0)
fw_ver: 3.0.000
node_guid: 0050:5600:0090:1fcf
sys_image_guid: 0000:0000:0000:0000
vendor_id: 0x15ad
vendor_part_id: 2080
hw_ver: 0x1
board_id: 1
phys_port_cnt: 1
port: 1
state: PORT_ACTIVE (4)
max_mtu: 4096 (5)
active_mtu: 1024 (3)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: Ethernet

[root@localhost ~]#

如果状态不是上面的情况,端口状态不是PORT_ACTIVE,则运行下面命令,重新加载相关模块。

1
2
3
modprobe -r vmw_pvrdma         //卸载pvrdma 驱动模块
modprobe -v vmw_pvrdma //加载pvrdma 驱动模块

关闭防火墙

在开始PVRDMA测试前,设置CentOS 的防火墙等系统服务:

首先关闭防火墙和网络配置服务

1
2
service firewalld stop
service NetworkManager 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

可以看到结果

pvrdma_test_pic1

同理可以进行延迟测试:

在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 

pvrdma_test_pic2