当前备受瞩目的IC产业赛道——DPU(Data Processing Unit),其实质为IB(InfiniBand)协议的硬件卸载技术,使得芯片能够支持如RDMA等功能。鉴于博主正从事相关研究,即将启动《InfiniBand Network Architecture》一书的翻译与解读工作,期望借此助力广大致力于学习InfiniBand协议的同仁们。
InfiniBand协议作为面向
高性能计算的网络通信标准,突出优势体现在:具备广泛的协议兼容性,支持通过InfiniBand线缆传输非InfiniBand协议的隧道包,如IPv6和Ethertype包;
提供高带宽,可实现2.5Gb/s至30Gb/s的吞吐量;
具备超低延迟,应用程序延迟小于3微秒;
拥有高度可扩展的拓扑结构;
非特权应用程序发送和接收信息时,无需内核切换至特权模式;
采用RDMA技术,由CA(通道适配器)硬件DMA直接传输信息,减轻处理器负担;
多数协议可在芯片层面实现,从而有效降低软件及处理器负载。
处理器节点:包含一组或多组处理器及其内存资源,通过主机通道适配器(HCA)与InfiniBand架构相连,每个HCA配备一个或多个端口;
端口:IBA设备与其链接之间的双向接口;
链路:两台IBA设备间端口之间的双向高速连接介质,基于serdes技术,单条链路速度可达2.5Gb/s,且吞吐率为250MB/s(受到8b/10b编码的影响)。通过四条或十二条链路组合,可进一步提升至1Gb/s和3Gb/s的吞吐率;
通道适配器(CA):类似网卡功能的硬件设备,文中未详述。
子网:具有相同子网ID和同一位于子网管理器下的端口与链路的集合体。
子网管理器(SM)在子网启动时自动发现并配置所有设备,并定期检查子网拓扑结构变化;
配置过程中,子网管理器为每个端口分配唯一的本地ID和共享的子网ID,以便识别端口及子网位置;
能够在同一子网内交换数据包的所有CA、路由器端口及交换机端口被视为处于同一子网下;
子网之间可通过路由器实现互连互通。
报文是两个CA间传输请求(request)或响应(response)信号的基本单位,其有效荷载(payload)部分最多可承载4KB数据。若CA需发送超出该长度的报文,则需将其分割成多个分包进行传输。每个报文由payload、路由报文头(header)、CRC校验等构成,其中header包括以下内容:
本地路由头部(LRH):包含目标端口本地ID(DLID)与源端口本地ID(SLID),两者均为16位,前者指示报文需通过交换机送达的目的地子网端口,后者标识报文来源子网ID。
全局路由头部(GRH):包括目标端口全局ID(DGID)与源端口全局ID(SGID),两者各占128位,其中高位64位表示CA端口的子网ID,低位64位表示端口的全局唯一ID(GUID)。GRH与LRH的关键区别在于,LRH用于同一子网内的传输,而GRH则适用于跨子网传输。
每个CA端口在配置时即赋予唯一地址,当CA需要发送或接收信息时,首先需通过携带destination port ID的请求报文,并借助交换机和路由器引导,最终抵达目标CA。值得注意的是,CA才是实际的信息操纵者,而交换机和路由器仅扮演维持流量通道的角色。
CA发送请求报文后,会发生以下两种情况:
源CA与目标CA直连:报文沿单一链路直达目标CA端口,经解码DLID信息找到目标端口;目标CA接收请求并采取相应处理措施。
源CA与目标CA非直连:请求报文无法直达目标CA,故先传送至交换机或路由器的某个端口。
交换机规则:在子网内负责报文的路由工作,依据DLID查询预设于启动阶段的交换机内部转发表,确定报文应从哪个端口转发出去。(一个报文可能需经过多个交换机才能抵达目标CA)
路由器规则:当源CA与目标CA不在同一子网下时,请求报文携带GRH。交换机在子网内持续路由报文直至抵达路由器端口,此时路由器参照GRH中的DGID判断目标CA所在的子网,同样,路由器内部亦设有路由表。(报文需历经多个交换机方能到达目标CA)
IB协议的消息传递本质上是在CA之间直接进行内存空间的数据交换,具体可分为三种类型:
从本地CA的内存传输信息至目标CA的内存;
从目标CA的内存读取信息,并存储在本地CA的内存中;
对目标CA的内存执行原子操作(读/改/写),并将返回数据存储在本地CA的内存。
向目标CA内存写入信息:
信息发送操作:请求报文不对数据写入内存的具体位置进行指示,由目标CA自行决定数据存储位置;
RDMA写操作:请求报文指明需写入目标CA内存的确切位置,报文含有有效荷载、内存起始地址、报文长度及授权该RDMA写操作的密钥。
从目标CA内存中读取信息:
CA向目标CA发起读取指定内存数据的请求,目标CA接收到请求后,返回一个或多个响应报文,请求端将返回报文中的数据存入指定内存中。
原子操作:
原子读取与加法操作:目标CA从本地指定内存中读取数据,将Add值与读取数据相加,将结果写回本地内存,并以原子响应包的形式返回原始读取值给请求端CA;请求端CA将读取的数据写入自身本地内存。
原子比较与交换操作:目标CA从本地指定内存读取数据并与Compare值进行比较,若相等,则将值写入指定位置,返回的响应操作与上述加法原子操作一致。
按照IBA标准,单个包的最大长度限制为4KB。对于超过这个大小的信息,需要分解为多包传输(multiple packet)进行发送:
若信息总长度介于4KB至8KB之间,则划分为“Send First”与“Send Last”两类操作;
若信息总长度大于8KB,则分为“Send First”、“Send Middle”以及“Send Last”三个类别,其中除首尾包外的其余数据均归类为“Send Middle”操作。
具体情况可见如下示意图:
(此处省略图片描述)
本文部分素材源自《InfiniBand Network Architecture》,未经原作者许可,不得转载。
(请注意遵守版权保护条款)