测试环境信息
在ubuntu20.04.6 LTS (Focal Fossa)上建立RXE学习环境。
安装工具和依赖
sudo apt install automake libtool
sudo apt install libibverbs-dev libibmad-dev librdmacm-dev libibumad-dev libpci-dev
sudo apt-get install libibverbs1 ibverbs-utils librdmacm1 libibumad3 ibverbs-providers rdma-core perftest infiniband-diags
创建RXE RDMA设备
RXE是RoCEv2的软件实现,它基于UDP协议,使用普通网卡收发IB报文,所以IB设备需要和网卡绑定。首先确认网卡名字,这里使用enp3s0这张网卡,执行如下命令建立RXE设备连接。
sudo modprobe rdma_rxe rdma_cm ib_umad
sudo rdma link add rxe_0 type rxe netdev enp3s0
测试RXE设备
server执行:
$ ib_send_bw -d rxe_0
client执行:
$ ib_send_bw -d rxe_0 localhost
RXE驱动架构
为了提高驱动程序的安全性、灵活性、性能和兼容性,RDMA实现包含KMD 和 UMD 两个重要组件,它们分别负责不同的任务和运行在不同的模式下。RXE是RDMA的软件实现,当然也要符合RDMA驱动的一般设计规则。
RXE的用户态代码路径:rdma-core/providers/rxe/
RXE的内核代码路径:kernel/driver/infiniband/sw/rxe/
总结
RXE的RDMA实现很早就开源在内核主线,想要深入理解RDMA工作原理结合测试用例分析内核代码实现。