RDMA-InfiniBand基本传输头BTH分析(三)

1.概述

IBA传输层的基本传输头(Base Transport Header)定义了InfiniBand的事务类型,同时也实现了报文确认与重传功能,是IBA协议的核心部分。RoCE、RoCEv2、veRoCE、iWARP等RDMA改进协议,都是通过保留BTH来兼容RDMA协议。

2.格式

如下图所示,BTH长度为12字节。

BTH中各个位域的意义如下表所示,其中OpCode定义了InfiniBand的事务类型,总共分为6大类,分别是可靠连接(RC)、不可靠连接(UC)、不可靠数据报(UD)、可靠数据报(RD)、拥塞通知报文(CNP)、扩展可靠连接(XRC)

Field Name Field Abbreviation Field Size (in bits) Description
Opcode OpCode 8 该字段标识 IBA 数据包的类型。OpCode 同时指明在基础传输头(Base Transport Header)之后所跟随的扩展头类型。
Solicited Event SE 1 该比特指示接收端是否需要生成一个事件(Event)。
MigReq M 1 该比特用于传递迁移(Migration)状态信息。
Pad Count PadCnt 2 该字段指示为了将有效载荷对齐到 4 字节边界而附加的填充字节数量。
Transport Header Version TVer 4 该字段指示 IBA 传输层头部(Transport Headers)的版本号。
Partition Key P_KEY 16 该字段指示该数据包所属的逻辑分区(Partition)。
F/Res1* F/R 1 F(FECN):为 0 表示未接收到 FECN 拥塞指示;为 1 表示该数据包经过了发生拥塞的节点。Res1*:发送时置 0,接收时忽略。该字段不包含在不变 CRC(Invariant CRC)计算中。
B/Res1* B/R 1 B(BECN):为 0 表示数据包未经过拥塞点,或虽经过但未被标记;为 1 表示该头部所指示的数据包经历了前向拥塞。B 位在 ACK 或 CN BTH 中被置位。Res1*:发送时置 0,接收时忽略。该字段不包含在不变 CRC 计算中。
Reserved (variant) 6 发送时置 0,接收时忽略。该字段不包含在不变 CRC(Invariant CRC)计算中。
Destination QP DestQP 24 该字段标识目的端的工作队列对编号(Work Queue Pair Number,简称 QP)。
Acknowledge Request A 1 该比特用于指示接收端需要为该数据包调度并发送一个确认(ACK)。
Reserved 7 发送时置 0,接收时忽略。该字段包含在不变 CRC(Invariant CRC)计算中。
Packet Sequence Number PSN 24 该字段用于检测数据包是否丢失或重复,用于保证传输的可靠性和有序性。

2.1.OpCode

Code[7-5] Code[4-0] Description Packet Contents following the Base Transport header Code[4-0] 语义解释 Code[7-5] 服务解释
000 Reliable Connection (RC) 00000 SEND First PayLd 多包SEND的第一个分段 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 00001 SEND Middle PayLd SEND中间分段 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 00010 SEND Last PayLd SEND最后分段,触发确认 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 00011 SEND Last with Immediate ImmDt, PayLd 最后分段并携带立即数,接收方产生确认 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 00100 SEND Only PayLd 单包SEND Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 00101 SEND Only with Immediate ImmDt, PayLd 单包SEND + Immediate Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 00110 RDMA WRITE First RETH, PayLd RDMA WRITE首包,含远程地址信息 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 00111 RDMA WRITE Middle PayLd WRITE中间分段 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 01000 RDMA WRITE Last PayLd WRITE最后分段,触发确认 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 01001 RDMA WRITE Last with Immediate ImmDt, PayLd WRITE结束并携带立即数,触发确认 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 01010 RDMA WRITE Only RETH, PayLd 单包WRITE,触发确认 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 01101 RDMA WRITE Only with Immediate RETH, ImmDt, PayLd 单包WRITE + Immediate,触发确认 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 01110 RDMA READ Request RETH RDMA读请求 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 01111 RDMA READ response First AETH, PayLd 读响应首包 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 10000 RDMA READ response Middle PayLd 读响应中间包 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 10100 RDMA READ response Last AETH, PayLd 读响应最后包 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 10001 RDMA READ response Only AETH, PayLd 单包读响应 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 10010 Knowledge AETH 确认包(类似ACK) Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 10011 ATOMIC Acknowledge AETH, AtomicAckETH 原子操作确认 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 10100 CmpSwap AtomicETH 比较并交换原子请求 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 10101 FetchAdd AtomicETH 读取并相加原子请求 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 10110 Reserved Undefined 保留 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 10111 SEND Last with Invalidate IETH, PayLd 最后发送并使远程内存失效 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
000 Reliable Connection (RC) 11000-11111 Reserved undefined 保留范围 Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景
001 Unreliable Connection (UC) 00000 SEND First PayLd 多包 SEND 的首个分段 Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 00001 SEND Middle PayLd SEND 中间分段 Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 00010 SEND Last PayLd SEND 最后分段 Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 00011 SEND Last with Immediate ImmDt, PayLd 结束分段并携带 Immediate 数据 Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 00100 SEND Only PayLd 单包 SEND Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 00101 SEND Only with Immediate ImmDt, PayLd 单包 SEND + Immediate Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 00110 RDMA WRITE First RETH, PayLd WRITE 首包(含远端地址信息) Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 00111 RDMA WRITE Middle PayLd WRITE 中间分段 Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 01000 RDMA WRITE Last PayLd WRITE 结束分段 Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 01001 RDMA WRITE Last with Immediate ImmDt, PayLd WRITE 结束并通知对端 Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 01010 RDMA WRITE Only RETH, PayLd 单包 WRITE Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 01101 RDMA WRITE Only with Immediate RETH, ImmDt, PayLd 单包 WRITE + Immediate Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
001 Unreliable Connection (UC) 01110 Reserved undefined 保留操作码 Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流
010 Reliable Datagram (RD) 00000 SEND First RDETH, DETH, PayLd 可靠 Datagram SEND 首包 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 00001 SEND Middle RDETH, DETH, PayLd SEND 中间包 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 00010 SEND Last RDETH, DETH, PayLd SEND 结束包 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 00011 SEND Last with Immediate RDETH, DETH, ImmDt, PayLd 结束并携带 Immediate Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 00100 SEND Only RDETH, DETH, PayLd 单包 SEND Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 00101 SEND Only with Immediate RDETH, DETH, ImmDt, PayLd 单包 SEND + Immediate Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 00110 RDMA WRITE First RDETH, DETH, RETH, PayLd WRITE 首包 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 00111 RDMA WRITE Middle RDETH, DETH, PayLd WRITE 中间包 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 01000 RDMA WRITE Last RDETH, DETH, PayLd WRITE 结束包 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 01001 RDMA WRITE Last with Immediate RDETH, DETH, ImmDt, PayLd WRITE 结束并通知 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 01010 RDMA WRITE Only RDETH, DETH, RETH, PayLd 单包 WRITE Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 01101 RDMA WRITE Only with Immediate RDETH, DETH, RETH, ImmDt, PayLd 单包 WRITE + Immediate Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 01110 RDMA READ Request RDETH, DETH, RETH 发起远端读取 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 01111 RDMA READ response First RDETH, AETH, PayLd READ 返回首包 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 01112 RDMA READ response Middle RDETH, PayLd READ 返回中间包 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 01113 RDMA READ response Last RDETH, AETH, PayLd READ 返回结束包 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 10000 RDMA READ response Only RDETH, AETH, PayLd 单包 READ 返回 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 10001 Acknowledge RDETH, AETH 确认 ACK Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 10010 ATOMIC Acknowledge RDETH, AETH, AtomicAckETH 原子操作确认 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 10011 CmpSwap RDETH, DETH, AtomicETH Compare & Swap 原子操作 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 10100 FetchAdd RDETH, DETH, AtomicETH Fetch-and-Add 原子操作 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 10101 RESYNC RDETH, DETH QP 状态重新同步 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
010 Reliable Datagram (RD) 10110-11111 Reserved undefined 保留操作码 Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务
011 Unreliable Datagram (UD) 00000-00011 Reserved undefined 保留 Unreliable Datagram (UD) 无连接不可靠: • 无需连接建立 • 无确认与重传 • 支持多播 • 低延迟、适合广播/多播
011 Unreliable Datagram (UD) 00100 SEND only DETH, PayLd 单包SEND,带数据报头 Unreliable Datagram (UD) 无连接不可靠: • 无需连接建立 • 无确认与重传 • 支持多播 • 低延迟、适合广播/多播
011 Unreliable Datagram (UD) 00101 SEND only with Immediate DETH, ImmDt, PayLd 单包SEND + Immediate Unreliable Datagram (UD) 无连接不可靠: • 无需连接建立 • 无确认与重传 • 支持多播 • 低延迟、适合广播/多播
011 Unreliable Datagram (UD) 00110-11111 Reserved undefined 保留 Unreliable Datagram (UD) 无连接不可靠: • 无需连接建立 • 无确认与重传 • 支持多播 • 低延迟、适合广播/多播
100 CNP 00000 CNP none 拥塞通知包,由交换机或端点生成 Congestion Notification (CNP) 拥塞控制报文: • 用于基于IP的拥塞控制 • 通知发送端降低速率 • 无负载
100 CNP 00001-11111 Reserved undefined 保留 Congestion Notification (CNP) 拥塞控制报文: • 用于基于IP的拥塞控制 • 通知发送端降低速率 • 无负载
101 Extended Reliable Connection (XRC) 00000 SEND First XRCETH, PayLd XRC SEND首包,含XRCETH Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 00001 SEND Middle XRCETH, PayLd XRC中间分段 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 00010 SEND Last XRCETH, PayLd XRC最后分段 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 00011 SEND Last with Immediate XRCETH, ImmDt, PayLd 最后分段+Immediate Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 00100 SEND Only XRCETH, PayLd 单包SEND Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 00101 SEND Only with Immediate XRCETH, ImmDt, PayLd 单包SEND+Immediate Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 00110 RDMA WRITE First XRCETH, RETH, PayLd WRITE首包 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 00111 RDMA WRITE Middle XRCETH, PayLd WRITE中间分段 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 01000 RDMA WRITE Last XRCETH, PayLd WRITE最后分段 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 01001 RDMA WRITE Last with Immediate XRCETH, ImmDt, PayLd WRITE最后分段+Immediate Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 01010 RDMA WRITE Only XRCETH, RETH, PayLd 单包WRITE Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 01011 RDMA WRITE Only with Immediate XRCETH, RETH, ImmDt, PayLd 单包WRITE+Immediate Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 01100 RDMA READ Request XRCETH, RETH 读请求 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 01101 RDMA READ response First AETH, PayLd 读响应首包 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 01110 RDMA READ response Middle PayLd 读响应中间包 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 01111 RDMA READ response Last AETH, PayLd 读响应最后包 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 10000 RDMA READ response Only AETH, PayLd 单包读响应 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 10001 Acknowledge AETH 确认包 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 10010 ATOMIC Acknowledge AETH, AtomicAckETH 原子操作确认 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 10011 CmpSwap XRCETH, AtomicETH 比较并交换原子请求 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 10100 FetchAdd XRCETH, AtomicETH 读取并相加原子请求 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 10101 Reserved Undefined 保留 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 10110 SEND Last with Invalidate XRCETH, IETH, PayLd 最后发送并使远程内存失效 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
101 Extended Reliable Connection (XRC) 10111 SEND Only with Invalidate XRCETH, IETH, PayLd 单包发送并使远程内存失效 Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗
110-111 Manufacturer Specific 00000-11111 Manufacturer Specific OpCodes undefined 厂商自定义操作码 Manufacturer Specific 厂商私有扩展,非标准行为

注:所有OpCode包尾都附加ICRC和VCRC(图中未列出)。

2.2.SOLICITED EVENT(SE)

requester将该位设置为1,以指示responder调用CQ事件处理程序(触发CQE)。详细信息如下:

  1. SE位仅在SEND、SEND with Immediate或RDMA Write with Immediate的最后一个或唯一一个数据包中设置。
  2. 有关影响HCA的其他操作指南,详细参考InfiniBand协议第11.4.2.2节"请求完成通知"。

除了在SEND、SEND with Immediate或RDMA Write with Immediate操作中使用外,SE位还可以在SEND with Invalidate操作中设置。在此情况下,SE位应仅在SEND with Invalidate操作的最后一个或唯一一个数据包中设置。

2.3.MIGREQ(M)

用于表示迁移状态。如果该位设置为1,则表示连接或EE上下文已迁移;如果设置为0,则表示当前迁移状态无变化。参见参考InfiniBand协议第17章HCA中的"Automatic Path Migration"。这一机制用于自动路径迁移(APM,Automatic Path Migration)场景,目的是在不停机的情况下将通信链路切换到冗余路径上。

2.4.PAD COUNT(PADCNT)

数据包负载以4字节的倍数发送。Pad Count指示附加到数据包负载末尾的填充字节数(0-3)。填充字节用于将负载(负载长度可能为零或多个字节)对齐至4字节的整数倍。

2.5.TRANSPORT HEADER VERSION(TVER)

指定了数据包所使用的IBA传输层版本。此版本适用于所有传输层字段,包括BTH(基础传输头)、扩展头以及invariant CRC。计算invariant CRC时将TVER视为0,不管TVER具体值。如果接收方不支持指定的传输版本,则该数据包将被丢弃。

2.6.PARTITION KEY(P_KEY)

P_Key用于标识目的QP(RC、UC、UD、XRC)或EE上下文(RD)所属的分区。P_Key是一个16位的标识符,用于定义端口所属的分区。它类似于VLAN Tag在以太网中的作用,用于在网络层提供隔离和安全。每个Port和QP都维护了一个P_Key表。

  • port:每个HCA port都有一个P_Key表,列出了该port允许加入的所有分区。
  • QP:每个QP在创建时,会绑定一个P_Key索引(P_Key Index),该索引指向port P_Key表中的某一项。这个被指向的P_Key就是该QP所属的分区。

2.7.DESTINATION QP(DEST QP)

定义目的QP编号

2.8.FECN/RES1(F/RES1)

  • F(FECN):0表示未收到FECN(前向显式拥塞通知)指示;1表示数据包经过了拥塞点。
  • Res1:发送时设置为0,接收时忽略。该字段不参与invariant CRC(循环冗余校验)的计算。

前向显式拥塞通知(FECN,Forward Explicit Congestion Notification)是InfiniBand架构中一种端到端的拥塞管理机制,属于InfiniBand拥塞控制架构的核心部分。简单来说,它是一个交换机在数据包上做的"记号",用于沿着数据包的原始传输方向通知接收端:"我刚才经历的路径上发生了拥塞"。

2.9.BECN/RES1(F/RES1)

  • B(BECN): 0表示数据包未经过拥塞点,或经过拥塞点但未被标记;1表示此头部所指示的数据包经历了前向拥塞。B位是在ACK或CN的BTH中设置的。
  • Res1:发送时设置为0,接收时忽略。该字段不参与invariant CRC的计算。

2.10.ACKREQ(A)

ACKREQ(Acknowledge Request)是一个强制性的确认机制触发器。核心作用是请求接收方必须立即或尽快针对此数据包返回一个确认(ACK)消息。

InfiniBand的可靠传输服务(如RC,可靠连接)依赖于确认机制来保证数据送达。虽然数据包本身有PSN(包序列号)可以用于检测丢包,但发送方需要知道何时可以安全地释放资源(如缓冲区)以及数据是否真的被对方接收。

  • 正常情况:在连续的多包传输中,如果每一包都回复ACK,会产生大量额外的确认流量,浪费带宽。
  • 优化机制:IB协议允许接收方延迟确认(Delayed Acknowledgment),即可以多个数据包合并回复一个ACK。
  • ACKREQ的作用:当发送方需要立即知道某个特定包的接收状态时(例如发送完最后一个包、或者发送缓冲区即将耗尽),就设置ACKREQ位,强制接收方打破"延迟确认"的规则,立即回复。

2.11.PACKET SEQUENCE NUMBER(PSN)

PSN字段用于标识数据包在数据包序列中的位置。PSN由发送方生成,接收方通过PSN检测数据包是否丢失、乱序或重复。

参考资料

  1. InfiniBand TM Architecture Specification Volume1
  2. InfiniBand TM Architecture Specification Volume2
相关推荐
业余程序员plus4 天前
RDMA-InfiniBand包格式分析(二)
rdma·infiniband·lrh·bth·rdeth·reth·atomiceth
业余程序员plus5 天前
RDMA-InfiniBand总线架构简介(一)
rdma·qp·infiniband·roce·wqe·cqe·iba
三点水-here6 天前
04 - 分布式大模型推理实战:TP/PP/EP并行策略深度解析
分布式·rdma·nccl·moe·流水线并行·张量并行·专家并行
tiantianuser24 天前
RDMA设计37:RoCE v2 子系统模型设计
fpga开发·rdma·高速传输·cmac·roce v2
yusur1 个月前
边缘智算新引擎 DPU 驱动的算力革新
人工智能·科技·rdma·dpu
bandaoyu1 个月前
【RDMA】infiniband IB 流控机制
rdma
bandaoyu1 个月前
【RDMA】infinband诊断工具
rdma
tiantianuser1 个月前
RDMA设计33:RoCE v2 接收模块
fpga开发·rdma·高速传输·cmac·roce v2
tiantianuser1 个月前
RDMA设计31:RoCE v2 发送模块3
fpga开发·rdma·cmac·roce v2