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 篇先建立全局架构第 0307 篇分别深入通用 API 与对象、mlx5 用户态 provider、uverbs、RDMA Core 和 mlx5 内核驱动。在此基础上第 0810 篇横向串联内存、QP/CQ/EQ 和数据收发三条专题路径第 11 篇再把内存注册与同步机制扩展到 GPU DMA-BUF 场景。3. 阅读路线首次阅读时按文章编号展开先了解软件架构和 Verbs 对象再理解用户态、内核通用层与设备驱动的实现边界随后串联内存、队列、数据路径和 GPU 内存专题。如果只关心特定方向可以在阅读第 02、03 篇后选择专题用户态数据路径重点阅读第 04、09、10 篇内核控制路径重点阅读第 0509 篇GPU 内存路径重点阅读第 08、11 篇。图中的箭头表示阅读顺序。中间一行的三个模块分别对应第 04、0506、07 篇文章建议从左到右阅读。4. 源码基线仓库版本Commitrdma-corev65.0-1-gb5d5872dcb5d5872dcee3fcb1800662a2708ee906c2efa1c7Linuxv7.28d3ae59288f1e7d58d76558a6ee96d533bc5019frocm-systemship-version_10.1.624605ea42aa92369c55f13edb934711cba18ab123790nvshmemv3.6.5-06e53a40d9db16df170b3b0057e94c340d72f77ebopen-gpu-kernel-modules610.57.04e4a5faa2567f28c8eabe0ebb6422b6d0abcf37eb5. 源码入口源码入口主要内容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 接口与对象定义。