SoftRoCE实践
简介
SoftRoCE是RDMA的一种纯软件实现的方式,因此不需要特定的硬件支持,但是其性能与硬件支持的RDMA还是有一些差距的。通过softRoCE我们可以在传统的以太网进行RoCE通信。自4.9.0之后的内核已经内置sofrRoCE驱动,我们直接使用即可。
环境搭建
- 实验环境
| Server | Client |
|---|---|
| ubuntu 18.04 | ubuntu 18.04 |
| kernel 5.4.0 | kernel 5.4.0 |
| x86 | x86 |
- 安装相关软件
sudo apt-get install libibverbs-dev librdmacm-dev rdma-core
#备注
- libibverbs-dev - Development files for the libibverbs library
- librdmacm-dev - Development files for the librdmacm library
- rdma-core - RDMA core userspace infrastructure and documentation
联通测试
1.在server端和client端创建RoCE interface:
sudo rxe_cfg start
sudo rxe_cfg add enp3s0
成功后出现:
2. 测试前准备
查看rdma设备:
ibv_devices
ibv_devinfo
3.开始测试
采用rping命令
#server:
rping -s -a [server-ip] -v -C 10
#client:
rping -c -a [server-ip] -v -C 10
测试结果(server):

采用ibv_rc_pingpong命令
#server:
ibv_rc_pingpong -g 2 -d rxe0
#client:
ibv_rc_pingpong -g 2 -d rxe1 [server-ip]
测试结果(server):

备注:
-g是设置网口的GID值,其要正确设置,否则会出现不能通信的问题。这里的设置正确是指客户端和服务端的GID的类型要统一,比如:
两者要么都是:GID fe80::6977:7a66:fa55:5334 这种格式,要么都是:GID ::ffff:192.168.50.59 这种格式,在不同的电脑上设置-g 1 或者 -g 2 出现的格式可能会不一样,所以我们需要通过灵活设置GID的值使二者的格式相同。
-d是设置具体的RDMA设备,该值可由sudo rxe_cfg status得出:

由上图可见,RDMA设备值为rxe0
对GID的解释:
每当以太网设备的一个网络端口配置了一个IP地址时,就会在GID表格中创建一个表项。每个表项包含:GID值,GID类型,网络设备。对于两种模式都支持的设备端口,表中会存在两个GID,有相同的值,但是类型不同。表项中的网络设备是该GID关联的以太网设备的IP地址。
GID格式有可以有两种:IPv4和IPv6。IPv4版本的GID是一个IPv4映射的IPv6地址,而IPv6版本的GID是IPv6地址本身。对于RoCEv2,关联到IPv4版本GID的三层网络包,其头三层头部是IPv4,IPv6亦然。对于RoCEv1,关联到IPv6或IPv4版本GID的网络包,头部是IPv6或者GRH。
GID表格项的总数等于N(K+1), N是赋予给所有网络设备上关联端口的IP地址数量,包括VLAN设备,别名设备,和bonding master。链路本地的IPv6地址被排除在这个计数之外,因为它们的GID总是存在的,是默认的GID,处于每个GID表格的开始。K是支持的RoCE类型数量。每个硬件端口的表格项数量限制在128。show_gids命令可以查看系统中的GID表。
在系统文件sysfs中查看GID的路径是:
GID值:/sys/class/infinband//ports//gids/
GID类型:/sys/class/infinband//ports//gid_attrs/types/
GID网络设备:/sys/class/infinband//ports//gid_attrs/ndevs/
参考来源
SoftRoCE带宽测试
- 安装测试软件
sudo apt-get install perftest
- 开始测试
server:
ib_send_bw -n 10000 -d rxe0 -i 1 -F --report_gbits
client:
ib_send_bw -n 10000 -d rxe0 -i 1 -F --report_gbits [server-ip]
- 测试结果(server端):

传统以太网带宽测试
1. iperf
参考:iperf使用指南
- 安装测试软件
sudo apt-get install iperf
- 开始测试
server:
iperf -s -i 1 -f m
client:
iperf -c [server-ip] -i 1 -t 30 -f m
- 测试结果(server)

2. qperf
- 安装
sudo apt-get install qperf
- 使用
#server
qperf
#client
#直接测试TCP的带宽和延迟
qperf [server-ip] tcp_bw tcp_lat conf
#改变消息大小,从1Byte到64K,每次倍增的方式,通过测试查看带宽和延迟的变化情况
qperf myserver -oo msg_size:1:64K:*2 -vu tcp_lat tcp_bw