首先,安装虚拟机,安装完成之后,查看虚拟机是否支持RoCE功能:
如果是m或者y,表示当前内核支持RDMA。
安装如下的几个安装包:
sudo apt-get install libibverbs1 ibverbs-utils librdmacm1 libibumad3ibverbs-providers rdma-core
软件包名 | 主要功能 |
libibverbs1 | ibverbs动态链接库 |
ibverbs-utils | ibverbs示例程序 |
librdmacm1 | rdmacm动态链接库 |
libibumad3 | ibumad动态链接库 |
ibverbs-providers | ibverbs各厂商用户态驱动(包括RXE) |
rdma-core | 文档及用户态配置文件 |
使用dkpg命令查看各个安装软件包里边都包含哪些内容?
安装完上述软件之后,可以通过:
Ibv_devices命令查看有没有报错:
安装ipRoute2:
sudo apt-get install iproute2
安装perftest:
sudo apt-get install perftest
需要安装的包已经完毕,这时候,将虚拟机切换网络模式:
更改VMNet1网卡的IP地址:
能够双向ping通:
然后进行用户态配置,其中rxe_0是你希望的RDMA的设备名,可任意取名。ens33为Soft-RoCE设备所绑定的网络设备名,也就是我们刚才ifconfig看到的网卡名,每个虚拟机可能都不一样。
通过rdma 工具查看是否添加成功:
通过ibv_devices命令进行查看:
查看这个设备的信息:
执行perf_test命令进行测试:
Client端向Server端发送了一个SEND操作:
接下来进行一个抓包实验:
其中Protocol为RRoCE,意为Routable RoCE。
点开其中的一个数据包:
从外到内依次是:物理层-->以太网链路层-->IPv4网络层-->UDP传输层-->IB传输层-->数据
关注一下IB层的结构:
可以看到例子中使用的是RC类型的连接,进行了SEND操作。
目的Queue Pair是:0x000011
观察传输流程,可以看到数据包发送完毕之后会有一个ack的流程: