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:数据包格式
在IB协议中,message被分段成数据包然后在Fabric中传输;
数据包类型
数据包有以下类型:
- 不可分割的数据传输和路由单元
- 确认单元
- 消息分段和重组单元
- 链路级流控制单元
另外可以分为:
- IBA Packets,包含了IBA transport headers
- Raw Packets,不包含IBA transport headers但是可以在IBA结构上路由。我的理解是这是IB结构对于其他数据包的兼容。
数据包格式
在transport header以及payload之前有两个路由头:
- local route header对于所有包都是需要的
- global route header对于要路由到不同子网的所有数据包以及所有组播数据包是必要的
- global route header可以放置在除了子网管理数据包(subnet management packets)之外的任何数据包上
InfiniBand设备生成的数据包应该符合下面两图的结构以及大小位置要求;
另外IBA数据包(IBA Packets)的结尾是一个非变体CRC然后是一个变体CRC;Raw Packets结尾是一个变体CRC。
LOCAL ROUTE HEADER(LRH)-8 Bytes
LRH用于在IBA子网内部的本地路由
Global Route Header(GRH)-40 Bytes
GRH用于在子网之间的路由。GRH是否存在由上面的LRH中的LNH字段指示。GRH的布局与RFC2460中的IPv6头部一致(但是要注意这里没有定义GID与IPv6之间的映射)。
Base Transport Header(BTH)-12 Bytes
BTH是否存在由上一个header的”下一个标头”字段表示(LRH:LNH or GRH:NextHdr);
细节部分见9.2。
Reliable Datagram Extended Transport header(RDETH)-4 Bytes
RD数据包应该满足如下表的格式,RDETH包含了用于可靠数据包服务的附加传输字段,他仅仅用于Reliable Datagram 数据包中。细节部分见9.3.1。
RDMA Extended transport header(RETH)-16 Bytes
由支持RDMA操作的InfiniBand设备生成的数据包应该符合如下表的RETH数据包包头格式。
在RETH中包含了RDMA操作的其他传输字段。RETH仅仅存在于RDMA请求的第一个数据包中。
细节见9.3.3;
Atomic Extended Transport Header(AtomicETH)-28 Bytes
由支持原子操作的InifiniBand设备生成的数据包应该符合下表的AtomicETH的数据包包头格式。
AtomicETH中包含了额外的用于原子数据包的传输字段。数据包的BTH部分的Opcode字段指示了该数据包是否是Atomic packets(原子数据包)。AtomicETH只出现于Atomic packets里面。
细节见9.3.4
XRC Extended Transport Header(XRCETH)
XRC Extended Transport Header (XRCETH) contains the Destination XRC SRQ identifier.
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字段指示的。
细节见9.3.5
Atomic ACK Extended Transport Header(AtomicAckETH)-8 Bytes
AtomicAckETH仅仅出现在Atomic-Acknowledge数据包中,这也是由BTH中的Opcode字段指示的。
细节见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字段指示的。
细节见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.
细节见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 案例
To be done(抓包的实际案例)
ANNEX A16:RoCE协议
RoCE协议的目标
- 在二层以太网提供RDMA服务
- 保持现有的动词定义以及相应实现的合规性
- 维护基本规范中定义的现有内存管理范例
- 维护现有的InfiniBand传输架构,包括RC,UC,UD,RD和XRC服务以及原子操作
RoCE格式
RoCE与前面第五章定义的现有IB数据包有相同的布局与定义,除了以下部分:
- 每一个RoCE数据包都有GRH。
- 每一个RoCE数据包都包含一个MAC头来代替IB的LRH。MAC头的目的是提供有关数据包源和目标的信息来让底层网络(以太网)通过子网能够成功交换数据包。
- 每一个RoCE数据包都包含为以太网帧定义的 FCS。
RoCE数据包格式如下:
另外:
- MACheader中EtherType的字段应该是0x8915,并且DMAC和SMAC字段应该填充RoCE数据包的L2目标和L2源端口的相应MAC地址。
- RoCE数据包不得包含变体的CRC。RoCE数据包应该包含适用于所用以太网网络的FCS。
- 每一个RoCE数据包应该有一个有效的GRH。
ANNEX A17:RoCEv2
RoCE简介
RDMA over Converged Ethernet (RoCE)是一个InfiniBand标准用于保证在以太网上的InifiniBand传输。RoCE保留了InfiniBand动词语义以及传输和网络协议,把InfiniBand 链路层以及物理层的部分替换成了以太网的那些部分。RoCE的网络管理基础架构也是以太网的。
RoCE的包格式如下图所示,它的问题在于没有包含以太网头,因此只能在以太网L2域内提供RDMA服务。
RoCEv2(IP Routable RoCE)
RoCEv2是RoCE协议的拓展版本,主要是对RoCE数据包格式进行了修改:
参考
- IB Specification Vol 1-Release-1.5-2021-08-06b