RDMA编程环境搭建
RoCE 是三大 RDMA 协议之一,全称为 RDMA Over Converged Ethernet,即基于融合以太网的 RDMA。它是一种基于传统以太网的部分下层协议,在其基础上实现 InfiniBand 的部分上层协议。Soft-RoCE 是 RoCE 的软件实现方式,可以在低成本下完成相关 RDMA 实验
RDMA: Soft-RoCE 环境搭建实验
- RoCE 简介
RoCE 是三大 RDMA 协议之一,全称为 RDMA Over Converged Ethernet,即基于融合以太网的 RDMA。它是一种基于传统以太网的部分下层协议,在其基础上实现 InfiniBand 的部分上层协议。
RoCE 的发展历史如下:
● 1999 年,由 Compaq, Dell, HP, IBM, Intel, Microsoft 和 Sun 公司组成了 IBTA 组织。愿景是设计一种更高速的新的互联协议规范标准,来应对传统以太网在面对未来计算机行业的发展时可能遇到的瓶颈。
● 2000 年,IBTA 组织设计并发布了 Infiniband Architecture Specification 1.0(IB 规范)。
● 2007 年,IETF 发布了 iWARP(Internet Wide Area RDMA Protocol)的一系列 RFC。
● 2010 年,IBTA 发布了 RoCE v1 规范。
● 2014 年,IBTA 发布了 RoCE v2 规范。 - RoCE 的协议层次
首先是二层的以太网链路帧,然后是 IP 报文头和 UDP 报文头,最后是各层级协议的校验。而 Infiniband 传输层报文实际上是 UDP 层的负载,也就是深蓝色背景的部分。UDP 报文头中有一个字段 Destination Port Number(目的端口号),对于 RoCE v2 来说固定是 4791,当对端网卡收到报文后,会根据该字段识别是普通的以太网数据包,还是 RoCE 数据包,或者是其他协议的数据包,然后再进行解析。深蓝色背景的 IB 传输层部分又分成了 IB 报头,实际的用户数据(Payload)以及校验部分。
3. RoCE 的优势
为什么我们有了 Infiniband 协议之后,还要设计 RoCE 协议呢?最主要的原因还是成本问题:由于 Infiniband 协议本身定义了一套全新的层次架构,从链路层到传输层,都无法与现有的以太网设备兼容。也就是说,如果某个数据中心因为性能瓶颈,想要把数据交换方式从以太网切换到 Infiniband 技术,那么需要购买全套的 Infiniband 设备,包括网卡、线缆、交换机和路由器等等。商用级设备由于对可靠性有比较高的要求,所以这一套下来是非常昂贵的。
而 RoCE 协议的出现解决了这一问题,如果用户想要从以太网切换到 RoCE,那么只需要购买支持 RoCE 的网卡就可以了,线缆、交换机和路由器(RoCE v1 不支持以太网路由器)等网络设备都是兼容的——因为我们只是在以太网传输层基础上又定义了一套协议而已。
所以 RoCE 相比于 Infiniband,主要还是省钱,当然性能上相比 Infiniband 还是有一些损失,毕竟人家是全套重新设计的。
至于 iWARP,相比于 RoCE 协议栈更复杂,并且由于 TCP 的限制,只能支持可靠传输,即无法支持 UD 等传输类型。所以目前 iWARP 的发展并不如 RoCE 和 Infiniband。
4. Soft-RoCE
虽然 RoCE 相比 Infiniband 具有兼容性优势,价格也便宜,但是实际应用的时候依然需要专用的网卡支持。
RoCE 本身确实可以由软件实现,也就是本节即将介绍的 Soft-RoCE,但是商用的时候,几乎不会有人用软件实现的 RoCE。RDMA 技术本身的一大特点就是“硬件卸载”,即把本来软件(CPU)做的事情放到硬件中实现以达到加速的目的。CPU 主要是用来计算的,让它去处理协议封包和解析以及搬运数据,这是对计算资源的浪费。所以 RoCE 网卡会把 TCP/IP 协议栈放到硬件中实现以解放 CPU,让它去做更重要的事。
我们说回 Soft-RoCE,它由 IBM 和 Mellanox 牵头的 IBTA RoCE 工作组实现。本身的设计初衷有几点:
● 降低 RoCE 部署成本:Soft-RoCE 可以使不具备 RoCE 能力的硬件和支持 RoCE 的硬件间进行基于 IB 语义的交流,这样可以免于替换网络中的一些非关键节点的旧型号网卡。
● 相比 TCP 提升性能:虽然软件实现 IB 传输层带来了一定的开销,但是相比基于 Socket-TCP/IP 的传统通信方式,Soft-RoCE 因为减少了系统调用(只在软件通知硬件下发了新 SQ WQE 时才会使用系统调用),发送端的零拷贝以及接收端的只需要单次拷贝等原因,仍然带来了性能上的提升。
● 便于开发和测试 RDMA 程序:有了 Soft-RoCE,我们基于 Verbs API 编写的程序,就可以不依赖于硬件执行起来,可以很方便地运行程序。
实现原理
Soft-RoCE 就是把本来应该卸载到硬件的封包和解析工作,又拿到软件来做。其本身是基于 Linux 内核的 TCP/IP 协议栈实现的,网卡本身并不感知收发的数据包是 RoCE 报文,其驱动程序按照 IB 规范中的报文格式将用户数据封装成 IB 传输层报文,然后把报文整体当做数据填入 Socket Buffer 当中,由网卡进行下一步收发包处理。
5. 部署实验
5.1. 实验环境
本实验主要使用 Ubuntu 20.04 64 位作为系统环境,采用 2 台 2 核 4GB 云服务器作为 Soft-RoCE 的部署环境。
节点 IP 地址 RDMA 设备名
node1 172.16.16.10 node1
node2 172.16.16.6 node2
5.2. 部署 RDMA 软件栈
5.2.1. 确认当前内核是否支持 RXE
cat /boot/config-$(uname -r) | grep RXE
如果 CONFIG_RDMA_RXE 的值为 y 或者 m,表示当前的操作系统可以使用 RXE。
5.2.2. 安装用户态动态链接库
sudo apt-get install libibverbs1 ibverbs-utils librdmacm1 libibumad3 ibverbs-providers rdma-core
这几个软件包的作用如下:
软件包名 主要功能
libibverbs1 ibverbs 动态链接库
ibverbs-utils ibverbs 示例程序
librdmacm1 rdmacm 动态链接库
libibumad3 ibumad 动态链接库
ibverbs-providers ibverbs 各厂商用户态驱动(包括 RXE)
rdma-core 文档及用户态配置文件
安装完上述软件之后,可以执行 ibv_devices 看看有没有报错:
这是个基于 verbs 接口编写的小程序,用来获取并打印出当前系统中的 RDMA 设备列表。
查看安装的版本:
dpkg -L libibverbs1
可以看到安装的版本是 1.14.19.0
5.2.3. 安装 iproute2 和 perftest
sudo apt-get install iproute2
iproute2 是用来替代 net-tools 软件包的,是一组开源的网络工具集合,比如用更强大 ip 命令替换了以前常用的 ifconfig。我们需要其中的 rdma 工具来对 RXE 进行配置。一般的操作系统都已经包含了,安装也很简单:
sudo modprobe rdma_rxe
perftest 是一个基于 Verbs 接口开发的开源 RDMA 性能测试工具,可以对支持 RDMA 技术的节点进行带宽和时延测试。相比于 rdma-core 自带的示例程序 ,功能更加强大,当然也更复杂。使用如下命令安装:
5.3. 配置 RXE 网卡
首先我们需要加载内核驱动,modprobe 会自动加载依赖的其他驱动。
sudo modprobe rdma_rxe
然后进行用户态配置:
sudo rdma link add rxe_0 type rxe netdev ens33
其中 rxe_0 是你希望的 RDMA 的设备名,可任意取名。eth0 为 Soft-RoCE 设备所绑定的网络设备名,也就是 ifconfig 中看到的网卡名。
接着我们用 rdma 工具查看是否添加成功:
rdma link
再次运行ibv_devices 程序,可以看到 RXE 网卡已经出现在设备列表里。
也可以运行ibv_devinfo -d node1 命令查看虚拟 RDMA 设备的信息。
5.4. 执行 perftest 测试
分别在两端执行以下命令:
ib_send_bw -d rxe_0
以及:
ib_send_bw -d rxe_0 192.168.174.128
ib_send_bw 是用来测试 SEND 操作的带宽的程序(infiniband_send bandwidth),其中 <server_ip> 表示对端的 IP
两端的结果如下,Server 端:
Client 端:
可以看到两端都打印出了一些测试信息以及最后的测试结果,也就是带宽信息。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具