Skip to main content
开放网络的先行者与推动者—星融元
加入我们技术支持(Support)  TEL:(+86)4000989811
Soft-RoCE

部署教程:在VM上进行Soft-RoCE的功能验证与性能测试

1 概述

2 硬件与软件环境

3 验证思路及过程

3.1 验证思路

3.2 验证过程

3.2.1 配置部署Soft-RoCE

3.2.2 配置部署MPI环境

3.2.3 安装性能测试工具

3.2.4 进行性能对比测试

3.2.5 进行可用性测试

4 总结

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所示。

配置信息备注
CPU8 vCPUs
内存8 GB
硬盘100GB
网卡10GE
表2-1:虚拟机配置
软件版本备注
系统Rocky Linux 8.5
iperf33.5
perftest23.04.0.0.23
OpenMPI4.1.1
OSU Micro-Benchmarks5.6.3
表2-2:软件环境

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左右。

A-lab-云网络, A-lab-部署验证

对星融元产品感兴趣?

立即联系!

返回顶部

© 星融元数据技术(苏州)有限公司 苏ICP备17070048号-2