InfiniBand 数据包格式,ROCE 以及ROCEV2 (IP ROUTABLE ROCE)

本部分来自于对于IB Specification Vol 1-Release-1.5-2021-08-06b中的CHAPTER 5: DATA PACKET FORMAT以及ANNEX A16: RDMA OVER CONVERGED ETHERNET (ROCE)和ANNEX A17: ROCEV2 (IP ROUTABLE ROCE)的整理;

CHAPTER 5:数据包格式

IBA communication Stack
IBA communication Stack

在IB协议中,message被分段成数据包然后在Fabric中传输;

IBA messages to packets
IBA messages to packets

数据包类型

数据包有以下类型:

  1. 不可分割的数据传输和路由单元
  2. 确认单元
  3. 消息分段和重组单元
  4. 链路级流控制单元

另外可以分为:

  1. IBA Packets,包含了IBA transport headers
  2. Raw Packets,不包含IBA transport headers但是可以在IBA结构上路由。我的理解是这是IB结构对于其他数据包的兼容。

数据包格式

在transport header以及payload之前有两个路由头:

  1. local route header对于所有包都是需要的
  2. global route header对于要路由到不同子网的所有数据包以及所有组播数据包是必要的
  3. global route header可以放置在除了子网管理数据包(subnet management packets)之外的任何数据包上

InfiniBand设备生成的数据包应该符合下面两图的结构以及大小位置要求;

另外IBA数据包(IBA Packets)的结尾是一个非变体CRC然后是一个变体CRC;Raw Packets结尾是一个变体CRC。

IBA数据包简介
IBA数据包简介
完整版本的IBA数据包格式
完整版本的IBA数据包格式

LOCAL ROUTE HEADER(LRH)-8 Bytes

LRH用于在IBA子网内部的本地路由

LRH
LRH

Global Route Header(GRH)-40 Bytes

GRH用于在子网之间的路由。GRH是否存在由上面的LRH中的LNH字段指示。GRH的布局与RFC2460中的IPv6头部一致(但是要注意这里没有定义GID与IPv6之间的映射)。

GRH
GRH

Base Transport Header(BTH)-12 Bytes

BTH_1
BTH_1
BTH_2
BTH_2

BTH是否存在由上一个header的”下一个标头”字段表示(LRH:LNH or GRH:NextHdr);

细节部分见9.2。

Reliable Datagram Extended Transport header(RDETH)-4 Bytes

RD数据包应该满足如下表的格式,RDETH包含了用于可靠数据包服务的附加传输字段,他仅仅用于Reliable Datagram 数据包中。细节部分见9.3.1。

RDETH
RDETH

RDMA Extended transport header(RETH)-16 Bytes

由支持RDMA操作的InfiniBand设备生成的数据包应该符合如下表的RETH数据包包头格式。

在RETH中包含了RDMA操作的其他传输字段。RETH仅仅存在于RDMA请求的第一个数据包中。

RETH
RETH

细节见9.3.3;

Atomic Extended Transport Header(AtomicETH)-28 Bytes

由支持原子操作的InifiniBand设备生成的数据包应该符合下表的AtomicETH的数据包包头格式。

AtomicETH中包含了额外的用于原子数据包的传输字段。数据包的BTH部分的Opcode字段指示了该数据包是否是Atomic packets(原子数据包)。AtomicETH只出现于Atomic packets里面。

AtomicETH
AtomicETH

细节见9.3.4

XRC Extended Transport Header(XRCETH)

XRC Extended Transport Header (XRCETH) contains the Destination XRC SRQ identifier.

XRCETH
XRCETH

ACK Extended Transport Header(AETH)-4 Bytes

AETH包含了ACK数据包的额外的传输字段。AETH只会出现在Acknowledge, RDMA
READ Response First, RDMA READ Response Last, and RDMA READ Response Only packets,这些包是由BTH头的Opcode字段指示的。

AETH
AETH

细节见9.3.5

Atomic ACK Extended Transport Header(AtomicAckETH)-8 Bytes

AtomicAckETH仅仅出现在Atomic-Acknowledge数据包中,这也是由BTH中的Opcode字段指示的。

AtomicAckETH
AtomicAckETH

细节见9.3.5.3

Immediate Data Extended Transport Header(ImmDt)-4 Bytes

ImmDt包含了放置在receive Completion Queue Element(CQE)中的额外数据。ImmDt仅仅出现在Send 或者RDMA-Write with Immediate Data数据包中。这也是由BTH中的Opcode字段指示的。

ImmDt
ImmDt

细节见9.3.6

Invalidate Extended Transport Header(IETH)-4 Bytes

IETH 包含了一个R_key,which is used by the responder to invalidate a memory region or memory window once it receives and executes the SEND with Invalidate request.

IETH
IETH

细节见9.3.7

Payload

PYLD包含了端到端的应用数据。它不会出现在RDMA Read Requests, Acknowledge,CmpSwp, FetchAdd, and Atomic Acknowledge packets里面,只会出现在其他类的op-codes 包里面。

Payload的长度是[0,MTU];

除了最后一个数据包之外,需要携带有效负载的数据包应该填充到完整MTU大小。

在使用InfiniBand传输的数据包中,数据包里面应该包含0-3字节的Pad字段,用于将有效负载与4字节背书对齐。Pad字段的长度应该在BTH中的PadCnt部分注明。

Invariant CRC

ICRC包含了从源到目的地数据包中不会更改的字段。它只出现在IBA packets中,不会出现在Raw Packets里面。

细节见7.8.1

Variant CRC

包含了链接到链接之间可变的字段,VCRC出现在所有的包里面,包含了IBA以及Raw Packets。

Raw Packets

略。

IBA Packets 案例

IBA Packets 案例
IBA Packets 案例

To be done(抓包的实际案例)

ANNEX A16:RoCE协议

RoCE协议的目标

  1. 在二层以太网提供RDMA服务
  2. 保持现有的动词定义以及相应实现的合规性
  3. 维护基本规范中定义的现有内存管理范例
  4. 维护现有的InfiniBand传输架构,包括RC,UC,UD,RD和XRC服务以及原子操作

RoCE格式

RoCE与前面第五章定义的现有IB数据包有相同的布局与定义,除了以下部分:

  1. 每一个RoCE数据包都有GRH。
  2. 每一个RoCE数据包都包含一个MAC头来代替IB的LRH。MAC头的目的是提供有关数据包源和目标的信息来让底层网络(以太网)通过子网能够成功交换数据包。
  3. 每一个RoCE数据包都包含为以太网帧定义的 FCS。

RoCE数据包格式如下:

RoCE数据包格式
RoCE数据包格式

另外:

  1. MACheader中EtherType的字段应该是0x8915,并且DMAC和SMAC字段应该填充RoCE数据包的L2目标和L2源端口的相应MAC地址。
  2. RoCE数据包不得包含变体的CRC。RoCE数据包应该包含适用于所用以太网网络的FCS。
  3. 每一个RoCE数据包应该有一个有效的GRH。

ANNEX A17:RoCEv2

RoCE简介

RDMA over Converged Ethernet (RoCE)是一个InfiniBand标准用于保证在以太网上的InifiniBand传输。RoCE保留了InfiniBand动词语义以及传输和网络协议,把InfiniBand 链路层以及物理层的部分替换成了以太网的那些部分。RoCE的网络管理基础架构也是以太网的。

协议栈比较
协议栈比较

RoCE的包格式如下图所示,它的问题在于没有包含以太网头,因此只能在以太网L2域内提供RDMA服务。

RoCE包格式
RoCE包格式

RoCEv2(IP Routable RoCE)

RoCEv2是RoCE协议的拓展版本,主要是对RoCE数据包格式进行了修改:

RoCEv2包格式
RoCEv2包格式

参考

  1. IB Specification Vol 1-Release-1.5-2021-08-06b