如何开展实验验证RDMA吞吐量随QPS增长而下降?
解答
perftest的局限性
perftest的ib_read_bw/ib_write_bw等工具默认是单队列对(QP)、单线程模式,核心用于测试单流最大吞吐量或单流延迟,无法模拟多QPS并发场景。真实高QPS场景下,网卡和RDMA栈的资源(如QP数量、完成队列深度、内存注册资源)会被多请求分摊,这才会出现吞吐量随QPS上升而下降的趋势——这是perftest默认模式覆盖不到的。
是否需要自行编写C++代码?
分两种情况:
- 先尝试perftest进阶参数,看能否覆盖基础测试需求:
- 用
-q指定多QP数量,比如ib_write_bw -q 16,模拟多流并发,可观察吞吐量随QP数(近似QPS维度)的变化 - 用
-s调整请求大小,小请求场景下QPS更容易提升,吞吐量下降趋势会更明显
- 用
- 如果perftest的多QP模式无法精准控制QPS梯度(比如按固定步长从1k QPS升到100k QPS),则必须自行编写C++代码:
- 核心实现要点:
- 多线程绑定独立CPU核,每个线程对应一个独立QP,避免线程调度干扰
- 通过定时器或循环计数控制每个线程的请求发送频率,实现固定QPS梯度压测
- 统计每个QPS梯度下的总吞吐量(每秒传输字节数),同步记录对应QPS值
- 合理分配RDMA资源:可复用完成队列(CQ),避免重复注册内存区域(MR)以降低开销
- 简化实现:基于
libibverbs或rdma-core库开发,直接使用封装好的RDMA建立API(如rdma_create_ep),无需从零实现底层握手流程
- 核心实现要点:
额外测试注意事项
- 测试前关闭两台机器的防火墙、SELinux,用
ibv_devinfo确认网卡状态,ping -I <rdma_dev> <peer_ip>验证RDMA链路连通性 - 调整系统内核参数,增大RDMA相关缓冲区上限(如
sysctl -w net.core.rmem_max=268435456、sysctl -w net.core.wmem_max=268435456),避免内核缓冲区成为瓶颈 - 统计数据时取多次测试的平均值,降低单次波动对结果的影响
内容的提问来源于stack exchange,提问作者Peter Li
相关产品推荐
相关产品推荐

