ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

InfiniBand网络搭建与故障排查实战:从子网管理器到性能优化

InfiniBand网络搭建与故障排查实战:从子网管理器到性能优化 1. InfiniBand是什么为什么HPC和AI集群绕不开它1.1 从“网络运输链路”说说起先说个最常见的场景。很多人家里用全千兆路由器接千兆交换机结果电脑网卡显示只有10Mbps第一反应是网线坏了换一根还不行最后发现是端口协商出了问题或者某个中间设备把链路强制在百兆模式。这种链路上的协商问题在普通以太网里就是“速度变成10兆”这么直观排查思路也相对简单无非是检查网线、强制双工模式、换端口。InfiniBand这套东西从某种角度看理解起来其实更容易因为它把“链路的规矩”定得更死更不留给设备自由发挥的空间。它的中文名一般翻译成“无限带宽”但你别被这个名字骗了——它并不真的无限而是指它在一根物理链路上可以不断叠加逻辑链路扩展性很强带宽可以“无限”往上堆。这个设计哲学和以太网完全不同等会我会细说。InfiniBand最早是面向高性能计算HPC场景设计的网络技术核心目标就两个带宽要极大时延要极低。在超算、AI大模型训练、分布式存储这类场景里几百上千台机器要频繁交换数据传统以太网的CPU开销太大TCP/IP协议栈层层封装数据还没发出去CPU先忙坏了。InfiniBand把数据传输这块从CPU手里解放出来靠硬件直接完成网络数据读写也就是RDMA远程直接内存访问那一套。1.2 IB交换机的定位与常见误解IB网络里交换机是整个网络的核心。一个IB子网里通常需要一台或多台IB交换机它们负责转发数据并且配合子网管理器完成路径计算。很多刚接触IB的人有个误解觉得IB交换机就是一个“更快的网线交换机”接上就能用。不是这样的。IB交换机和以太网交换机最大的区别在于IB交换机本身不自带“思考能力”。以太网交换机你插上电它自己能跑STP、能自己学习MAC地址表数据一进来它就会转发。但IB交换机不行它必须等一个叫“子网管理器”Subnet ManagerSM的程序在网络上跑起来给它下发路由表、分配LID地址、计算转发路径它才知道怎么工作。这个逻辑听起来很怪但其实是IB高可靠性的来源。子网管理器统一计算全网路径可以保证任何时候都有明确的最佳路径不会出现以太网那种环网风暴、ARP表撑爆之类的问题。代价就是如果子网管理器挂了或者配置错误整个IB网络就会瘫痪这时候数据链路表现出的症状和以太网又很不一样。这个坑我会在实操部分重点讲。2. IB交换机硬件形态与选型思路2.1 端口数与速率从EDR到NDRIB交换机的参数第一件事看端口速率。目前市面上还能见到的主流速率有这几档我做了一个对比表方便你有直观认知速率代际单端口速率常见端口数典型场景FDR56Gbps36口、48口旧HPC集群、二手市场过渡方案EDR100Gbps36口、48口中小型HPC、AI训练早期项目HDR200Gbps40口、64口当前主流中的主力大型AI集群NDR400Gbps64口新一代旗舰产品价格极高我给你的建议是预算允许的前提下直接上HDR起步慎重考虑EDR甚至更老的东西。为什么因为IB这个领域很多优化是端到端的交换机本身速率够了还要你的网卡、线缆、子网管理器版本都能配合上。老设备就算便宜后面你会发现整个生态都是围绕新代际在推固件更新、兼容性测试全都不好做。端口数方面36口到40口是主力。36口意味着什么呢在HDR这个速率下通常每4个口共享一个“逻辑芯片组”转发带宽是有限额的。你选交换机的时候不光要看总端口数还要看交换机内部的无阻塞带宽是不是够。有些低端型号所有端口全跑满的时候内部背板带宽不够会出现端到端性能下降这就是厂商常说的“oversubscription超订比”。理想情况下超订比是1:1也就是每个端口都有独立的满速转发能力但这种型号价格基本翻倍。2.2 线缆形态光模块、直连铜缆与有源光缆IB交换机和网卡之间怎么连也是个大问题。常见的三种连接方式直连铜缆DAC两头直接是模块接口中间是铜缆成本最低适合机房内短距离一般5米内。HDR 200G的DAC线价格已经很亲民了。有源光缆AOC两端是光模块中间光纤比DAC轻、抗干扰好、可以更长10-100米价格中等偏上。光模块加光纤跳线拆装最灵活可以只换线不换模块但需要额外维护光纤清洁度最不建议新手直接上手。我个人实际配置的时候机柜内部统一用DAC跨机柜走AOC穿墙跨机房才动用光模块。倒不是DAC有多高级恰恰相反是因为DAC接线后不会出现“光纤头脏了导致误码率高”这种最折磨人的问题。IB对误码率很敏感光路稍微脏一点重传率就上去了然后延迟暴涨但表面看链路状态还是“up”的这个坑谁踩谁知道。3. IB网络搭建实操子网管理器、分区与链路验证3.1 子网管理器是“大脑”刚说了IB交换机自己不会转发必须靠SM来指挥。生产环境里主机上可以起一个SM软件也可以用交换机自带的SM模块或者单独起一个管理节点跑opensm。最简单的做法是在你的第一台计算节点上装一个opensm让这个节点兼职做SM。你需要先安装基础设施。以最常见的Linux环境举例通常需要安装的是这几个软件包yum install -y infiniband-diags opensm perftest或者以Ubuntu系为例apt-get install -y infiniband-diags opensm perftest安装好后检查驱动是否加载。如果是Mellanox现在叫NVIDIA Networking的网卡常见驱动是mlx5_corelsmod | grep mlx5_core驱动没加载的话需要先装好MLNX_OFED驱动包。这一步是很多新手在刚开始最容易卡住的地方IB网卡不装对应驱动系统根本识别不到。驱动就绪后启动opensm。前台模式可以方便调试opensm -g 0x98039b03007ef003 --guid 0x98039b03007ef003这个-g参数指定的是本机网卡的GUID你可以通过ibstat查询到。实际生产中用前台模式跑不合适建议后面用systemd托管或者用-B参数后台运行。问题来了同一个InfiniBand子网里只能有一个主SM在正常工作。如果你开了多个SM但又没配主备模式网络就会乱套。正确做法是多个SM可以通过-p指定优先级数字越大优先级越高高优先级的做Master其余做Standby。优先级配置不对有时候明明两台机器开了两个SM网络却一直是“Initializing”状态半天连不上这种情况不在少数。3.2 分区配置SM跑起来后你还需要做一项类似“VLAN”的配置叫分区Partition。分区的作用是把一个IB子网逻辑隔离成多个独立网络。比如你有16台机器其中8台跑一个AI训练任务另外8台跑另一个任务同时它们共享同一套IB交换机。你就可以划分两个分区分区A放前8台分区B放后8台。这两组之间的数据流量完全隔开互不干扰。用perftest自带的smcrm工具或者ibpartition命令可以配置。最常见的配置方法是在opensm配置文件中定义分区也可以用qos相关的策略工具在线调整。注意点默认分区是0x7fff所有节点都在这个默认分区里。如果你手动新开了分区节点默认不会自动进去需要在启动服务时指定PKey。常用的做法是ib_send_bw -P 0x8001这个-P参数指定PKey值意思是这个进程的流量归到PKey值为0x8001的分区内如果对方节点的端口不在这个分区就无法通信。合理用分区可以避免大流量互相干扰还能避免某些节点间的联调误伤。我的建议是生产网络一定要提前把分区规划好不要等跑起来之后再加那时候加分区会中断所有节点通信的。这个我后面在第4章故障排查里还会再提。3.3 链路协商检查与以太网“协商速率”不同IB的链路协商结果更严格它不太存在“协商到10兆”这种降速运行的情况但依然有链路状态一说。最常用的检查工具是ibstat输出中有一项State: Active说明链路是畅通的。另一项是Physical state: LinkUp这是物理层状态。千万注意这两个状态一致才说明链路真正可用。只在LinkUp但State还是Initializing或Down多半是SM还没下发路由或者线缆两端速率不匹配。另外强烈建议启动的时候跑一下ibnetdiscover这个命令会把整个IB子网的拓扑关系、每个端口的GUID、速率全部打印出来。这个命令输出的可读性虽然差点但它是排查“某些节点看不到对方”这种问题的最快路径。有一次我配置一套两交换机的拓扑A交换机下的节点能看到B交换机但反过来不行。用ibnetdiscover一查发现B交换机的子网管理器优先级设成了最低根本没被选举为Master而它的上联端口又把A的Master分组给限了这个我在第4章还会详细展开。4. IB网络常见故障排查实录4.1 链路协商与物理层排查前面说了IB不存在“协商到10兆”那么夸张的表现但物理层有问题时也有自己的表现。最常见的是ibstat显示State: Active但perftest跑性能的时候带宽就是起不来。这类问题大概率出在物理链路的误码上。IB链路对误码BER要求极高链路能up不代表没有误码这就是为什么你需要检查mlx5相关的计数cat /sys/class/infiniband/mlx5_0/ports/1/counters/port_xmit_discards cat /sys/class/infiniband/mlx5_0/ports/1/counters/port_rcv_errors如果port_xmit_discards或者port_rcv_errors非零请优先怀疑DAC线质量。表面看线缆是新的但IB对高频信号完整性要求极高劣质线、弯曲半径过小、接口灰多都会导致误码。建议直接换一根线试试。这里有个普遍适用的经验IB网络里物理层问题优先级永远高于配置问题。不是说配置不重要而是IB的配置错误常常表现得很极端连不上、整个没响应但物理层问题表现得很隐蔽链路正常、性能拉胯如果没有排查优先级很容易在配置上反复折腾一晚上结果什么都没搞定。4.2 子网管理器故障子网管理器崩溃或者优先级错乱在IB网络中是一级事故。症状是所有节点都显示State: Initializing或者State: Down全网“失联”。排查思路看SM进程是否还活着ps aux | grep opensm。看SM日志常见位置是/var/log/opensm.log重点搜“Fatal”、“Error”关键字。检查是否有多个SM同时跑了Master。可以用smquery工具查询smquery -c这个命令会列出当前网络上的SM实例以及它们各自的状态。如果看到有两个SM都显示Master这就是最典型的多主冲突。多主冲突通常是你启了两个SM但都没设优先级或者优先级一样导致的。解决方法是给每个SM设置一个不同的优先级确保只有一个做Master其余做Standbyopensm -p 5 opensm -p 10数字大的优先。用10的那台做Master5的那台做Standby。还有一种我之前踩过的坑是交换机自带的SM和外部启动的opensm冲突。某些交换机会默认开启内置SM然后你又从外部起了个opensm两边互不相让。处理办法是要么关掉交换机的SM功能要么彻底不用外部opensm。不要指望它们“自动协商”IB的多SM在主备场景下确实能协商但前提是配置正确而不是它们天然有这种默契。4.3 性能不达标的定位装了IB最爽的时刻是跑通之后看到ib_write_bw测出来的带宽数字很漂亮。最不爽的时刻就是数字上不去比如HDR应该跑190Gbps左右结果只有100Gbps。性能排查顺序第一查CPU频率。ib_write_bw这类测试强烈依赖CPU频率尤其是单线程测试。检查是否开了节能模式建议临时用cpupower frequency-set -g performance锁定性能模式。第二查中断绑定。IB网卡的中断最好绑定到独立的物理核上用mlx5_0的irqbalance自动分配往往效果一般建议手动执行set_irq_affinity脚本进行绑定。第三查MTU。IB的MTU最大支持4096字节4K MTU能开多高就开多高。很多集群管理员忽略了这一点用默认的2K MTU性能直接损失一大截。如果你用的是Mellanox网卡推荐跑一下官方自带的测试工具集perftest里的ib_write_bwib_write_bw -a -d mlx5_0“-a”表示自动协商两端都要指定。测试时看两个指标第一个是带宽第二个是延迟。IB跑起来之后单端口带宽和时延应该都会远优于万兆以太网。我这里提一个平时很多人不明白的点IB标称的200Gbps是单端口的双向传输能力。实际你要测达到多高得看网卡端口的实际链路速率是多少比如HDR单端口是200Gbps但部分网卡是100Gbps速率的HDR100你拿HDR100网卡去连HDR交换机速率就只有100Gbps。这不是故障是硬件匹配问题。很多人装上之后发现带宽只有标称的一半各种排查一整天最后才发现是网卡速率标的是HDR100这事儿我遇到过说多了都是泪。4.4 链路“默认”协商到低速率这里呼应一下开头提到的热搜词“tp r483g 5.0全千兆路由器连接火翼千兆交换机lin口只分配了10兆网络”。其实IB相关的场景里也有类似的现象不过表现方式是交换机和网卡的物理链路明明都支持HDR却协商到EDR甚至更低的速率。这种“协商降级”在以太网里常见在IB里也会发生。最典型的原因有几种原因类型具体表现排查方式线缆代际不匹配HDR网卡接EDR线缆协商结果只会是EDR查看线缆上的标签确认线缆支持速率线缆损坏/质量差链路能up但速率协商到低代际换线测试端口配置被限制交换机端口被管理软件强制为某种速率登录管理界面检查端口配置我的建议是在交换机上能设置端口速率的尽量手动固定到目标速率避免自动协商过程中偶发的降级。不过注意交换机端口做了强制两端网卡也得匹配否则直接起不来。这个操作等于手动锁死链路换线、挪机柜后最容易引发“链路怎么都起不来”的次生问题所以不建议在没有特殊情况时强制。5. 从局域网到高性能网络的扩展思考很多人看完会说我家里组网用不到InfiniBand用不上这套东西。确实普通办公、家庭场景万兆以太网已经绰绰有余IB的协议复杂度和成本不是普通用户需要考虑的。但IB里面有几件事是值得借鉴到普通网络环境里的链路的“协商”与“验证”分开处理。家里的千兆设备协商到10兆大部分人会去换网线却很少有人去查“协商到10兆的原因到底是不是端口速度被强制了”。IB的习惯是判断问题先看物理层状态再看配置层逻辑顺序清晰。网络的隔离与分区设计。IB的分区类似普通交换机的VLAN一次性规划好后面才不会混乱。家用网络也是一样企业办公网络更是如此。参数匹配优先级很高。IB网卡速率要跟交换机端口匹配错一点就连不上。家里路由器明明是千兆口你却买了根百兆标签的网线瓶颈就在这。查了半小时软件配置结果是线的问题这种经历大家应该都有。我这个经验是从大量配置IB和以太网设备的过程中积累下来的核心就一句慢一点先建立清晰的排查逻辑再动手比盲目果断有效得多。IB换线、换模块、换配置每一步都要记录日志级别调高这样真出问题时你手里的证据链是完整的而不是靠猜。另外无论是IB网络还是普通路由交换网络你都应该养成一个习惯——把关键设备的型号、固件版本、速率模式、线缆长度这些信息做成台账。很多人觉得这种台账可有可无但等到线上出问题你连“这台交换机的型号是什么”、“这几个端口当初谁接的线”都答不出来的时候就会体会到有条理带来的便利了。InfiniBand是一个不太容易进新手村的领域但一旦进入它给你带来的网络视野和对数据传输底层逻辑的理解是普通以太网给不了的。希望这篇文章能把你的第一个IB网络从“点不亮”带到“跑满带宽”。
返回列表