news 2026/10/22 2:27:44

RDMA-Verbs-文章导读(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RDMA-Verbs-文章导读(一)

本系列以 Linux、rdma-core 和 mlx5 为分析对象,从 Verbs API 开始逐层分析用户态 provider、uverbs、RDMA Core、mlx5 内核驱动和 HCA 硬件,并进一步梳理内存注册、队列创建、数据收发、完成通知以及 GPU DMA-BUF 使用流程。本文说明各篇文章的定位、阅读顺序和源码入口。

1. 分析范围

本系列以 RC QP 和 RoCEv2 为主线,仅在相关接口处说明 InfiniBand 差异,主要分析以下内容:

  • 控制路径:设备初始化,以及 MR、QP、CQ、EQ 等资源的创建、配置和释放过程。
  • 数据路径:提交请求、HCA 访问内存,以及数据发送、接收和完成的处理过程。
  • GPU 专题:基于 DMA-BUF 的 GPU 内存注册、RDMA 访问和资源释放过程。

2. 篇目导航

本系列共包含 11 篇文章,按“系列导读—软件架构—分层实现—专题路径—GPU 内存”的顺序展开。

编号文档内容
01RDMA-Verbs-文章导读(一)本系列文章的分析范围、章节安排和阅读路线。
02RDMA-Verbs-软件架构(二)建立从应用、用户态库、内核服务、mlx5 驱动到 HCA 和内存的分层模型,区分资源控制、用户态/内核态收发路径与事件通知路径。
03RDMA-Verbs-API 和数据结构(三)分类介绍 Verbs API,解析 context、PD、MR、QP、CQ、WR、SGE 和 WC 等对象及其分发关系,并说明 MR 注册与地址语义。
04RDMA-Verbs-MLX5 用户态库(四)分析 mlx5 provider 的 context、私有对象、队列 buffer、DBR 与 UAR/BF,以及创建 PD/MR/CQ/QP、提交 WQE 和解析 CQE。
05RDMA-Verbs-内核 uverbs 接口(五)分析/dev/infiniband/uverbsN设备入口、文件与事件上下文、ioctl 属性和 legacy write ABI,以及用户对象的查找、提交、回滚与销毁。
06RDMA-Verbs-内核 RDMA Core(六)分析 Linux RDMA Core 的设备注册与注销流程、ib_device_ops安装与 Kernel Verbs 分发,以及通用对象、驱动私有对象和用户对象的关系。
07RDMA-Verbs-内核 MLX5 驱动(七)说明 mlx5_core 与 mlx5_ib 的分工和初始化,分析 RDMA 资源请求、固件 command queue 及 IRQ/EQ 设备事件分发流程。
08RDMA-Verbs-内存管理(八)比较普通 MR、DMA-BUF MR、ibv_buf和 device memory,分析用户页固定、DMA 映射、设备内存分配及 MKey/UMR 配置路径。
09RDMA-Verbs-QP、CQ 和 EQ(九)分析用户态和内核态 QP/CQ 创建流程,解析 QP→CQ→completion EQ 的对象与硬件关系,并说明 QP 状态转换、销毁和失败处理流程。
10RDMA-Verbs-数据收发与完成(十)区分 SEND、WRITE、READ 和 Atomic 等操作语义,分析提交 WQE 和 CQE/WC 的处理流程,以及 CQ 轮询和 completion channel 事件通知。
11RDMA-Verbs-GPU 内存与 DMA-BUF(十一)以 AMD GPU 为主线,分析 HSA/KFD allocation 导出 DMA-BUF 和 RNIC importer 的映射流程,并说明 P2P/GTT 条件、地址空间、同步、释放等内容,以及 NVIDIA DMA-BUF 的使用方法。

第 02 篇先建立全局架构;第 03~07 篇分别深入通用 API 与对象、mlx5 用户态 provider、uverbs、RDMA Core 和 mlx5 内核驱动。在此基础上,第 08~10 篇横向串联内存、QP/CQ/EQ 和数据收发三条专题路径;第 11 篇再把内存注册与同步机制扩展到 GPU DMA-BUF 场景。

3. 阅读路线

首次阅读时按文章编号展开:先了解软件架构和 Verbs 对象,再理解用户态、内核通用层与设备驱动的实现边界,随后串联内存、队列、数据路径和 GPU 内存专题。如果只关心特定方向,可以在阅读第 02、03 篇后选择专题:用户态数据路径重点阅读第 04、09、10 篇,内核控制路径重点阅读第 05~09 篇,GPU 内存路径重点阅读第 08、11 篇。

图中的箭头表示阅读顺序。中间一行的三个模块分别对应第 04、05~06、07 篇文章,建议从左到右阅读。

4. 源码基线

仓库版本Commit
rdma-corev65.0-1-gb5d5872dcb5d5872dcee3fcb1800662a2708ee906c2efa1c7
Linuxv7.28d3ae59288f1e7d58d76558a6ee96d533bc5019f
rocm-systemship-version_10.1.624605ea42aa92369c55f13edb934711cba18ab123790
nvshmemv3.6.5-06e53a40d9db16df170b3b0057e94c340d72f77eb
open-gpu-kernel-modules610.57.04e4a5faa2567f28c8eabe0ebb6422b6d0abcf37eb

5. 源码入口

源码入口主要内容
rdma-core/libibverbs/用户态 verbs、设备发现和命令封装。
rdma-core/providers/mlx5/mlx5 用户态资源管理与收发实现。
linux/drivers/infiniband/core/uverbs、RDMA Core 和内存管理。
linux/drivers/infiniband/hw/mlx5/mlx5_ib 资源管理与内核态收发实现。
linux/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 设备初始化、固件命令和事件处理。
linux/include/rdma/ib_verbs.h内核 verbs 接口与对象定义。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 2:27:43

《机器学习基础:线性回归与逻辑回归的原理及Sklearn实现对比》

正文: 前言 线性模型是机器学习算法体系中的基石。在近期的课程学习中,我系统接触了线性回归(Linear Regression)与逻辑回归(Logistic Regression)。尽管两者的名称中均包含“回归”,但它们在实…

作者头像 李华
网站建设 2026/10/22 2:27:13

垃圾数据集 建立python深度学习yolo实时垃圾分类系统

使用深度学习目标检测算法YOLOv5进行物体检测 通过训练自己的垃圾数据集 建立实时垃圾分类系统 文章目录使用深度学习目标检测算法YOLOv5进行物体检测 通过训练自己的垃圾数据集 建立实时垃圾分类系统1. 数据准备标注工具2. 模型训练安装YOLOv5准备配置文件 来训练训练模型3. U…

作者头像 李华
网站建设 2026/10/22 2:26:00

ORB-SLAM3 void Tracking::UpdateLocalPoints()

该函数是 TrackLocalMap() 中 UpdateLocalMap() 的第二步:在 UpdateLocalKeyFrames() 选出局部关键帧集合之后,收集这些关键帧观测到的地图点,构成局部地图点集合,供后续 SearchLocalPoints() 投影搜索和位姿优化使用。 但实际实现中需要: 跳过空指针; 跳过坏点; 去重…

作者头像 李华
网站建设 2026/10/22 2:25:57

【RAG开发】LangChain调用嵌入模型

Embedding Models(文本嵌入模型) Embedding Models嵌入模型的特点:将字符串作为输入,返回一个浮点数的列表(向量) 在NLP中,Embedding的作用就是将数据进行文本向量化。模型使用总结 目前所掌握的…

作者头像 李华
网站建设 2026/10/22 2:25:30

R 数据重塑:从长表到宽表的高效实践

1. 引言在数据分析工作中,数据重塑(Data Reshaping)是最常见也最基础的操作之一。无论是从数据库导出的原始记录,还是从 Excel 手工整理的数据,往往都需要经过长表(Long Format)与宽表&#xff…

作者头像 李华
网站建设 2026/10/22 2:25:23

MLK-FMC_VID005_MIPI(DSI改CSI)修改方案

一、修改概述本方案用于将 FMC 子卡原 DSI 输出接口改造为 MIPICSI 接收接口。通过调整 MIPI 差分信号匹配电阻,同时修改 AFH03 底板跳线电阻,完成信号网络切换,实现完整 CSI 相机通路。 变更分为三部分:FMC 子卡J2 CSI 接口电阻配…

作者头像 李华