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 内存"的顺序展开。

编号 文档 内容
01 RDMA-Verbs-文章导读(一) 本系列文章的分析范围、章节安排和阅读路线。
02 RDMA-Verbs-软件架构(二) 建立从应用、用户态库、内核服务、mlx5 驱动到 HCA 和内存的分层模型,区分资源控制、用户态/内核态收发路径与事件通知路径。
03 RDMA-Verbs-API 和数据结构(三) 分类介绍 Verbs API,解析 context、PD、MR、QP、CQ、WR、SGE 和 WC 等对象及其分发关系,并说明 MR 注册与地址语义。
04 RDMA-Verbs-MLX5 用户态库(四) 分析 mlx5 provider 的 context、私有对象、队列 buffer、DBR 与 UAR/BF,以及创建 PD/MR/CQ/QP、提交 WQE 和解析 CQE。
05 RDMA-Verbs-内核 uverbs 接口(五) 分析 /dev/infiniband/uverbsN 设备入口、文件与事件上下文、ioctl 属性和 legacy write ABI,以及用户对象的查找、提交、回滚与销毁。
06 RDMA-Verbs-内核 RDMA Core(六) 分析 Linux RDMA Core 的设备注册与注销流程、ib_device_ops 安装与 Kernel Verbs 分发,以及通用对象、驱动私有对象和用户对象的关系。
07 RDMA-Verbs-内核 MLX5 驱动(七) 说明 mlx5_core 与 mlx5_ib 的分工和初始化,分析 RDMA 资源请求、固件 command queue 及 IRQ/EQ 设备事件分发流程。
08 RDMA-Verbs-内存管理(八) 比较普通 MR、DMA-BUF MR、ibv_buf 和 device memory,分析用户页固定、DMA 映射、设备内存分配及 MKey/UMR 配置路径。
09 RDMA-Verbs-QP、CQ 和 EQ(九) 分析用户态和内核态 QP/CQ 创建流程,解析 QP→CQ→completion EQ 的对象与硬件关系,并说明 QP 状态转换、销毁和失败处理流程。
10 RDMA-Verbs-数据收发与完成(十) 区分 SEND、WRITE、READ 和 Atomic 等操作语义,分析提交 WQE 和 CQE/WC 的处理流程,以及 CQ 轮询和 completion channel 事件通知。
11 RDMA-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-core v65.0-1-gb5d5872dc b5d5872dcee3fcb1800662a2708ee906c2efa1c7
Linux v7.2 8d3ae59288f1e7d58d76558a6ee96d533bc5019f
rocm-systems hip-version_10.1.62460 5ea42aa92369c55f13edb934711cba18ab123790
nvshmem v3.6.5-0 6e53a40d9db16df170b3b0057e94c340d72f77eb
open-gpu-kernel-modules 610.57.04 e4a5faa2567f28c8eabe0ebb6422b6d0abcf37eb

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 接口与对象定义。
相关推荐
业余程序员plus7 小时前
RDMA-Verbs-软件架构(二)
linux·rdma·rocev2·mlx5·verbs·uverbs·libibverbs
gwf2168 小时前
带宽与延迟测试的正确打开方式:参数全解
性能测试·rdma·芯片测试·dpu·roce·智能网卡·perftest
gwf2161 天前
RDMA性能测试实战(1):perftest工具原理与基线测试方法
性能测试·rdma·dpu·roce·智能网卡·perftest·芯片测试。
gwf2162 天前
国产RDMA网卡驱动现状、挑战与未来:从内核上游到数据中心实践
rdma·rocev2·linuxkernel·数据中心网络·devicedriver·auxiliarybus·erdma
zwleagle4 天前
RDMA基本元素之间的关系
rdma
Eloudy4 天前
OpenSM 管理 IB 网络简介 与 FabricManager 的设计思路
gpu·rdma·roce
Eloudy5 天前
【无标题】
网络·gpu·rdma·roce
gwf2166 天前
内核态RDMA驱动调试技巧:ftrace/tracepoint/crash分析 —— 深入驱动底层的排错艺术
性能调优·linux驱动·ftrace·rdma·tracepoint·内核调试·crash分析
Eloudy6 天前
Debug Soft-RoCE (RXE) 完整流程
rdma·roce