简介:InfiniBand 架构 Release 2.0 规范以 PDF 形式打包,文件总数 1 个,包体约 15.14MB,属于第 2 卷物理层规范终稿,专门讲解高速电气接口。这份规范面向 RDMA 网络、高性能计算集群、智能网卡与交换机等场景,适合硬件工程师、信号完整性测试人员和协议研究者参考,用于理解 InfiniBand 物理层的定义、测量方法和合规要求。文档中不仅给出 QDR 速率链路的驱动器输出特性与眼图掩模参数 X/Y1/Y2,还定义了这些参数在 100 欧姆差分负载下对应的电压幅值要求,并整理了确定性抖动、总抖动、单位间隔 UI 等关键指标;对 FDR 主机发射机则参照 IEEE 802.3、OIF-CEI、ANSI T11 FC-PI-5 等已有高速串行标准展开说明,明确三抽头 FIR 均衡、16 种预置设置与 AMP 幅度档位,使 10.3~28 Gb/s 范围的信号规范有据可依。同时,文档强调测试点 TP6 处的合规判定,对线缆类型、接收端动态范围、预设均衡等实际工程参数均有约束,可作为高速互连硬件开发与验证的重要参考。目前已有 91 人学习,适合想要系统研究 InfiniBand 物理层规范、开展一致性测试或做高速互连方案评估的工程与科研人员。
1. IB Specification Vol 2-Release-2.0-Final-2025-07-31 在管什么:一份物理层规范怎么变成验收清单
IB Specification Vol 2-Release-2.0-Final-2025-07-31 在 InfiniBand 生态里,对应的是架构规范第 2 卷,也就是物理层那一卷的最新定稿。做 AI 集群和 HPC 的人平时嘴上说「IB 起来了」「IB 断了」,真正排障时最先要查的往往不是报文和路由,而是链路速率协商不上、误码率压不下去、换一柜光模块就翻车——这些答案基本都落在 Vol 2 里。
这一卷管的是最底层的硬参数:每 lane 信号速率、NRZ/PAM4 调制方式、误码率目标与 FEC 码型、连接器与线缆光模块的电气机械口径、管理接口要暴露哪些诊断字段。对集群管理员和硬件验收工程师来说,它最大的价值不是拿来背,而是能让你把「看起来 Active」和「真合规」分开:端口亮绿灯并不等于信号余量够,带宽腰斩时也不是先怪网卡。
下面按「规范读什么 → 参数怎么落成测试 → 哪里容易踩坑」来写,每一步都给出可以直接抄的命令或核对表。
2. 从规范到验收项:把 Vol 2 读成三张参数表
2.1 先定位:Vol 2 在这个规范体系里管哪一段
IB 规范按卷切分:Vol 1 讲报文、路由和子网管理,Vol 2 专管物理层,Vol 3 落在管理面,Vol 4 是 Verbs 软件接口。本标题里的 Vol 2 就是要解决「一条物理链路从模块引脚到对端接收器之间,哪些参数必须达标」的问题。Release-2.0-Final-2025-07-31 表示这份定稿在 2025 年年中才封版,末尾的「- 3」在分卷出版惯例里一般指向卷内第 3 分册,内容会落到连接部件与信号完整性这一类条目上。
拿到这份规范,不建议从头读到尾。实际阅读策略是先认目录,找到三块就够了:链路速率与调制、误码与 FEC、模块管理诊断。这三块正好对应你做验收时的三个动作:核对端口类型、定判据、测模块健康。我一般会先画一张这样的对应表,再决定每步该敲什么命令。
| 阅读对象 | 规范里对应内容 | 落地到哪一步 |
|---|---|---|
| 速率与调制 | 每 lane 信号速率、调制方式 | 端口类型核对、线缆选型 |
| 误码与 FEC | BER 目标、FEC 码型、纠错模式 | 验收判据、压力测试 |
| 管理诊断 | 模块寄存器字段、DDM 参数 | 光功率读取、固件兼容排查 |
2.2 链路速率与调制:把速率档位表落成测试档位
Vol 2 里最常被翻的就是速率档位表。SDR、DDR、QDR 这些老档位在现网已经很少见,2025 年这个时间点主要看三档:EDR、HDR、NDR。四 lane 端口的完整速率分别对应 100G、200G、400G,这是你选卡、选线、选交换机端口类型的基准。
| 链路档位 | 每 lane 数据速率 | 调制方式 | 4-lane 端口速率 | 常见 FEC |
|---|---|---|---|---|
| EDR | 25 Gb/s | NRZ | 100 Gb/s | RS-FEC |
| HDR | 50 Gb/s | PAM4 | 200 Gb/s | RS-FEC |
| NDR | 100 Gb/s | PAM4 | 400 Gb/s | RS-FEC |
HDR 还有个变体 HDR100,走 2 lane,端口速率降为 100G,常见于 CPU 内嵌网卡或功耗受限节点。这里要先讲清一个判断逻辑:为什么 HDR 之后必须换 PAM4。单 lane 25G NRZ 继续往上提频率,PCB 走线、连接器、铜缆的损耗都会让眼图快速闭合;PAM4 用同一波特率携带 2 bit,是成本更低的选择,但三电平眼图的噪声容限比 NRZ 窄得多,所以从 HDR 开始,FEC 从「可选项」变成「必选项」。
落到验收时,你第一件事不是看线能不能亮,而是确认链路协商档位与你的硬件声称一致。我见过不少机器,网卡是 NDR,结果插了一根只支持 HDR 的老 AOC,协商结果掉到 HDR200,ibstat里 Rate 显示 200,但很多人只看 Active 就放行了。要把档位表背在心里,再对着工具输出核对。
2.3 误码率与 FEC:把「规范要求」换成命令与判据
Vol 2 对物理层链路质量的核心目标一般落在无错传输,业界习惯叫 BER 做到 1E-15,但实际排障时不看这个数——你没有办法直接量到 1E-15。真正可观测的是两层:FEC 纠错前(pre-FEC)的原始误码,以及 FEC 纠错后的符号错误计数。PAM4 链路的原始误码可以到 1E-5 甚至 1E-6 量级,靠 RS-FEC 拉回来,所以验收要分两层看:单次链路建立看状态机,长时间运行看错误计数增长。
以下三条命令是链路巡检的基本组合。第一条用ibstat抓状态与速率,第二条用mlxlink看 FEC 模式和信号质量,第三条直接读内核计数器。mlxlink 在 NVIDIA 的 mft 工具包里,没有装 vpi 驱动栈的机器会找不到命令。
# 基础链路巡检:只过滤关键字段 ibstat | awk -F': ' '/State:|Physical state:|Rate:|Link layer:/{print $1": "$2}' # FEC 与信号质量(需要 mft 包,NVIDIA 网卡适用) mlxlink -d mlx5_0 | grep -E "Active FEC|Supported FEC|BER|Link Speed|Temp" # 符号错误计数,观察压力测试前后的增量 cat /sys/class/infiniband/mlx5_0/ports/1/counters/symbol_error第一段 awk 过滤掉大量无关行,直接输出 State、PhysState、Rate、LinkLayer 四个字段。注意ibstat的输出里State:前面有空格,-F': '能正确分开字段。mlxlink里的-d mlx5_0是设备名,多卡机器可以用ibstat先看有哪些mlx5_n。第三行计数器文件路径里的端口号也可能不是 1,多口卡要对应修改。
如果mlxlink没装,RoCE 模式下的网口可以临时用ethtool --show-fec <eth>顶上,但 InfiniBand 模式没有 eth 接口,最后还是得装 mft。排障时这三个命令各跑一次,基本能定位到「是协商档位问题、FEC 没开、还是物理信号劣化」。
2.4 管理接口与模块诊断:CMIS 字段怎么对表
光模块和 AOC 线缆里的管理页是 Vol 2 容易被忽略的一块。模块里有 EEPROM 寄存器页,按 CMIS 这类管理规范组织,记录模块类型、支持的速率上限、温度、电压、收发功率等诊断字段。为什么要对这张表?因为很多「链路起不来」根本不是信号问题,而是模块宣称的能力和链路协商结果不一致。
验收时我习惯对三个字段:Module type 看模块是光还是铜、Rate capability 看宣称支持的最高档位、Rx power 看接收光功率是否有有效值。光模块的 DDM 诊断字段如果读出 UNKNOWN,链路却 Active,说明模块固件没正确填写管理页,这种模块在后续固件升级时很容易变成兼容性问题。
| 字段 | 含义 | 验收关注点 |
|---|---|---|
| Module type | 模块类型 | 光/铜要与链路档位匹配 |
| Rate capability | 宣称支持的速率上限 | 至少盖过目标档位 |
| Rx power | 接收光功率 | 有有效值且不越界,UNKNOWN 要查兼容 |
读这些字段的常见做法有两条:有 mft 工具就用它的模块 dump 子命令直接读 CMIS 页;没有工具就把端口临时切成 RoCE 模式,用ethtool -m <eth>导出寄存器十六进制再解析。前者更省事,后者适合手边只有以太网工具的场景。注意,解析 CMIS 页要对着管理规范里的页偏移表来,网上流传的 SQL 脚本多半过时,最好以 CMIS 最新 PDF 的表格为准。
3. 链路训练与你以为的「Active」:状态机里的翻车学区
3.1 链路训练状态机:从 Down 到 Active 要过哪些状态
链路训练是 Vol 2 里最容易被略读、又最能解释诡异现象的一节。很多人以为 IB 链路就像插电一样,插上就亮,其实两端端口要交换训练帧,完成信号检测、时钟恢复、FEC 能力协商、lane 速率对齐和重映射,才进 Active。整个过程在物理层状态机里表现为 Sleep、Poll、Config、Training、LinkUp,最后再被管理面推进到 Init、Armed、Active。
经验上,物理状态停在 Training,多半是信号质量或模块兼容问题,比如 PAM4 眼图闭合到训练帧都解不出来;停在 Poll,多半是对端根本没上线或者线序不对;停在 Config,要优先看两端 FEC 能力和速率档位是否一致。这里有个容易被忽略的细节:管理面看到的 PortState 是 Active,并不代表物理层状态机已经稳定,尤其是热插拔刚完成的那几秒,状态会来回抖动。
所以验收脚本里不能只看 State,要把 Physical state 也抓出来。我一般会要求它们满足「State: Active + Physical state: LinkUp」同时成立,才认为一次建链成功。只取一个字段,等于给后续排查埋雷。
3.2 抓训练结果:用一组命令组合做 16 机巡检
做多节点验收时,逐台登录敲命令太低效。常见做法是写一个短循环,批量收集所有节点的端口状态、速率、固件版本,统一输出到终端或文件。下面的脚本适用于 4 台到几十台的小集群,节点名按实际调整。
for h in node01 node02 node03 node04; do echo "===== $h =====" ssh -o ConnectTimeout=3 "$h" \ 'ibstat | awk -F": " "/State:|Physical state:|Rate:|Port number:|Firmware version:/{print}"' \ 2>&1 | grep -v "Warning:" done循环体里的ssh -o ConnectTimeout=3是连接超时上限,节点宕机时不至于让整个巡检卡几分钟;ibstat的 awk 过滤条件我用了正则而不是精确字段,因为Physical state:的取值有时带空格后缀,正则更稳。grep -v "Warning:"去掉 OFED 常见警告行,减少干扰。如果机器没有安装 infiniband-diags 用户态工具,ibstat会直接报 command not found,先补装对应系统的用户态包再跑。
单点链路起不来的情况,再用ibdiagnet做整体巡检。它的输出包括拓扑、链路状态和错误摘要,适合在批量巡检后二次确认:
ibdiagnet -t 10 2>&1 | tail -30-t 10是巡检超时,单位秒,建议别小于 5,否则大拓扑还没扫完就被切断。输出里的 error count 是排障关键字段,比单个节点的 ibstat 更容易暴露「某条链路其实在反复重训」。
3.3 时序与热插拔联动:物理层状态机的第二个坑
链路训练不只跟信号质量有关,还跟时序强相关。常见场景:机器上电后网卡先开始发训练帧,光模块自己的 CMIS 状态机还没初始化到 Ready,导致对端收到的训练帧全部无效,几次超时后链路停在 Training。这时候你拔了重插,往往就好了,因为模块已经就绪。这不是玄学,是两端初始化时序没对齐。
解决思路不是改规范,而是调整操作顺序:先让节点和模块上电稳定,等几秒再做链路重训,避免连环拔插。确需快速复位单端口时,用 OFED 自带的端口状态工具:
ibportstate -G <lid> <port> reset-G后面跟目标 lid,lid 可以从ibstat输出里读;<port>是端口号。这条命令会短时打断链路,要在维护窗口里用。热插拔后的正确动作顺序是:拔线后等 3 秒以上再插,插完观察 Physical state 能不能从 Training 走到 LinkUp,不行再 reset 端口,不要一上来就 reset 整机。
4. 线缆、光模块与连接器:Vol 2 的选型边界和兼容性实坑
4.1 无源铜缆的长度边界:什么时候别省那几百块
无源铜缆 DAC 是机柜内互联最省钱的方案,但它的长度边界一直在缩水。EDR 时代 3 米无源 DAC 还能跑得稳,HDR 开始建议控制在 2 米以内,NDR 更是如此。超过长度的典型表现不是直接不通,而是开机 Active、高负载错包,错误计数慢慢涨——这种问题最磨人,因为链路状态看起来完全正常。
原因要从信号完整性讲:PAM4 的三电平眼图对串扰和衰减都更敏感,相同长度下无源铜缆的插入损耗已经接近接收端均衡能力的上限。ACC 和 AEC 线缆的区别就在这个边界上:ACC 在连接器端做模拟均衡,AEC 在线缆内做数字重定时,实质是把信号完好度的问题从交换机口转移到线缆里。选型时我的习惯是:2 米内用无源 DAC,2 到 5 米用 AEC,超过 5 米直接上 AOC 或光模块,中间档位最容易省出隐患。
落到验收指标上,看两点:一是mlxlink里 pre-FEC BER 的余量,二是symbol_error计数在满负载测试前后的增量。如果计数在涨,先换根短一档的线试试,这是定位无源 DAC 信号余量问题最快的办法。
4.2 光模块功率预算与 AOC 的现实
IB 生态里 AOC 占了很大比例。它对用户的好处是省心——光模块和线缆一体,不需要额外清洁和匹配;但也有代价,你没法单独换模块,出问题就是整根换。所以 AOC 的验收重点和可插拔光模块略有不同:可插拔模块看功率预算是否充足,AOC 更多看温度管理和长期误码趋势。
| 检查项 | 经验关注范围 | 超界现象 |
|---|---|---|
| 接收光功率 | -7 到 -3 dBm 区间较安稳 | 低于 -10 dBm 时误码明显上升 |
| 模块温度 | 常温 40-60 ℃ | 超 70 ℃ 时开始掉带宽 |
| FEC 纠错计数 | 0 或低速增长 | 高速增长说明链路余量不足 |
接收光功率这个值在 AOC 里也能读,早期很多 AOC 固件不填 DDM,读出来是 UNKNOWN,这种线不影响链路功能,但会影响你排障时的信息来源。另一个陷阱是温度:AOC 的光电转换耗电不小,一柜 16 端口跑满时模块区温度会比环境高不少。我见过一个整柜偶发掉链路的案例,最后定位就是模块温度连续几天 75℃ 以上,光模块的激光器寿命和眼图都开始劣化。
4.3 QSFP112/OSFP 连接器:不只看速率
NDR 时代连接器出现 QSFP112 和 OSFP 两种口径。选型时容易只看速率,忽略两个物理约束:散热和结构。OSFP 连接器比 QSFP 大一圈,自带更高散热片,但占面板开口也更大。机柜风道如果本来是按 QSFP 密度设计的,硬塞 OSFP 整柜容易局部过热。
第二个容易翻车的点是屏蔽罩与拉手条的接触。高速链路对 EMI 敏感,屏蔽罩接地不良会让偶发错误率上升,而且很难复现。验收时别只看单端口能不能起来,要在整柜满载时扫一轮ibdiagnet,对比空载和满载的错误计数差异。差异明显先怀疑散热和接触,再怀疑线缆本身。
5. 避坑:5 条读 PDF 时看不出来的物理层验收翻车记录
5.1 现象:State Active,带宽却只有一半
现象是一条链路状态显示 Active,压测带宽却只有预期的一半,ib_send_bw结果上下浮动。原因大概率是 FEC 模式没协商对:两端一端强制 RS-FEC,另一端协商到无 FEC 或老式检测码,链路整体降级。解决先看两端mlxlink的 Active FEC 字段,把它强制统一到同一模式再重训。不同 OFED 版本的设置参数不通用,以mlxlink --help里的 fec 子命令为准,不要照抄老博客。
5.2 现象:换一柜新模块,端口全部起不来
现象是批量更换光模块后,整批端口停在 Down 或 Training,单模块测试也没问题。原因通常不是模块坏了,而是新模块的管理页字段或固件版本不在交换机固件的兼容列表里,物理层协商直接失败。解决先拿一个模块做 AB 互换,排除单点故障;再看交换机侧日志里的拒绝原因;最后升级交换机固件或换回兼容列表内的模块批次。不要在这时候反复重训,越重训越混淆问题。
5.3 现象:热插拔后端口一直停在 Training
现象是刚上电时插 AOC 起不来,拔了重新插就正常。原因大概率是模块 CMIS 状态机还没初始化完成,网卡的训练帧发过去没人应答。解决是插线前等模块上电稳定,至少留 3 到 5 秒;还是不行的,用ibportstatereset 端口,不要反复拔插。拔插动作本身会带来金手指磨损和静电风险,热插拔不是高频操作。
5.4 现象:光功率诊断读出来全是 UNKNOWN
现象是链路正常,但读模块波长、光功率、温度全无值。原因多是 AOC 固件没实现 DDM 字段,少数是管理页 I2C 地址冲突。解决是先确认模块类型和固件版本,再到 CMIS 规范里找对应页偏移和长度,排除读取路径错误;如果确认是固件没写,不影响链路就继续用,但要在验收单里标记该批次模块诊断不可用,后续排障时少一个信息源。
5.5 现象:压力测试错误计数缓慢增长
现象是封箱测试前两小时正常,之后symbol_error和link_error_recovery计数缓慢上涨,链路不掉但带宽毛刺变多。原因多是线缆长度接近规格边界,或连接器金手指氧化、屏蔽罩接触变差,信号余量临界。解决是换标准长度线缆交叉验证,清洁金手指后重测;如果换线后计数归零,根本原因就是原来的线或连接器余量不足。此时不要用强制固定 FEC 码型来掩盖,那是把问题推迟到下一次夏季高温或满载扩容时再爆。
6. 进阶:把规范参数固化成一份可复现的链路验收记录
验收不只是「当时能通」,还要留下可追溯的记录,下次出问题时能回查基线。我的做法是把每次验收跑成一张 CSV,字段包含主机名、网卡固件版本、序列号、协商速率、端口状态、物理状态,后续故障回查时先对比这张表,能过滤掉一半的环境因素。下面的脚本按这个思路实现,适合 16 节点左右的规模。
#!/usr/bin/env bash # 批量收集 IB 链路参数,留档 CSV,避免验收只留一张截图 out="ib_acceptance_$(date +%Y%m%d).csv" echo "host,fw,serial,rate,state,phys_state" > "$out" for h in node0{1..16}; do fw=$(ssh -o ConnectTimeout=5 "$h" ibstat 2>/dev/null | awk -F': ' '/Firmware version/{print $2; exit}') sn=$(ssh -o ConnectTimeout=5 "$h" ibstat 2>/dev/null | awk -F': ' '/Serial number/{print $2; exit}') rate=$(ssh -o ConnectTimeout=5 "$h" ibstat 2>/dev/null | awk -F': ' '/Rate/{print $2; exit}') st=$(ssh -o ConnectTimeout=5 "$h" ibstat 2>/dev/null | awk -F': ' '/State/{print $2; exit}') pst=$(ssh -o ConnectTimeout=5 "$h" ibstat 2>/dev/null | awk -F': ' '/Physical state/{print $2; exit}') echo "$h,$fw,$sn,$rate,$st,$pst" done | tee -a "$out"脚本里awk -F': '把ibstat的Firmware version: 22.34.1000这类行切成字段,取第二段;exit保证每个字段只取第一次出现。注意这个版本每台机器要建立多个 SSH 会话,16 台规模没问题,更大规模建议改成一次ssh把整份ibstat抓到本地后再解析,减少连接次数。CSV 里的 FEC 模式字段在基础脚本里没带,需要的话把mlxlink的输出也追加进同一行,字段一多格式就越来越接近规范里的参数表。
我吃过一次亏:新到 16 台机器,当时只看 State 是 Active 就签了验收,半个月后跑训练任务,同一批节点反复掉带宽。最后定位是两台机器 FEC 模式不一致,链路协商降级,而问题从一开始就存在,只是浅负载下没暴露。后来我把「先读 Vol 2 的物理层参数,再写验收脚本」当成习惯,每次把固件、序列号、速率、FEC 状态都留档,链路一波动先回查基线,思路会比「猜交换机是不是坏了」清晰得多。希望这个流程和脚本能帮你把物理层验收从「能亮就算过」往前推一步,希望帮到你。
本文还有配套的精品资源,点击获取