原文:https://zhuanlan.zhihu.com/p/195757767
Queue Pair
我们曾经在3. RDMA基本元素一文中简单的介绍了QP的概念,本文将更深入的讲解一些关于QP的细节。
基本概念回顾
首先我们来简单回顾下关于QP的基础知识:
根据IB协议中的描述,QP是硬件和软件之间的一个虚拟接口。QP是队列结构,按顺序存储着软件给硬件下发的任务(WQE),WQE中包含从哪里取出多长的数据,并且发送给哪个目的地等等信息。
QP的概念
每个QP间都是独立的,彼此通过PD隔离,因此一个QP可以被视为某个用户独占的一种资源,一个用户也可以同时使用多个QP。
QP有很多种服务类型,包括RC、UD、RD和UC等,所有的源QP和目的QP必须为同一种类型才能进行数据交互。
虽然IB协议将QP称为“虚拟接口”,但是它是有实体的:
- 硬件上,QP是一段包含着若干个WQE的存储空间,IB网卡会从这段空间中读取WQE的内容,并按照用户的期望去内存中存取数据。至于这个存储空间是内存空间还是IB网卡的片内存储空间,IB协议并未做出限制,每个厂商有各自的实现
- 软件上,QP是一个由IB网卡的驱动程序所维护的数据结构,其中包含QP的地址指针以及一些相关的软件属性。
QPC
5. RDMA基本服务类型一文中,我们曾经提到过QPC全称是Queue Pair Context,用于存储QP相关属性。驱动程序里面是有储存QP的软件属性的,既然我们可以在软件里储存QP的属性,为什么还要用使用QPC呢?
这是因为QPC主要是给硬件看的,也会用来在软硬件之间同步Q