分享好友 站长动态首页 网站导航

计算机网络之RDMA技术(七)Queue

网友发布 2023-09-17 08:52 · 头闻号竞价资讯

姓名:周肇星;学号:22011110028;学院:通信工程学院

部分素材取自 https://zhuanlan.zhihu.com/p/195757767

嵌牛导读RDMA技术全称远程直接数据存取,就是为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理功能。它消除了外部存储器复制和上下文切换的开销,因而能解放内存带宽和CPU周期用于改进应用系统性能。本专题将针对RDMA技术进行介绍!

嵌牛鼻子计算机网络,高性能网络,RDMA

嵌牛提问读完本文,对RDMA技术的QP概念有所认识了吗?

嵌牛正文

InfiniBand specification R1.3, Chapter3, 3.2.1, Page 98QP与相关元素的概念

InfiniBand specification R1.3, Chapter3, 3.5.1, Page 108QP与相关元素的概念

InfiniBand specification R1.3, Chapter3, 3.5.10, Page 117QPN、QP0、QP1的概述

InfiniBand specification R1.3, Chapter3, 3.7.5.1, Page 137SMI使用QP0

InfiniBand specification R1.3, Chapter3, 3.7.5.2, Page 138GSI使用QP1

InfiniBand specification R1.3, Chapter3, 3.8, Page 139QP包含SQ与RQ

InfiniBand specification R1.3, Chapter3, 3.8, Page 139通道适配器对WQE的处理与数据的收发

InfiniBand specification R1.3, Chapter3, 3.9, Page 143GSI模型具体描述

InfiniBand specification R1.3, Chapter3, 3.9.4, Page 145QP0限定为无连接的数据报服务类型

InfiniBand specification R1.3, Chapter3, 3.9.5, Page 147QP1限定为无连接的数据报服务类型

InfiniBand specification R1.3, Chapter3, 3.9.5.1, Page 147允许QP1重定向的原因与机制

根据IB协议中的描述,QP是硬件和软件之间的一个虚拟接口。QP由一个发送队列SQ与接收队列RQ组成,SQ与RQ均是队列结构,按顺序存储着软件给硬件下发的任务(WQE),WQE中包含从哪里取出多长的数据,并且发送给哪个目的地等等信息

通道适配器硬件接收到WQE后,读取WQE、并解析其中的命令,验证WQE的虚拟地址,将其转换为物理地址,并访问对应的数据。数据可通过一个或切分成多个数据包被传输出去,通道适配器为每个数据包添加一个传输头,如果目标位于其它子网上,则再添加上网络头部,随后添加本地路由头、并计算效验和

当数据到达目的节点时,验证校验和后,传输头指出了目标QP,通道适配器通过该QP的QP Context检查数据包是否来自正确的源端。对于SEND操作,QP从其接收队列中取出WQE,从中检索接收缓存区的虚拟地址、并转换成接收物理地址,将数据写入相应的位置,如果这不是消息的最后一个包,QP则在其QP Context中保存当前写的位置,并等待下一个包,然后继续写入缓存区,直至接收到最后一个包,然后该接收WQE退役,并向源端发送ACK确认

当发起者收到确认时,它会在CQ上创建一个CQE,并将WQE从发送队列中退出。一个QP可以在任何时候有多个未完成的消息,但接收端总是按照发送的顺序进行确认,因此WQE会按发送的顺序退役

对于可靠的服务类型,如果QP检测到一个或多个丢失的数据包,它会向发送者发送一条NAK消息指示其下一个预期的序列号。然后发起者可以从预期的数据包开始重新发送

每个QP间都是独立的,彼此通过PD隔离,因此一个QP可以被视为某个用户独占的一种资源,一个用户也可以同时使用多个QP

QP有很多种服务类型,包括RC、UD、RD和UC等,所有的源QP和目的QP必须为同一种类型才能进行数据交互

虽然IB协议将QP称为“虚拟接口”,但是它是有实体的:

QP Number简称为QPN,就是每个QP的编号。IB协议中规定用24个bit来表示QPN,即每个节点最大可以同时使用2^24个QP,每个节点都各自维护着QPN的集合,由通道适配器分配,相互之间是独立的,即QPN编号在各节点内唯一、不同的节点上可以存在编号相同的QP

编号为0的QP用于子网管理接口SMI(Subnet Management Interface),用于管理子网中的全部节点

子网管理器使用通过QP0发送、接收被称为子网管理报文SMP(Subnet Management Packet)的特殊类型的MAD(Management Datagram)报文(并仅发送接收SMP,其余数据无效)

并且QP0被永久配置为不可靠的数据报的服务类型

编号为1的QP用于通用服务接口GSI(General Service Interface)

GSI使用QP1进行初始通信,但允许对特定类的流量重定向到特权QP上,这是因为所有管理类数据包都进入同一队列,将导致瓶颈问题、线头阻塞现象,因此设计了重定向到其它QP的机制。当通道适配器接收到QP1上的GMP报文时,它可能会响应为一个指示新端口和QP的重定向响应,然后发起者将请求重新发送到新地址,并将该地址用于同一管理类的所有后续请求

并且QP1被永久配置为不可靠的数据报的服务类型,QP1上仅能收发MAD数据包

通用服务代理GSA(General Service Agents)是由许多管理服务代理组合而成,通用服务GA(General Service)使用称为通用管理报文GMP(General Service Packet)的报文,该报文是一种特殊的MAD报文

GSA中最出名的就是CM(Communication Management),是一种在通信双方节点正式建立连接之前用来交换必须信息的一种方式

QPC全称是Queue Pair Context,用于存储QP相关属性

QP在硬件上的实体只是一段存储空间而已,硬件除了知道这段空间的起始地址和大小之外一无所知,甚至连这个QP服务类型都不知道。还有很多其他的重要信息,比如某个QP中包含了若干个WQE,硬件怎么知道有多少个,当前应该处理第几个呢?

所以就需要软件通过操作系统提前申请好一大片连续的空间,即QPC来承载这些信息给硬件看。网卡及其配套的驱动程序提前约定好了QPC中都有哪些内容,这些内容分别占据多少空间,按照什么顺序存放。这样驱动和硬件就可以通过通过QPC这段空间来读写QP的状态等等信息

如上图所示,硬件其实只需要知道QPC的地址0x12350000就可以了,因为它可以解析QPC的内容,从而得知QP的位置,QP序号,QP大小等等信息。进而就能找到QP,知道应该取第几个WQE去处理。不同的厂商可能实现有些差异,但是大致的原理就是这样

四种操作都有配套的Verbs接口,类似于ibv_create_qp()这种形式,编写APP时直接调用就可以了

创建一个QP的软硬件资源,包含QP本身以及QPC。用户创建时会写传入一系列的初始化属性,包含该QP的服务类型,可以储存的WQE数量等信息

释放一个QP的全部软硬件资源,包含QP本身及QPC。销毁QP后,用户将无法通过QPN索引到这个QP

修改一个QP的某些属性,比如QP的状态,路径的MTU等等。这个修改过程既包括软件数据结构的修改,也包括对QPC的修改

查询一个QP当前的状态和一些属性,查询到的数据来源于驱动以及QPC的内容

在行为上都是软件向QP中填写一个WQE(对应用层来说叫WR),请求硬件执行一个动作。所以这两种行为都叫做“Post XXX Request”的形式,即下发XXX请求

Post Send本身不是指这个WQE的操作类型是Send,而是表示这个WQE属于通信发起方。这个流程中填写到QP中的WQE/WR可以是Send操作,RDMA Write操作以及RDMA Read操作等

用户需要提前准备好数据缓冲区、目的地址等信息,然后调用接口将WR传给驱动,驱动再把WQE填写到QP中

Post Recv的使用场景就相对比较少了,一般只在Send-Recv操作的接收端执行,接收端需要提前准备好接收数据的缓冲区,并将缓冲区地址等信息以WQE的形式告知硬件

免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报

举报
反对 0
打赏 0
更多相关文章

评论

0

收藏

点赞