当前位置: 首页 > news >正文

对RDMA理解(2)

总览

  1. struct ibv_qp_init_attr → 创建 QP 通道时用的“配置单” 告诉网卡:我要建一个什么样的收发通道。

  2. struct ibv_send_wr → 发送数据的“任务单” 告诉网卡:我要发什么数据、发到哪里、怎么发。

  3. struct ibv_recv_wr → 接收数据的“任务单” 告诉网卡:我准备好一块内存,你来把数据放进来。

1. struct ibv_qp_init_attr —— QP 初始化属性

作用

创建 QP(队列对)之前,填写的“配置表” 你要告诉系统:我想要一个什么类型、多大、绑定哪个 CQ 的 QP。

小白能懂的比喻

你要开一个快递站(QP),这个结构体就是:

  • 快递站多大(能存多少包裹)

  • 用哪个通知器(CQ)

  • 是发快递用、收快递用,还是都用

核心字段(只记最重要的)

struct ibv_qp_init_attr {

// 1. 发送队列最大能放多少个发送请求

int cap.max_send_wr;

// 2. 接收队列最大能放多少个接收请求

int cap.max_recv_wr;

// 3. 发送完成后,用哪个 CQ 通知你

struct ibv_cq *send_cq;

// 4. 接收完成后,用哪个 CQ 通知你

struct ibv_cq *recv_cq;

// 5. QP 类型(99% 用 IBV_QPT_RC 可靠连接)

enum ibv_qp_type qp_type;

};

小白必须记住

  • 这是创建 QP 前必须填的表

  • 不填这个表,系统不知道给你建多大的通道

  • 最常用类型:IBV_QPT_RC(可靠连接,不会丢包)

2. struct ibv_send_wr —— 发送工作请求(发数据任务单)

作用

你给网卡下达的“发送命令” 网卡看到这个结构体,就会自动去内存拿数据,发给对方。

比喻

这是一张快递发货单:

  • 货物在哪(内存地址)

  • 发多大

  • 用哪个通道发

  • 发完怎么通知

核心字段(小白必懂)

struct ibv_send_wr {

// 1. 用哪个 QP 通道发(必须填)

struct ibv_qp *qp;

// 2. 要发送的数据放在哪里(必须填)

struct ibv_sge *sg_list;

// 3. 发送方式(最常用:IBV_WR_SEND 普通发送)

enum ibv_wr_opcode opcode;

// 4. 发完后,任务完成时带回的标识(你自己定义)

uint64_t wr_id;

};

关键子结构体 struct ibv_sge(发送数据的位置)

struct ibv_sge {

uint64_t addr; // 数据起始地址

uint32_t length; // 数据长度

uint32_t lkey; // 内存 MR 的钥匙(必须!)

};

小白必记

  • ibv_send_wr = 发数据指令

  • 必须绑定 sge = 数据在哪

  • 必须给 lkey = 网卡访问内存的密码

3. struct ibv_recv_wr —— 接收工作请求(收数据任务单)

作用

提前告诉网卡:我准备好内存了,你来把数据放进来 RDMA 接收必须提前提交接收请求,不然数据来了没地方放。

比喻

这是一张快递收货预约单:

  • 我准备好空箱子了

  • 箱子多大

  • 放我家哪个位置

核心字段

struct ibv_recv_wr {

// 1. 用哪个 QP 通道接收

struct ibv_qp *qp;

// 2. 数据接收后放在哪里(必须填)

struct ibv_sge *sg_list;

// 3. 接收完成时,带回的标识

uint64_t wr_id;

};

小白必记

  • 接收必须提前提交

  • 网卡不会帮你分配内存,你必须自己准备好

  • 用 ibv_recv_wr 告诉网卡内存位置

三者关系

你先填:ibv_qp_init_attr

创建出:QP 通道(真正收发数据的管道)

发数据:用 ibv_send_wr 下达发送任务

收数据:用 ibv_recv_wr 提前提交接收任务

小白终极总结(3 句背会)

  1. ibv_qp_init_attr → 建通道前的配置表

  2. ibv_send_wr → 让网卡发数据的任务单

  3. ibv_recv_wr → 让网卡收数据的任务单

参考链接 :0voice · GitHub

http://www.jsqmd.com/news/984937/

相关文章:

  • SQL/NoSQL数据库为何成为TVA的记忆系统(10)
  • Java Programming Chapter 4——Inherited call
  • 学习内容梳理_各个行业中对AI的应用_以及投入价值比分析_ai测试工程师---AI大模型系统从零开始0002
  • 京东商品详情页采集API、淘宝1688API
  • 论文精读:喀斯特山地流域耕地流转的时空演变与地形梯度效应——以贵州南北盘江流域为例
  • 从「天翼云盘助手 3.0」到 FusionCloud:我把所有网盘都挂成了本地磁盘
  • 新手适合哪个去水印小程序?我实际试了一圈后的推荐
  • 大连理工大学考研辅导班正规机构,全维度榜单推荐 - 推荐评测师
  • 永辉超市购物卡回收变现最快方式?实测分享靠谱平台 - 团团收购物卡回收
  • HAMi 源码阅读笔记 01:HAMi调度简介
  • 石家庄市2026年黄金回收+白银回收+铂金回收+彩金回收门店TOP排行榜+推荐及联系方式+地址+电话+靠谱店铺指南 - 大熊猫898989
  • 金融行业常用哪些数据分析模型?风控、授信、客户分层框架汇总
  • 基础知识(从零开始学C语言)
  • Claude Code VS Code 插件免登录修复方案(第三方 API 可用)
  • Three.js + 高德地图 WebGL 上下文丢失排查:Context Lost/Restored 完整解决方案
  • Linux------特殊进程
  • 有关磁盘操作
  • 拉罗替尼的上市:2018年FDA获批2022年中国上市,双剂型覆盖全人群
  • 重庆黄金回收全攻略 多家实体门店横向评测附避坑指南 - 余生黄金回收
  • Tcl语言:file命令的使用方式
  • SolonCode(编码智能体)支持鸿蒙 PC
  • 文件描述符、文件表、FILE 结构体笔记
  • 2026年贵州波形护栏厂家采购指南:工程项目如何选到源头低价+快速发货的合规产品 - 精选优质企业推荐官
  • 【MATLAB】基于模型预测控制的车辆圆轨迹跟踪方法研究
  • 伺服电机仿真(6):机械传动系统的建模-单惯量、双惯量与多惯量系统
  • ngx_signal_worker_processes
  • 第二章 ICEF核心知识解读 第三节 ICEF对AI推理能力的系统性增强:机制、效果与深层价值
  • 2026 合肥高端包包优选榜单 包河靠谱交易门店汇总 - 开心测评
  • Vue 布局方案管理实战:拖拽面板位置保存与多方案切换完整指南
  • 计算机毕业设计之基于大数据的食物营养分析可视化平台