第二章:测试环境搭建:硬件选型与拓扑规划、操作系统与驱动安装、OpenSM子网管理器配置

大家好,我是你们的老朋友。上一章我们聊了IB网络性能测试到底测什么、为什么测。这一章,咱们得把家伙事儿都支棱起来。说白了,就是搭台子。台子搭不好,后面测出来的数据全是废的。我见过太多团队,硬件选型拍脑袋,驱动装得稀里糊涂,最后定位问题定位到想哭。嗯,咱们今天就把这些坑一个个填平。

2.1 硬件选型:别让短板拖死你

硬件选型这事儿,我个人习惯是先定带宽,再定网卡,最后看线缆。为什么?你想想看,你的业务需要100G还是200G甚至400G?这决定了你整个集群的“天花板”。

核心原则:端到端带宽匹配。网卡、交换机端口、线缆,这三者任何一个掉链子,你的实际带宽就是那个最慢的环节。

我在项目中遇到过最典型的案例:客户买了HDR100的网卡(100Gbps),结果配了EDR的线缆(约50Gbps)。测试结果死活上不去,查了三天,最后发现是线缆的锅。你说冤不冤?

具体选型建议如下:

组件 推荐型号/规格 避坑指南
HCA(网卡) Mellanox ConnectX-5/6/7 系列 注意PCIe版本,Gen3 x16才能喂饱100G
交换机 Mellanox SB7800 / QM9700 系列 确认端口速率与HCA匹配,别混用EDR/HDR
线缆 无源铜缆(短距) / 有源光缆(长距) 长度超过3米建议用光缆,信号衰减小
服务器 GPU服务器(如NVIDIA DGX)或通用x86 确保PCIe插槽直连CPU,别走PCH

警告:千万别买二手或者来历不明的IB线缆。我曾经贪便宜买了一批“库存”光缆,结果插上后光模块死活不亮,最后发现是接口氧化了。省那点钱,不够你折腾时间的。

2.2 拓扑规划:胖树还是瘦树?

拓扑规划,说白了就是决定你的数据怎么走。最常见的两种:

  • 胖树(Fat-Tree):无阻塞架构,任何两个节点之间带宽都是满的。适合大规模HPC集群。
  • 瘦树(Thin-Tree):有收敛比,上层带宽小于下层。省钱,但性能有瓶颈。

我个人建议,做性能基准测试,必须用胖树。为什么?因为你要测的是网卡和交换机的极限,不是测拓扑的瓶颈。你想想看,如果拓扑本身就有收敛,你测出来的数据到底是网卡不行,还是交换机上行口不够?说不清楚。

下面我画了一张典型的双轨胖树拓扑图,你看一眼就明白了:

双轨胖树拓扑(示例) 核心交换机(2台) 汇聚交换机 A 汇聚交换机 B 接入交换机 1 接入交换机 2 接入交换机 3 节点 1-4 节点 5-8 节点 9-12 核心层 汇聚层 接入层 计算节点

小技巧:如果你只有4台机器做测试,其实不需要买交换机。直接用IB线缆把两台机器的HCA直连就行。这叫“点对点测试”,排除了交换机的影响,专门测网卡极限。

2.3 操作系统与驱动安装:别在第一步翻车

操作系统选型,我个人推荐CentOS 7.9或者Rocky Linux 8.x。为什么?因为Mellanox的驱动对RHEL系支持最好。Ubuntu也能用,但有时候会遇到一些奇奇怪怪的依赖问题。

驱动安装,我建议用官方提供的 mlnxofedinstall 脚本。别自己手动编译,除非你真的知道自己在干什么。

具体步骤:

  1. 下载驱动:从Mellanox官网下载对应OS版本的MLNX_OFED包。
  2. 安装依赖:yum install -y gcc kernel-devel kernel-headers
  3. 运行安装脚本:./mlnxofedinstall --all
  4. 重启:reboot

注意:安装过程中如果提示“kernel-devel版本不匹配”,千万别跳过。我曾经有一次偷懒,用了--force参数强行安装,结果驱动加载后网卡直接不识别。最后只能重装系统,血的教训。

安装完成后,用 ibstat 命令检查网卡状态:

# ibstat
CA 'mlx5_0'
    State: Active
    Physical state: LinkUp
    Rate: 100

看到 State: ActiveLinkUp,说明驱动装好了,物理链路也通了。如果显示 Down,先检查线缆,再检查交换机端口配置。

2.4 OpenSM子网管理器配置:IB网络的“大脑”

IB网络和以太网最大的区别是什么?以太网是“无连接”的,数据包自己找路。IB网络是“面向连接”的,需要有一个子网管理器(SM)来规划路径。说白了,OpenSM就是IB网络的交通警察。

OpenSM通常运行在交换机上,或者一台管理节点上。我个人习惯把它跑在管理节点上,因为交换机上的资源有限,万一OpenSM挂了,交换机还能干点别的。

安装配置步骤:

  1. 安装OpenSM:yum install -y opensm
  2. 启动服务:systemctl start opensm
  3. 设置开机自启:systemctl enable opensm

检查OpenSM是否正常运行:

# sminfo
SM: lid=1, name=opensm
SM: active

看到 active 就对了。如果显示 standby,说明有多个SM在运行,需要确认主备关系。

重要:OpenSM启动后,它会自动发现所有IB设备,并计算最优路径。这个过程叫“LFT(线性转发表)计算”。如果你的网络拓扑有变化(比如新增了一台机器),需要重启OpenSM或者手动触发重计算:opensm -R

我曾经遇到过一个场景:集群扩容后,新加的几台机器死活ping不通。查了半天,发现是OpenSM没有重新计算路由。重启OpenSM后,一切正常。嗯,这种低级错误,犯过一次就记住了。

高级技巧:对于大规模集群(超过1000节点),建议开启OpenSM的“fat-tree routing”算法。在配置文件 /etc/opensm/opensm.conf 中设置:routing_engine=ftree。这样能最大化利用胖树拓扑的带宽。

好了,环境搭建这块就聊到这儿。硬件选型别贪便宜,拓扑规划别偷懒,驱动安装别跳过依赖检查,OpenSM配置别忘了重启。这几步走稳了,后面测试才能出真数据。

公众号:蓝海资料掘金营,微信deep3321