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,说明插槽速率不足,需更换插槽。
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 环境验证:测试前的“体检”流程
正式跑基准测试前,必须完成以下验证步骤,确保环境无隐藏问题:
- 链路层验证:使用
ethtool eth0确认端口速率、双工模式;使用ibstat(InfiniBand)查看链路状态。 - 连通性验证:执行
ping测试基础IP连通性,再使用ibping(InfiniBand)或rping(RoCE)验证RDMA数据通路。 - 带宽预检:运行
ib_write_bw小规模测试(如1分钟),观察是否达到预期带宽的80%以上。若远低于预期,需检查PCIe链路、线缆、交换机配置。 - 延迟预检:运行
ib_read_lat测试,确认延迟在合理范围(如100G RoCEv2 延迟应低于2μs)。
3.4 常见误区与避坑指南
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 忽略PCIe插槽速率 | 带宽被限制在PCIe瓶颈 | 用lspci确认链路为Gen4 x16或更高 |
| 驱动版本过旧或过新 | 功能异常或性能下降 | 使用NVIDIA官方推荐版本并记录 |
| 未配置PFC/ECN | RoCEv2高负载丢包 | 交换机上启用无损网络配置 |
| 内存锁限制未解除 | 大消息测试失败 | 设置memlock为unlimited |
| 跨NUMA访问网卡 | 延迟增加20%-30% | 将网卡插在CPU0的PCIe槽并绑定中断 |
环境搭建是RDMA性能测试中最耗时但最关键的环节。建议每次测试前都执行一遍完整的验证流程,并记录硬件固件版本、驱动版本、系统参数快照,以便后续复现问题或对比不同配置下的性能差异。只有确保环境无瓶颈,后续的基准测试数据才具有参考价值。