qperf怎样测试RDMA性能

联启 网络工具 14

本文目录导读:

qperf怎样测试RDMA性能-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

  1. 准备工作
  2. 测试方法
  3. RDMA 测试与 TCP 测试的对比
  4. 高级调试技巧
  5. 总结测试流程 (速查)

使用 qperf 测试 RDMA 性能是一个非常标准且高效的方法。qperf 可以测量点对点(通常是两台机器之间)的带宽和延迟,并且专门支持 RDMA 协议(如 InfiniBand 或 RoCE)。

以下是详细的使用步骤和测试方法:

准备工作

  1. 安装 qperf: 在两台机器(通常称为 Server 和 Client)上都安装。

    • RHEL/CentOS/Fedora:
      sudo yum install qperf -y
    • Ubuntu/Debian:
      sudo apt-get update
      sudo apt-get install qperf -y
    • 编译安装(可选): 如果需要最新版本,可以从 GitHub (linux-rdma/qperf) 下载源码编译。
  2. 确认 RDMA 设备正常: 在启动测试前,确保两台机器都能看到 RDMA 设备,并且链路状态正常(以 InfiniBand 为例):

    # 查看 IB 设备状态
    ibstat
    # 或查看 RoCE / 通用 RDMA 设备
    ibv_devinfo

    确保 state:ACTIVEphysical state:LinkUp

  3. 防火墙设置: qperf 默认使用 TCP 端口 19765 和 UDP 端口 19766 进行控制连接(用于协商参数),如果开启了防火墙,需要放行这两个端口,或者先关闭防火墙(仅限测试环境)。

    # 临时关闭防火墙(测试后记得打开)
    sudo systemctl stop firewalld
    # 或者直接放行端口 (推荐)
    sudo firewall-cmd --add-port=19765/tcp --add-port=19766/udp --permanent
    sudo firewall-cmd --reload

测试方法

测试时,通常先在一台机器上启动监听模式(Server),然后在另一台机器上发起连接(Client)。

基础带宽测试 (Streaming)

这是最常用的测试,用来测量在建立连接后,数据的最大传输速率(不关心单个消息的确认时间)。

  • 步骤 1:在 Server 端启动监听

    # 监听所有地址的默认端口
    qperf

    或者指定监听特定 IP(RDMA 接口 IP):

    # 10.0.0.1 是 RDMA 网卡的 IP
    qperf -lp <端口号> -ip <IP地址>
    # 默认端口是 19765,通常不需要更改,直接运行 qperf 即可
  • 步骤 2:在 Client 端发起测试

    # 格式: qperf <Server_IP> <测试项>
    # 测试 TCP 带宽 (不是 RDMA,用于对比)
    qperf 10.0.0.1 tcp_bw
    # 测试 RDMA 内部协议的带宽 (通常这才是你想要的)
    # rc:可靠连接 (RC, Reliable Connection,最常用)
    # uc:不可靠连接 (UC, Unreliable Connection)
    # ud:不可靠数据报 (UD, Unreliable Datagram)
    qperf 10.0.0.1 rc_bw
    qperf 10.0.0.1 uc_bw
    qperf 10.0.0.1 ud_bw

    常用选项(在 Client 端使用):

    • -m <消息大小>:指定消息大小(字节),-m 64K,不同的消息大小会影响带宽(通常大消息接近线速)。
    • -t <时间>:测试持续时间(秒),默认通常是 2-5 秒。
    • -oo <选项>:设置具体参数。-oo msg_size:1M-oo qp_inline 等。

    完整示例:

    # 用 1MB 的消息大小测试 RC 带宽,持续 10 秒
    qperf 10.0.0.1 -m 1M -t 10 rc_bw

    输出示例:

    rc_bw:
        bw             =  11258 MB/sec  (带宽)
        msg_rate       =  11.25 K/sec   (消息速率)
        msg_size       =   1 MiB         (消息大小)
        ...

延迟测试 (Latency)

测量一个数据包从 Client 发到 Server,再返回 Client 的往返时间(RTT,Round-Trip Time)。

  • Server 端: 同样只需要启动 qperf(可以复用上面的进程,或重新开一个)。

  • Client 端:

    # 测试 RDMA RC 延迟 (这里消息大小通常很小,如 1 字节或 64 字节)
    qperf 10.0.0.1 rc_lat
    qperf 10.0.0.1 ud_lat

    常用选项:

    • -m <字节大小>:指定用于延迟测试的消息大小(1 到 64 字节比较有意义)。
    • -oo <选项>-oo use_rdma_cm=false 可能会改变延迟结果。

    示例:

    # 测试 64 字节消息的 RC 延迟
    qperf 10.0.0.1 -m 64 -t 5 rc_lat

    输出示例:

    rc_lat:
        latency     =  1.19 us       (单位通常是微秒)
        ...

双向带宽测试 (Bidirectional)

如果想知道同时收发数据时的总带宽:

qperf 10.0.0.1 -oo msg_size:1M rc_bw rc_bw

两个 rc_bw 表示客户端发送 + 服务端发送(或者客户端收+发),结果通常会显示双向总带宽。

RDMA 测试与 TCP 测试的对比

为了确认 RDMA 的优势,可以对比测试 TCP 性能(即使 RDMA 卡已启用,系统通常也可以通过 IP over IB 或 TCP over RDMA 走 TCP 路径):

# 在 Client 端
qperf 10.0.0.1 tcp_bw   # TCP 带宽
qperf 10.0.0.1 tcp_lat   # TCP 延迟

RDMA 的 rc_bwtcp_bw 结果差别不大,可能意味着:

  1. 应用程序被绑定了 CPU: 使用 taskset 或 numactl绑定 CPU 和网卡所在的同一 NUMA 节点。
  2. 存在网络瓶颈: 链路速度未达到预期(如 100Gb 卡只跑了 40Gb)。
  3. 驱动或固件问题。

高级调试技巧

  1. 绑定 CPU 和 NUMA 节点: 为了获得最佳性能,确保 qperf 进程运行在 RDMA 网卡所在的 NUMA 节点上,先查看网卡所在节点:

    # 查看网卡所在 NUMA 节点
    cat /sys/class/infiniband/<设备名>/device/numa_node

    然后启动 qperf (Client 和 Server):

    # 假设 NUMA 节点为 1
    numactl --cpunodebind=1 --membind=1 qperf <Server_IP> -m 1M rc_bw
  2. 调整消息大小: 如果你想模拟实际应用(比如存储),可以测试不同消息大小:

    # 4K 消息大小 (类似小文件 IO)
    qperf 10.0.0.1 -m 4K rc_bw
    # 256K 消息大小 (流式 IO)
    qperf 10.0.0.1 -m 256K rc_bw
    # 1M 消息大小 (大块传输)
    qperf 10.0.0.1 -m 1M rc_bw
  3. 一次测试多项:

    qperf 10.0.0.1 -m 64 rc_lat -m 1M rc_bw
  4. 指定接口: 如果主机有多张 RDMA 卡,你可能需要显式指定使用哪个 RDMA 接口,这可以通过 -ip-lp 完成,但更好的方式是指定绑定到哪个 GID(Global Identifier):

    # 查看 GID 索引
    show_gids
    # 或者使用 ibdev2netdev 查看对应关系
    # 在 qperf 中,使用 -ip 参数绑定 IP 地址即可对应到具体网卡

总结测试流程 (速查)

  1. Server (机器A):运行 qperf
  2. Client (机器B):运行 qperf <机器A的RDMA IP> rc_bw (看带宽)
  3. Client (机器B):运行 qperf <机器A的RDMA IP> rc_lat (看延迟)
  4. 对比:运行 qperf <机器A的RDMA IP> tcp_bw (看 TCP 性能,如果接近 RC,说明 RDMA 没有生效或配置不对)

这样你就可以快速评估 RDMA 网络的性能了,如果遇到问题,检查 dmesg | grep infinibandibdev2netdev 来确认 RDMA 设备状态。

标签: qperf使用

抱歉,评论功能暂时关闭!