从零学习 InfiniBand-network架构(一) —— IB协议中常用术语及定义
声明:
博主主页:王_嘻嘻的CSDN主页
未经作者允许,禁止转载
本专题部分内容源于《InfiniBand-network architecture》,侵权必删
当前IC产业中火热的DPU赛道,其本质就是IB协议的硬件卸载,使芯片支持RDMA等功能;恰巧博主也在进行类似工作,为了更深入地理解IB协议,将开启infiniband network architecture书籍的翻译与总结,也希望借此帮助到广大正在学习IB的朋友。
IB标准的优势
IB(InfiniBand)协议是用于高性能计算的网络通讯标准,其主要优势是:
- 支持大量协议:包括通过IB光纤的非IB协议的隧道包,例如IPv6、Ethertype包;
- 高带宽,吞吐量可实现2.5Gb/s,10Gb/s,30Gb/s;
- 低延时,应用程序时延 <3us;
- 高可扩展性的拓扑结构;
- 非特权应用发送接收信息时,内核不用进行特权模式的切换;
- 每个信息都由CA(通道适配器)的硬件DMA直接传输,而不用处理器的参与,也就是RDMA;
- 大部分协议都可以在芯片上实现,减少软件和处理器的负荷。
IB专业术语
处理器节点(processor Node):一组或多组处理器以及其内存,并通过主机通道适配器(HCA)与IBA光纤连接,每个HCA都有一个或多个端口;
端口(port):IBA设备与IBA链路连接的双向接口;
链路(link):用于两台IBA设备的两个端口间的双向高速连接。具体应用中以serdes实现,单条链路的传输速率可达2.5Gb/s,250MB/s的吞吐率(由于serdes中8b/10b的原因)。此外,还可以用4条或12条链路,达到1GB/s和3GB/s的吞吐率;
通道适配器Channel Adapter(CA):书中没有具体介绍,本人认为CA类似于网卡类设备。
IO单元与IO控制器(IOU and IOC):IOU的组成包括,连接到IBA的目标通道适配器;一个或多个IO控制器提供的IO接口,其实现形式会是一个大量的存储矩阵;
子网(subnet)
子网:一些有相同子网ID和相同的子网管理器的端口和链路的集合。
- 子网管理器(SM)会在子网启动时发现所有设备,配置它们,并在后续周期性检查子网的拓扑结构是否被修改;
- 在配置过程中,子网管理器会为每个端口配置一个独有的本地ID和一个相同的子网ID,用以标识子网和端口位置;
- 能交换数据包的所有的CA、路由器端口以及交换机端口都可以被叫做在同一个子网下;
- 子网间可以通过路由器进行相互连接。
报文基本知识
报文是用来在两个CA之间发送请求(request)或者响应(response)信号,一个报文的有效荷载(payload)部分最大可以包含4KB数据。CA如果需要发送的报文大于此长度,需要对此进行切分,分为多个包传输。每个报文分为payload、路由报文头(header)、CRC校验等,其中header包含以下内容:
- 本地路由头部(LRH):包括目标端口本地ID(DLID)和源端口本地ID(SLID)。
两者都占据16-bits,前者用来表示报文通过交换机需要到达的子网目的地端口;后者用来表示报文源头的子网ID。 - 全局路由头部(GRH):包括目标端口全局ID(DGID)和源端口全局ID(SGID)。
两者都占据128-bits,高64-bits表示CA端口的子网ID,低64-bits表示端口的全局唯一ID(GUID)。注意:GRH和LRH的区别主要在于,LRH是本地ID,报文在通过交换机进行传输时使用LRH,源端口和目标端口在同一子网下;而GRH是全局ID,报文通过IB光纤传输时需要GRH,源端口和目标端口在不同子网下。
- 基础传输头部(BTH):包括Opcode、DestQP和PSN
Opcode表示报文操作类型;DestQP表示对端CA的目标QP(Queue Pair,是IB协议中信息传输的重要机制,在后续篇章中会介绍);PSN(Packet Sequence Number)占24-bits ,表示报文序列号,可以用于报文顺序检查和报文重传。
通道适配器CA
每个CA port在配置时就具有唯一地址,当一个CA必须发送信息或者读取信息时,首先需要发送一个请求报文,该报文带有destination port ID,通过交换机和路由器的帮助,CA最终抵达目标CA。
- 所以说终端必然是CA而不是交换机或路由器,CA是真正的操控者,交换机和路由器只是维护流量通道的。
交换器和路由器规则
当一个请求报文由CA发送后,会有以下两种情况:
- 源CA和目标CA直接连接:这种情况下,报文通过唯一链路,对头部中的DLID信息解码后直接找到目标CA port,目标CA接受请求后,并作出对应处理;
- 源CA和目标CA非直接连接:请求报文不能直接抵达目标CA,所以其需要先前往交换机或者路由器的port。
交换机规则:负责在同一子网内报文的路由,根据DLID查找交换机内部的转发表(由软件在启动阶段配置),确定报文需要从交换机的哪个端口输出。(一个报文在抵挡目标CA前可能需要经过多个交换机)
路由器规则:当源CA和目标CA不在同一子网下,请求报文会带有GRH。交换机会在子网下不断路由报文,直到抵挡路由器的一个port,然后路由器根据GRH:DGID确定目标CA在哪个子网下,与交换机类似,路由器内部存在路由表。(一个报文在抵挡目标CA前可能需要经过多个交换机)
报文传输类型
IB协议中的消息传递是建立在CA间的,其本质是CA间的内存空间进行数据交换。
三类消息传输:
- 从本地CA的内存传输信息到目标CA的内存;
- 从目标CA的内存读取信息,并存储在本地CA的内存中;
- 对目标CA的内存执行原子操作(读/改/写),并将返回的数据存储在本地CA的内存。
向对端CA内存写信息,分为两种情况:
- 信息发送操作:请求信息不会通知CA数据该写到哪块内存中,而是对端CA自行决定数据的存放地址;
- RDMA写操作:请求报文会指定数据需要写到对端CA的哪块内存中,报文包括了有效荷载,请求报文的内存起始地址、报文长度和允许该RDMA写操作的一个密钥。
从对端CA内存中读取信息:
- CA向对端CA发出读指定内存中数据的请求,对端CA接收该请求后,会返回一个或多个响应报文,请求端将返回报文中的数据存储到指定内存中。
原子操作:IBA中分为以下两种原子操作
原子读取和加法操作:收到请求后,目标CA从其本地的指定内存中读取数据,将Add值与读取数据相加,并将结果写回本地内存。目标CA将读回的初始值以原子响应包的形式返回给请求端CA。收到响应数据包后,请求端CA将读数据写入自己的本地内存;
原子比较和交换操作:收到请求后,目标CA从其本地的指定内存中读取数据,将读取的数据与Compare值比较,若相等,将值写入指定位置,返回的响应操作与上述加法原子操作一致。
Single packet & Multiple packet
IBA标准中最大包的长度限制为4KB,大约4KB的信息并非不能传输,而是需要拆分为多包传输(multiple packet)。
- 如果信息总长在4KB~8KB,multiple packet将分为Send First操作与Send Last操作;
- 如果信息总长大于8KB,将分为Send First、Send Middle和Send Last操作,其中,非第一包和最后一包的数据都为Send Middle操作。
具体如下示意图: