Soft-RoCE性能迷思:虚拟机环境下为何RDMA软件栈有时反而不如传统TCP?
最近在搭建一个分布式存储原型系统时,我遇到了一个令人困惑的现象:在相同的虚拟机环境中,启用了Soft-RoCE(RXE)后,使用ib_send_bw测试的带宽竟然比传统的TCP/IP协议栈通过iperf3测试的结果还要低。这完全违背了RDMA技术"零拷贝、内核旁路、硬件卸载"的理论优势预期。经过几天的深入排查和测试,我发现这个问题并非个例,而是Soft-RoCE在特定环境下的典型表现。
对于追求极致网络性能的工程师来说,理解Soft-RoCE与TCP在虚拟机环境下的真实性能对比至关重要。RDMA技术本应提供更低的延迟和更高的吞吐量,但软件实现却可能带来意想不到的开销。本文将基于实际测试数据,深入分析性能差异的根本原因,并提供针对性的优化方案。
1. 测试环境搭建与基准性能对比
在开始深入分析之前,我们先建立一个标准的测试环境。我使用了两台配置相同的Ubuntu 22.04虚拟机,每台分配了8个vCPU、16GB内存,并通过虚拟化平台直通了10Gbps虚拟网卡。两台虚拟机位于同一子网,确保网络路径最短。
1.1 环境准备与工具安装
首先在两台虚拟机上安装必要的软件包:
# 更新系统并安装基础工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git cmake pkg-config
# 安装RDMA相关软件栈
sudo apt install -y rdma-core ibverbs-utils librdmacm-dev libibverbs-dev
sudo apt install -y perftest rdmacm-utils infiniband-diags
# 安装网络测试工具
sudo apt install -y iperf3 net-tools ethtool
# 验证内核模块支持
lsmod | grep rdma_rxe
如果rdma_rxe模块未加载,需要手动加载:
sudo modprobe rdma_rxe
注意:某些较旧的内核版本可能需要重新编译以启用RXE支持。可以通过检查
/boot/config-$(uname -r)文件中的CONFIG_RDMA_RXE配置项来确认。
1.2 Soft-RoCE设备配置
配置Soft-RoCE设备需要绑定到实际的物理或虚拟网络接口。首先确定可用的网络接口:
# 查看网络接口
ip link show
# 假设我们的主网络接口是ens192
sudo rdma link add rxe_0 type rxe netdev ens192
sudo rdma link show
配置完成后,应该能看到类似下面的输出:
link rxe_0/1 state ACTIVE physical_state LINK_UP netdev ens192
为了验证配置是否成功,可以使用ibv_devices命令:
ibv_devices
正常输出应该显示:
device node GUID
------ ----------------
rxe_0 020c29fffe6e7739
1.3 基准测试方法
为了确保测试的公平性,我设计了以下测试方案:
- TCP性能基准:使用
iperf3进行TCP流测试,分别测试单流和多流性能 - Soft-RoCE性能基准:使用
ib_send_bw和ib_write_bw测试RDMA带宽 - 延迟测试:使用
ib_send_lat和ping命令对比延迟 - CPU利用率监控:使用
top和perf工具监控测试期间的CPU使用情况
测试命令示例如下:
# TCP带宽测试(服务端)
iperf3 -s
# TCP带宽测试(客户端)
iperf3 -c <server_ip> -t 30 -P 4
# Soft-RoCE带宽测试(服务端)
ib_send_bw -d rxe_0
# Soft-RoCE带宽测试(客户端)
ib_send_bw -d rxe_0 <server_ip>
1.4 初始测试结果对比
在默认配置下,我得到了以下测试数据:
| 测试类型 | 协议 | 单流带宽 | 4流带宽 | 平均延迟 | CPU利用率 |
|---|---|---|---|---|---|
| 网络基准 | TCP | 8.73 Gbps | 9.12 Gbps | 0.15 ms | 45% |
| RDMA测试 | Soft-RoCE | 2.14 Gbps | 3.87 Gbps | 0.28 ms | 85% |
这个结果令人惊讶:Soft-RoCE的单流带宽只有TCP的约25%,即使使用4个并行流,也只能达到TCP单流性能的一半左右。更糟糕的是,Soft-RoCE的CPU利用率几乎是TCP的两倍,这与RDMA"卸载CPU"的核心理念背道而驰。
<

433

被折叠的 条评论
为什么被折叠?



