3、性能测试环境搭建:硬件要求(网卡、交换机、服务器)、软件环境(驱动、固件、操作系统配置)

3.1 硬件选型:决定性能上限的三大件

RDMA性能测试的第一步不是运行工具,而是搭建一套无瓶颈干扰的硬件环境。任何一处硬件短板都会直接反映在带宽、延迟或CPU占用率上,导致测试结果失真。硬件选型需围绕网卡、交换机、服务器三个层面展开,且三者必须匹配,不能出现“千兆交换机配100G网卡”这类结构性失衡。

3.1.1 网卡(HCA/NIC)

RDMA网卡分为两大类:InfiniBand HCA(如NVIDIA ConnectX系列)和RoCEv2网卡(同样基于ConnectX,但走以太网协议)。选型时需关注以下关键参数:

  • 端口速率与数量:常见规格为25GbE、100GbE、200GbE,InfiniBand则对应HDR100(100Gbps)、HDR200(200Gbps)等。测试前必须确认网卡实际协商速率,而非仅看标称值。
  • PCIe通道带宽:100Gbps网卡至少需要PCIe 3.0 x16或PCIe 4.0 x8,否则PCIe会成为瓶颈。例如ConnectX-6 DX 100G网卡若插在PCIe 3.0 x8插槽上,实测带宽将限制在约64Gbps。
  • 固件与驱动版本:同一块网卡在不同固件版本下,其拥塞控制算法、数据路径优化均有差异。建议记录并统一固件版本。
  • 端口类型:InfiniBand使用QSFP/OSFP光模块或铜缆,RoCEv2则使用以太网光模块。测试前需确认光模块与线缆类型匹配(如AOC、DAC或光模块+光纤)。

3.1.2 交换机

交换机是RDMA测试中最容易被低估的环节。对于RoCEv2,交换机必须支持无损以太网(PFC)和显式拥塞通知(ECN),否则在高负载下丢包率会急剧上升,导致RDMA性能断崖式下跌。InfiniBand交换机则需关注子网管理器(Subnet Manager)的配置。

对比项 InfiniBand交换机 RoCEv2交换机(无损以太网)
流控机制 链路级流控(内置) PFC(802.1Qbb)逐跳流控
拥塞控制 CC(拥塞控制)自动调节 ECN + DCQCN(需配置)
关键配置 子网管理器(SM)主备 PFC优先级映射、ECN阈值、缓冲区分配
测试前检查 ibstatus查看链路速率 dcb工具检查PFC使能状态

3.1.3 服务器

服务器端需关注CPU、内存、PCIe插槽布局。RDMA测试时,CPU频率与NUMA拓扑直接影响延迟测试结果。建议使用支持PCIe 4.0/5.0的服务器平台,并将网卡插在靠近CPU的PCIe插槽上,避免跨NUMA访问带来的额外延迟。内存方面,需确保足够的内存带宽,避免大消息测试时内存成为瓶颈。

实操建议:测试前用 lspci -vvv 检查网卡所在PCIe插槽的链路宽度与速率,确认是否为 LnkCap: 16GT/s x16 或更高。若显示 5GT/s x8,说明插槽速率不足,需更换插槽。
RDMA性能测试硬件拓扑与关键检查点 服务器 A CPU: 2×Xeon 8380 内存: 512GB DDR5 PCIe: Gen4 x16 ConnectX-6 100G 服务器 B CPU: 2×Xeon 8380 内存: 512GB DDR5 PCIe: Gen4 x16 ConnectX-6 100G 无损以太网交换机 支持 PFC + ECN | 100G端口 缓冲区: 12MB/端口 100GbE 链路 100GbE 链路 关键检查点: ① PCIe链路宽度/速率(lspci -vvv) ② 网卡固件版本(ibstat / ethtool -i) ③ 交换机PFC/ECN配置 ④ 线缆/光模块类型匹配 ⑤ NUMA拓扑与CPU亲和性

3.2 软件环境:驱动、固件与操作系统配置

硬件就绪后,软件环境的配置质量直接决定测试能否达到硬件标称性能。常见的“性能不达标”问题中,约60%源于驱动版本不匹配或系统参数未调优。

3.2.1 驱动与固件安装

以NVIDIA(原Mellanox)网卡为例,需安装MLNX_OFED驱动包。安装前务必确认内核版本兼容性,并记录当前固件版本。推荐流程如下:

# 1. 检查当前内核与网卡型号
uname -r
lspci | grep -i mellanox

# 2. 下载并安装MLNX_OFED(以v5.8为例)
wget https://www.mellanox.com/downloads/ofed/MLNX_OFED-5.8-1.0.1.1/MLNX_OFED_LINUX-5.8-1.0.1.1-rhel8.6-x86_64.tgz
tar xzf MLNX_OFED_LINUX-5.8-1.0.1.1-rhel8.6-x86_64.tgz
cd MLNX_OFED_LINUX-5.8-1.0.1.1-rhel8.6-x86_64
sudo ./mlnxofedinstall --force

# 3. 更新固件(需谨慎,确认当前版本)
flint -d /dev/mst/mt4119_pciconf0 q   # 查询当前固件
flint -d /dev/mst/mt4119_pciconf0 burn fw-ConnectX6-rel-20_31_1010.bin  # 烧录新固件
固件升级风险提示:固件烧录过程中不可断电或重启,否则可能导致网卡变砖。建议在业务低峰期操作,并提前备份当前固件。升级后需重启服务器才能生效。

3.2.2 操作系统关键参数调优

RDMA性能测试前,需调整以下系统参数以消除潜在瓶颈:

  • 内存锁限制:RDMA操作需要锁定内存页,默认限制过小会导致注册内存失败。需设置 ulimit -l unlimited 或修改 /etc/security/limits.conf。
  • CPU频率调节器:设置为 performance 模式,避免CPU降频影响延迟测试。
  • 中断亲和性:将网卡中断绑定到与测试进程相同的NUMA节点CPU上。
  • HugePages:建议启用2MB或1GB大页,减少TLB miss对性能的影响。
# 设置内存锁为无限
echo "* soft memlock unlimited" >> /etc/security/limits.conf
echo "* hard memlock unlimited" >> /etc/security/limits.conf

# 设置CPU为performance模式
cpupower frequency-set -g performance

# 启用大页(以1GB为例,需在启动参数中配置)
echo 8 > /proc/sys/vm/nr_hugepages_mempolicy
mkdir -p /mnt/huge
mount -t hugetlbfs -o pagesize=1GB none /mnt/huge

3.3 环境验证:测试前的“体检”流程

正式跑基准测试前,必须完成以下验证步骤,确保环境无隐藏问题:

  1. 链路层验证:使用 ethtool eth0 确认端口速率、双工模式;使用 ibstat(InfiniBand)查看链路状态。
  2. 连通性验证:执行 ping 测试基础IP连通性,再使用 ibping(InfiniBand)或 rping(RoCE)验证RDMA数据通路。
  3. 带宽预检:运行 ib_write_bw 小规模测试(如1分钟),观察是否达到预期带宽的80%以上。若远低于预期,需检查PCIe链路、线缆、交换机配置。
  4. 延迟预检:运行 ib_read_lat 测试,确认延迟在合理范围(如100G RoCEv2 延迟应低于2μs)。
案例复盘:某次测试中,两台服务器直连(无交换机)时带宽正常,但接入交换机后带宽下降40%。排查发现交换机未启用PFC,导致RoCEv2流量在高负载下丢包。启用PFC并配置ECN阈值后,带宽恢复至线速。此案例说明:交换机配置对RoCEv2性能影响极大,测试前必须验证无损网络配置。

3.4 常见误区与避坑指南

误区 后果 正确做法
忽略PCIe插槽速率 带宽被限制在PCIe瓶颈 用lspci确认链路为Gen4 x16或更高
驱动版本过旧或过新 功能异常或性能下降 使用NVIDIA官方推荐版本并记录
未配置PFC/ECN RoCEv2高负载丢包 交换机上启用无损网络配置
内存锁限制未解除 大消息测试失败 设置memlock为unlimited
跨NUMA访问网卡 延迟增加20%-30% 将网卡插在CPU0的PCIe槽并绑定中断

环境搭建是RDMA性能测试中最耗时但最关键的环节。建议每次测试前都执行一遍完整的验证流程,并记录硬件固件版本、驱动版本、系统参数快照,以便后续复现问题或对比不同配置下的性能差异。只有确保环境无瓶颈,后续的基准测试数据才具有参考价值。