部署教程:在VM上进行Soft-RoCE的功能验证与性能测试
1概述
RDMA(Remote Direct Memory Access)技术是一种基于网络的内存访问技术,它允许内存数据在计算机之间直接传输,无需CPU或操作系统的参与。目前,RDMA技术被广泛应用于超算、AI训练、存储等网络密集型场景。虽然RDMA技术的性能十分可观,但是需要专用的RDMA网卡,为了兼容普通网卡,IBTA提出了一种RDMA的软件实现方式——SoftRoCE。SoftRoCE整体由软件实现,底层使用普通的以太网卡,和硬件方案相比性能较差,但优势在于能用普通以太网卡与RDMA网卡通信。
本文档主要讲解如何在RHEL的社区发行版Rocky 8.5系统上配置部署SoftRoCE,进行TCP/IP模式和SoftRoCE模式的性能对比测试,以及是否可以正常运行MPI应用。
2硬件与软件环境
验证过程中涉及到的硬件和软件环境如表2-1和表2-2所示。
配置 | 信息 | 备注 |
CPU | 8 vCPUs | |
内存 | 8 GB | |
硬盘 | 100GB | |
网卡 | 10GE |
软件 | 版本 | 备注 |
系统 | Rocky Linux 8.5 | |
iperf3 | 3.5 | |
perftest | 23.04.0.0.23 | |
OpenMPI | 4.1.1 | |
OSU Micro-Benchmarks | 5.6.3 |
3验证思路及过程
3.1验证思路
为了验证Soft-RoCE当前版本的可用性和性能,本次验证使用了2台Linux虚拟机配置部署Soft-RoCE,并进行RDMA网卡参数配置、MPI运行环境和应用的安装配置,最后再进行性能测试。
3.2验证过程
两台Server上需要进行同样的操作,此处只展示Server1上的操作步骤。
3.2.1配置部署Soft-RoCE
# 安装Soft-RoCE
[root@server1 ~]# dnf install rdma-core iproute libibverbs libibverbs-utils infiniband-diags
[root@server1 ~]# modprobe rdma_rxe
[root@server1 ~]# lsmod | grep rxe
rdma_rxe 131072 0
ib_uverbs 159744 2 rdma_rxe,rdma_ucm
ip6_udp_tunnel 16384 1 rdma_rxe
udp_tunnel 20480 1 rdma_rxe
ib_core 393216 11 rdma_cm,rdma_rxe,rpcrdma,ib_srpt,iw_cm,ib_iser, ib_umad,ib_isert,rdma_ucm,ib_uverbs,ib_cm
# 创建Soft-RoCE接口
[root@server1 ~]# rdma link add rxe_eth0 type rxe netdev ens192
[root@server1 ~]# ibv_devices
device node GUID
------ ----------------
rxe_eth0 020c29fffee73e3f
# 尝试配置无损相关参数,发现不可配置
[root@server1 ~]# ls /sys/class/net/
ens192 lo virbr0 virbr0-nic
[root@server1 ~]# ls /sys/class/net/ens192/ -lh
total 0
-r--r--r--. 1 root root 4.0K Feb 21 16:41 addr_assign_type
-r--r--r--. 1 root root 4.0K Feb 21 16:41 address
-r--r--r--. 1 root root 4.0K Feb 21 16:41 addr_len
-r--r--r--. 1 root root 4.0K Feb 21 16:41 broadcast
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 carrier
-r--r--r--. 1 root root 4.0K Feb 21 16:41 carrier_changes
-r--r--r--. 1 root root 4.0K Feb 21 16:41 carrier_down_count
-r--r--r--. 1 root root 4.0K Feb 21 16:41 carrier_up_count
lrwxrwxrwx. 1 root root 0 Feb 21 16:41 device -> ../../../0000:0b:00.0
-r--r--r--. 1 root root 4.0K Feb 21 16:41 dev_id
-r--r--r--. 1 root root 4.0K Feb 21 16:41 dev_port
-r--r--r--. 1 root root 4.0K Feb 21 16:41 dormant
-r--r--r--. 1 root root 4.0K Feb 21 16:41 duplex
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 flags
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 gro_flush_timeout
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 ifalias
-r--r--r--. 1 root root 4.0K Feb 21 16:41 ifindex
-r--r--r--. 1 root root 4.0K Feb 21 16:41 iflink
-r--r--r--. 1 root root 4.0K Feb 21 16:41 link_mode
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 mtu
-r--r--r--. 1 root root 4.0K Feb 21 16:41 name_assign_type
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 napi_defer_hard_irqs
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 netdev_group
-r--r--r--. 1 root root 4.0K Feb 21 16:41 operstate
-r--r--r--. 1 root root 4.0K Feb 21 16:41 phys_port_id
-r--r--r--. 1 root root 4.0K Feb 21 16:41 phys_port_name
-r--r--r--. 1 root root 4.0K Feb 21 16:41 phys_switch_id
drwxr-xr-x. 2 root root 0 Feb 21 16:41 power
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 proto_down
drwxr-xr-x. 18 root root 0 Feb 21 16:41 queues
-r--r--r--. 1 root root 4.0K Feb 21 16:41 speed
drwxr-xr-x. 2 root root 0 Feb 21 16:41 statistics
lrwxrwxrwx. 1 root root 0 Feb 21 16:41 subsystem -> ../../../../../../class/net
-r--r--r--. 1 root root 4.0K Feb 21 16:41 testing
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 threaded
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 tx_queue_len
-r--r--r--. 1 root root 4.0K Feb 21 16:41 type
-rw-r--r--. 1 root root 4.0K Feb 21 16:41 uevent
3.2.2配置部署MPI环境
# 安装OpenMPI
[root@server1 ~]# dnf install openmpi openmpi-devel
[root@server1 ~]# vim .bashrc
# 配置OpenMPI的环境变量
[root@server1 ~]# export PATH=$PATH:/usr/lib64/openmpi/bin
[root@server1 ~]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib
[root@server1 ~]# source .bashr
[root@server1 ~]# mpirun --version
mpirun (Open MPI) 4.1.1
Report bugs to http://www.open-mpi.org/community/help/
# 修改主机名,配置免密登陆和Hosts
[root@server1 ~]# hostname server1
[root@server1 ~]# ssh-keygen
[root@server1 ~]# ssh-copy-id root@10.240.3.52
[root@server1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.240.3.51 server1
10.240.3.52 server2
# 测试MPI运行环境
[root@server1 ~]# mpirun --allow-run-as-root -np 2 -host server1,server2 /usr/bin/hostname
server1
server2
3.2.3安装性能测试工具
# 安装iperf3
[root@server1 ~]# dnf install iperf3
# 安装perftest
[root@server1 ~]# dnf install perftest
# 安装OSU Micro-Benchmarks
[root@server1 ~]# dnf group install "Development Tools"
[root@server1 ~]# mkdir mpi
[root@server1 ~]# cd mpi/
[root@server1 mpi]# wget http://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-5.6.3.tar.gz
[root@server1 mpi]# tar xvf osu-micro-benchmarks-5.6.3.tar.gz
[root@server1 mpi]# cd osu-micro-benchmarks-5.6.3/
[root@server1 osu-micro-benchmarks-5.6.3]# ./configure CC=mpicc CXX=mpicc
[root@server1 osu-micro-benchmarks-5.6.3]# make -j
[root@server1 osu-micro-benchmarks-5.6.3]# ls -lt mpi/pt2pt/
total 1556
-rwxr-xr-x. 1 root root 153800 Feb 27 10:41 osu_latency_mp
-rwxr-xr-x. 1 root root 162600 Feb 27 10:41 osu_latency_mt
-rwxr-xr-x. 1 root root 153744 Feb 27 10:41 osu_bibw
-rwxr-xr-x. 1 root root 153672 Feb 27 10:41 osu_multi_lat
-rwxr-xr-x. 1 root root 152408 Feb 27 10:41 osu_latency
-rwxr-xr-x. 1 root root 153472 Feb 27 10:41 osu_bw
-rwxr-xr-x. 1 root root 159712 Feb 27 10:41 osu_mbw_mr
-rw-r--r--. 1 root root 43720 Feb 27 10:41 osu_latency_mp.o
-rw-r--r--. 1 root root 73792 Feb 27 10:41 osu_latency_mt.o
-rw-r--r--. 1 root root 62176 Feb 27 10:41 osu_mbw_mr.o
-rw-r--r--. 1 root root 43128 Feb 27 10:41 osu_bibw.o
-rw-r--r--. 1 root root 42336 Feb 27 10:41 osu_bw.o
-rw-r--r--. 1 root root 42776 Feb 27 10:41 osu_multi_lat.o
-rw-r--r--. 1 root root 39320 Feb 27 10:41 osu_latency.o
-rw-r--r--. 1 root root 27797 Feb 27 10:40 Makefile
-rw-rw-r--. 1 1006 1006 28560 Jun 1 2020 Makefile.in
-rw-rw-r--. 1 1006 1006 1446 Jun 1 2020 Makefile.am
-rw-rw-r--. 1 1006 1006 5283 Jun 1 2020 osu_bibw.c
-rw-rw-r--. 1 1006 1006 4836 Jun 1 2020 osu_bw.c
-rw-rw-r--. 1 1006 1006 4439 Jun 1 2020 osu_latency.c
-rw-rw-r--. 1 1006 1006 5892 Jun 1 2020 osu_latency_mp.c
-rw-rw-r--. 1 1006 1006 9971 Jun 1 2020 osu_latency_mt.c
-rw-rw-r--. 1 1006 1006 9775 Jun 1 2020 osu_mbw_mr.c
-rw-rw-r--. 1 1006 1006 5022 Jun 1 2020 osu_multi_lat.c
3.2.4进行性能对比测试
# 使用iperf3的测试结果作为参照(在server1上运行server端,在server2上运行client端)
[root@server2 ~]# iperf3 -c 10.240.3.51
Connecting to host 10.240.3.51, port 5201
[ 5] local 10.240.3.52 port 58984 connected to 10.240.3.51 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 894 MBytes 7.50 Gbits/sec 0 844 KBytes
[ 5] 1.00-2.00 sec 906 MBytes 7.60 Gbits/sec 0 887 KBytes
[ 5] 2.00-3.00 sec 900 MBytes 7.55 Gbits/sec 0 1.20 MBytes
[ 5] 3.00-4.00 sec 915 MBytes 7.68 Gbits/sec 0 1.37 MBytes
[ 5] 4.00-5.00 sec 904 MBytes 7.58 Gbits/sec 0 1.37 MBytes
[ 5] 5.00-6.00 sec 888 MBytes 7.45 Gbits/sec 0 1.37 MBytes
[ 5] 6.00-7.00 sec 998 MBytes 8.37 Gbits/sec 0 1.37 MBytes
[ 5] 7.00-8.00 sec 859 MBytes 7.21 Gbits/sec 0 1.37 MBytes
[ 5] 8.00-9.00 sec 1.01 GBytes 8.67 Gbits/sec 0 1.37 MBytes
[ 5] 9.00-10.00 sec 914 MBytes 7.67 Gbits/sec 0 1.37 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 8.99 GBytes 7.73 Gbits/sec 0 sender
[ 5] 0.00-10.04 sec 8.99 GBytes 7.69 Gbits/sec receiver
iperf Done.
# 使用perftest进行Soft-RoCE性能测试
3.2.5进行可用性测试
# 使用iperf3的测试结果作为参照(在server1上运行server端,在server2上运行client端)
[root@server2 ~]# iperf3 -c 10.240.3.51
Connecting to host 10.240.3.51, port 5201
[ 5] local 10.240.3.52 port 58984 connected to 10.240.3.51 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 894 MBytes 7.50 Gbits/sec 0 844 KBytes
[ 5] 1.00-2.00 sec 906 MBytes 7.60 Gbits/sec 0 887 KBytes
[ 5] 2.00-3.00 sec 900 MBytes 7.55 Gbits/sec 0 1.20 MBytes
[ 5] 3.00-4.00 sec 915 MBytes 7.68 Gbits/sec 0 1.37 MBytes
[ 5] 4.00-5.00 sec 904 MBytes 7.58 Gbits/sec 0 1.37 MBytes
[ 5] 5.00-6.00 sec 888 MBytes 7.45 Gbits/sec 0 1.37 MBytes
[ 5] 6.00-7.00 sec 998 MBytes 8.37 Gbits/sec 0 1.37 MBytes
[ 5] 7.00-8.00 sec 859 MBytes 7.21 Gbits/sec 0 1.37 MBytes
[ 5] 8.00-9.00 sec 1.01 GBytes 8.67 Gbits/sec 0 1.37 MBytes
[ 5] 9.00-10.00 sec 914 MBytes 7.67 Gbits/sec 0 1.37 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 8.99 GBytes 7.73 Gbits/sec 0 sender
[ 5] 0.00-10.04 sec 8.99 GBytes 7.69 Gbits/sec receiver
iperf Done.
# 使用perftest进行Soft-RoCE性能测试
4总结
功能/可用性方面:
Soft-RoCE可以正常使用IB的性能测试工具,通过配置MPI运行环境,进行简单测试,并运行OMB性能测试工具,也能证明Soft-RoCE可以正常配置承载MPI应用。
性能方面:
由于本次的测试是在虚拟化环境中完成,性能表现情况仅供参考,这次性能测试先使用iperf3进行常规的TCP/IP协议的带宽测试,10Gbps的虚拟网口实测可以跑到8Gbps左右,作为性能参考;再使用ib_send_bw进行RoCEv2的带宽测试,实测可以跑到2Gbps左右,性能不太理想,只能跑到网口实测带宽的1/4左右。