3. Infiniband架构:物理层、链路层、网络层、传输层协议栈详解
3.1 协议栈分层总览
InfiniBand(IB)协议栈并非简单的“网络模型套壳”,而是为高带宽、低时延、低CPU占用而生的专用分层体系。与TCP/IP协议栈相比,IB将可靠性、流控、路由与拥塞管理下沉到硬件实现,从而绕开操作系统内核的软件开销。其分层结构自上而下为:传输层(Transport Layer)、网络层(Network Layer)、链路层(Link Layer)与物理层(Physical Layer)。每一层都有明确的报文封装格式与职责边界,层间通过标准化的“原语”交互,确保不同厂商的HCA(Host Channel Adapter)、交换机与线缆能够互操作。
3.2 物理层:从信号到链路建立
物理层定义了IB端口与线缆之间的电气接口、连接器类型、信号速率以及链路训练机制。IB物理层采用自协商(Auto-Negotiation)流程,在链路初始化阶段自动匹配双方速率与宽度。一个IB端口可包含1x、4x、8x或12x通道(Lane),每个通道独立传输差分信号。例如,HDR(High Data Rate)单通道速率为50Gbps,4x端口即提供200Gbps聚合带宽。
物理层还负责链路状态机的管理,包括:禁用(Disabled)、初始化(Initialize)、训练(Training)、激活(Active)等状态。当线缆插入或对端设备重启时,物理层通过发送训练序列(TS1/TS2)完成位同步、符号对齐与通道间偏移补偿。值得注意的是,IB物理层并不包含复杂的均衡算法(如PAM4),而是依赖高质量线缆与接收端CDR电路来保证信号完整性。
| 速率代际 | 单通道速率 | 4x端口聚合速率 | 典型线缆类型 |
|---|---|---|---|
| EDR | 25 Gbps | 100 Gbps | 铜缆(≤3m)/ 光模块 |
| HDR | 50 Gbps | 200 Gbps | 光模块(QSFP56) |
| NDR | 100 Gbps | 400 Gbps | 光模块(QSFP-DD) |
3.3 链路层:可靠传输的基石
链路层是IB协议栈中最具特色的层次,它同时承担了寻址转发与可靠性保障的双重职责。每个IB端口在子网内被分配一个16位的本地标识符(LID),交换机依据LID进行二层转发。链路层帧格式包含:LRH(8字节)、GRH(仅在跨子网时存在,40字节)、数据载荷、ICRC(4字节)与VCRC(2字节)。其中,VCRC覆盖LRH与数据,而ICRC覆盖GRH与数据,这种分离设计使得交换机在转发时无需重新计算VCRC,从而降低转发时延。
链路层的另一核心机制是基于信用的流控(Credit-Based Flow Control)。接收方为每个虚拟通道(VL)维护一个信用计数器,发送方只有在收到信用授权后才能发送数据包。这种机制从根本上避免了缓冲区溢出导致的丢包,使得IB网络在满载情况下依然保持零丢包。此外,链路层还支持链路层重传(Link-Level Retry),当检测到CRC错误时,接收方发送NAK,发送方从重传缓冲区中恢复数据。
ibstat 命令可查看链路层状态,重点关注 State: Active 与 PhysicalState: LinkUp。若出现 State: Init 或 PhysicalState: Polling,说明链路训练未完成,需检查线缆或对端端口配置。
3.4 网络层:跨子网路由与GID寻址
当IB网络规模超过单个子网(通常最多数千节点)时,需要网络层实现跨子网通信。IB网络层使用全局路由头(GRH),其中包含128位的源GID与目的GID。GID由64位子网前缀(Subnet Prefix)与64位端口GUID拼接而成,类似于IPv6地址结构。路由器(IB Router)根据GID中的子网前缀进行转发决策,将数据包从一个子网传递到另一个子网。
网络层还负责分区(Partition)的跨子网校验。每个数据包携带P_Key(16位分区密钥),接收端HCA会验证P_Key是否匹配,不匹配的数据包将被丢弃。这种机制确保了多租户环境中租户间的强隔离。值得注意的是,IB网络层并不提供分片与重组功能,因此跨子网通信时MTU必须保持一致(通常为4096字节),否则路由器会丢弃超长包并发送错误通知。
# 查看子网管理器分配的路由信息(示例)
# 在子网管理器节点上执行
sminfo -c # 显示当前子网管理器配置
ibroute -n 0x1 # 显示LID为1的交换机路由表
3.5 传输层:QP状态机与可靠服务
传输层是IB协议栈的“智能核心”,它向上层应用提供队列对(QP)抽象。每个QP由发送队列(SQ)与接收队列(RQ)组成,应用通过提交工作请求(WR)驱动数据传输。传输层定义了四种服务类型:可靠连接(RC)、不可靠连接(UC)、可靠数据报(RD)与不可靠数据报(UD)。其中RC服务使用最广泛,它提供端到端的确认、重传、排序与流控,适用于存储与HPC应用。
传输层报文头(BTH)包含关键字段:OpCode(标识操作类型,如Send/Write/Read/Atomic)、目的QP号(24位)、PSN(24位包序号)与A-key(用于内存保护)。QP状态机包括复位(Reset)、初始化(Init)、就绪接收(RTR)、就绪发送(RTS)与错误(Error)等状态。QP必须经过严格的状态迁移才能开始数据传输,例如从Init迁移到RTR需要调用 ibv_modify_qp 并设置正确的P_Key与访问权限。
ibstat 的 LinkLayerRetrans 字段),通常表示物理链路存在信号质量问题,而非软件拥塞。
3.6 案例:RDMA写操作跨层协作流程
以一次典型的RDMA Write操作为例,展示各层如何协同工作。假设节点A要向节点B的某段内存写入数据:
- 应用层:节点A的应用调用
ibv_post_send,提交一个WR,指定QP、目的地址、本地内存地址与长度。 - 传输层:HCA硬件将WR封装为传输层报文,分配PSN,填入OpCode(RDMA_WRITE_FIRST/MIDDLE/LAST),并启动重传定时器。
- 网络层:若节点A与B不在同一子网,HCA添加GRH头,填入目的GID;若在同一子网,则跳过GRH。
- 链路层:添加LRH头,填入目的LID与源LID,计算ICRC与VCRC,通过信用机制发送到交换机。
- 接收端:节点B的HCA逐层解封装,校验CRC与P_Key,传输层检查PSN连续性,将数据直接DMA写入应用指定的内存地址,并生成完成队列(CQ)事件通知应用。
整个过程无需节点B的CPU参与数据拷贝,这正是IB实现零拷贝与内核旁路的关键。从应用发起WR到接收端完成事件,典型时延可低至1微秒以内。
3.7 误区与复盘:分层理解中的常见偏差
- 误区一:将IB链路层等同于以太网MAC层。实际上,IB链路层不仅负责寻址,还承担了端到端流控与链路级重传,而以太网MAC层不具备这些能力。
- 误区二:认为IB网络层等同于IP层。IB网络层不提供分片、不分优先级(优先级由SL字段在链路层实现),且GID是扁平地址而非层次化路由地址。
- 误区三:混淆QP与TCP连接。一个QP可以承载多个应用流(通过不同的操作码区分),而TCP连接是单流的。此外,QP的建立需要子网管理器参与(分配LID),而TCP连接仅需IP地址与端口。
- 复盘建议:排查IB性能问题时,应逐层检查:物理层看信号强度与误码率(
ibdiagnet),链路层看CRC错误与重传计数,网络层看路由表与P_Key配置,传输层看QP状态与CQ错误。切忌直接跳到应用层分析。