1.在rdma网卡中,QP(SQ和RQ)、CQ、EQ和SQR的含义是什么以及功能是什么?
QP:queue pair,具体分为SQ和RQ;是rdma通信的基本单位;
SQ:存放上层程序提交的工作请求(RDMA_write、RDMA_Read、Send等操作);即sq_wqe用来描述发送请求;
RQ:存放预分配的内存注册区(接收缓冲区)用来接收远端数据;rq_wqe是用来描述放置这些数据的地址;
场景:每个独立的RDMA连接(客户端–服务端的一个会话)对应一个QP;比如requester端QP=100与服务器端QP=200建立连接,通过QP(QPN)来唯一标识。
CQ:Completion queue是完成队列;
–用来通知上层某个RDMA操作是否完成;
场景:具体会生成一个 CQE来放在CQ中,包含操作状态、操作类型等;
上层程序通过轮询或者通过MSI-X中断来通知;
EQ:Event queue是事件队列;
–用于处理RDMA同步性能中的异步事件(如QP状态变化、CQ溢出和设备错误);
–事件类型可能包括:
• QP事件:QP状态迁移(重置、激活、错误等)
• CQ事件:CQ溢出或完成条目覆盖
• 设备事件:网卡链路状态变化、硬件错误等;
SRQ:Shared Receive Queue是共享接收队列;
–SRQ允许多个QP共享同一个接收队列,统一管理接收缓冲区,减少内存和硬件资源占用;
–功能:
• 资源池化:多个QP从SRQ中动态获取接收缓存区,避免每个QP单独维护RQ;
• 负载均衡:在高并发场景下,SRQ可优化缓冲区的分配效率。
–场景:服务器端处理大量客户端连接时,使用SRQ替代每个QP独立的RQ,显著减少内存开销。
这几个资源的协作关系:
1.数据发送流程:
应用程序提交WQE到QP的SQ → 触发SQ Doorbell → 网卡执行操作 → 完成时生成CQE到CQ。
2.数据接收流程:
应用程序预投递WQE到QP的RQ(或SRQ) → 触发RQ Doorbell → 网卡接收数据并DMA写入内存 → 完成时生成CQE到CQ。
3.事件处理:
网卡检测到异常(如QP错误) → 生成事件到EQ → 应用程序处理事件(如重置QP)。
2 PCIe中的MSI-X中断机制?
What:MSI-X是PCIE设备向处理器发出中断信号,请求处理的一种机制;
–MSI-X是通过向CPU发送特定的内存写操作(MemWR tlp)来触发中断,不是依赖INTx物理中断引脚;地址映射;
–中断向量:MSX-X机制可以子支持高达2048个独立的中断向量,每个向量来对应不同的事件(数据接收完成、错误通知等);
–一般实现方式:
–1.维护中断表:PCIe device在内存中维护一张终端表,每个entry定义:
–1.目的地址:中断消息写入的内存地址;
–2.数据值:标识具体中断类型的数值;
–3.掩码与启用位:控制中断的启动或禁用状态;
用于rdma网卡写cqe然后通过MSI-X中断来通知CPU;