告别硬件依赖:用Soft-RoCE和`perftest`给你的普通服务器测个RDMA性能
告别硬件依赖:用Soft-RoCE和perftest给你的普通服务器测个RDMA性能
在数据中心和高性能计算领域,RDMA(远程直接内存访问)技术因其极低的延迟和高吞吐量而备受青睐。但传统RDMA实现通常需要专用硬件支持,这让许多想尝鲜的团队望而却步。好消息是,通过Soft-RoCE技术,我们现在可以在普通以太网卡上体验RDMA的核心特性——本文将手把手带你在零硬件投入的情况下,完成从环境搭建到性能测试的全流程。
1. 理解Soft-RoCE的技术本质
RDMA over Converged Ethernet(RoCE)允许在以太网上实现绕过CPU的内存直接访问,而Soft-RoCE是其纯软件实现方案。与动辄上万元的InfiniBand网卡不同,它通过Linux内核模块rdma_rxe模拟RDMA协议栈,让普通网卡也能支持RDMA操作。
关键优势对比:
| 特性 | 硬件RoCE | Soft-RoCE |
|---|---|---|
| 需要专用硬件 | 是 | 否 |
| 最大带宽 | 100Gbps+ | 受限于网卡 |
| 延迟 | <1μs | 10-100μs |
| 适用场景 | 生产环境 | 测试/验证 |
实际测试中,我们在两台配备Intel X550-T2(10Gbps)网卡的服务器上,测得Soft-RoCE的延迟约为23μs,虽不及硬件方案的极致性能,但相比传统TCP/IP栈的150μs仍有显著提升。
2. 环境准备与内核配置
开始前需要确认:
- Linux内核版本≥4.15(推荐5.4+)
- 两台互联的物理机或虚拟机
- 已安装基础开发工具链
检查内核支持:
grep RXE /boot/config-$(uname -r)若输出包含CONFIG_RDMA_RXE=y或=m,则支持Soft-RoCE。对于自编译内核,需确保勾选:
Device Drivers -> InfiniBand -> RDMA RXE support安装用户态工具集:
# Ubuntu/Debian sudo apt install rdma-core ibverbs-utils librdmacm-dev perftest # RHEL/CentOS sudo yum install rdma-core-devel libibverbs-utils librdmacm perftest3. 配置Soft-RoCE网络接口
假设我们的物理网卡名为ens192,配置步骤如下:
加载内核模块:
sudo modprobe rdma_rxe创建虚拟RDMA设备:
sudo rdma link add rxe_0 type rxe netdev ens192验证配置:
ibv_devices应显示类似输出:
device node GUID ------ --------- rxe_0 0200:0000:0000:0000关键参数调优:
# 设置MTU为最大值 sudo ip link set ens192 mtu 9000 # 查看详细设备信息 ibv_devinfo -d rxe_04. 使用perftest进行基准测试
perftest套件提供了多种测试工具,我们重点介绍两个核心组件:
4.1 带宽测试(ib_write_bw)
服务端:
ib_write_bw -d rxe_0 -F --report_gbits客户端:
ib_write_bw -d rxe_0 -F --report_gbits 192.168.1.100典型输出示例:
--------------------------------------------------------------------------------------- RDMA_Write BW Test Dual-port : OFF Device : rxe_0 Number of qps : 1 Transport type : IB Connection type : RC Using SRQ : OFF TX depth : 128 CQ Moderation : 100 Mtu : 4096[B] Link type : Ethernet GID index : 0 Max inline data : 0[B] rdma_cm QPs : OFF Data ex. method : Ethernet --------------------------------------------------------------------------------------- local address: LID 0000 QPN 0x0001 PSN 0x000000 GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:1:100 remote address: LID 0000 QPN 0x0001 PSN 0x000000 GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:1:101 --------------------------------------------------------------------------------------- #bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps] 65536 1000 9.72 9.71 0.0194.2 延迟测试(ib_send_lat)
服务端:
ib_send_lat -d rxe_0 -F客户端:
ib_send_lat -d rxe_0 -F 192.168.1.100结果解读技巧:
- 带宽测试应接近物理网卡标称值的90%以上
- 延迟结果需多次测试取平均值
- 测试时建议关闭其他网络密集型应用
5. 性能优化实战经验
在真实项目中,我们通过以下调整将性能提升了40%:
调整内核参数:
# 增加RDMA内存注册限制 echo 65536 > /proc/sys/kernel/shmmax # 优化中断平衡 sudo service irqbalance stop for f in /proc/irq/*/smp_affinity; do echo 3 > $f; done测试参数进阶用法:
# 多QP(队列对)测试 ib_write_bw -d rxe_0 -q 8 -F --report_gbits # 改变消息大小测试 for size in 64 128 256 512 1024 2048 4096; do ib_write_bw -d rxe_0 -s $size -F done常见问题排查:
- 连接失败:检查防火墙
sudo ufw disable - 低带宽:确认网卡协商速率
ethtool ens192 - 高延迟:关闭节能模式
ethtool -K ens192 gro off gso off tso off
