【RDMA】11. RDMA之Shared Receive Queue

我们曾在【3. 基本元素】中简单介绍了SRQ的概念,本文将带大家了解更多关于SRQ的细节。

基本概念

什么是SRQ

全称为Shared Receive Queue,直译为共享接收队列。我们知道,RDMA通信的基本单位是QP,每个QP都由一个发送队列SQ和接收队列RQ组成。

SRQ是IB协议为了给接收端节省资源而设计的。不同于每个QP都拥有一个独立的RQ,我们可以把一个RQ共享给所有关联的QP使用,这个公用的RQ就称为SRQ。当与其关联的QP想要下发接收WQE时,都填写到这个SRQ中。然后每当硬件接收到数据后,就根据SRQ中的下一个WQE的内容把数据存放到指定位置。

为什么要用SRQ

通常情况下,我们向SQ中下任务的数量要远远超过向RQ中下发任务的数量。为什么呢?请先回忆一下哪些操作类型会用到SQ,哪些又会用到RQ。

SEND/WRITE/READ都需要通信发起方向SQ中下发一个WR,而只有和SEND配合的RECV操作才需要通信响应方下发WR到RQ中。而我们又知道,SEND-RECV这一对操作通常都是用于传递控制信息,WRITE和READ才是进行大量远端内存读写操作时的主角,所以自然SQ的使用率是远远高于RQ的。

每个队列都是有实体的,占用着内存以及网卡的片上存储空间。在商用场景下,QP的数量是可能达到十万级甚至更高的,对内存容量提出了很高的要求,内存都是白花花的银子买的,SRQ就是IB协议为了节省用户的内存而设计的一种机制。

来看一下协议中对为什么要使用SRQ的官方解释(10.2.9.1章节):

Without SRQ, an RC, UC or UD Consumer must post the number of receive WRs necessary to handle incoming receives on a given QP. If the Consumer cannot predict the incoming rate on a given QP, because, for example, the connection has a bursty nature, the Consumer must either: post a sufficient number of RQ WRs to handle the highest incoming rate for each connection, or, for RC, let message flow control cause the remote sender to back off until local Consumer posts more WRs.
• Posting sufficient WRs on each QP to hold the possible incoming rate, wastes WQEs, and the associated Data Segments, when the Receive Queue is
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值