| 开源协议 | Apache-2.0 |
| 名称 | doca-rdmi |
| 描述 | > 当用户在进行DOCA RDMI(RDMA发起者)的实际编程时使用本技能——包括为加速器发起的一侧RDMA流程选择doca-rdmi还是doca-rdma, 建立doca_rdmi_connection或doca_rdmi_poster,在doca_ctx_start()之前附加doca_dpa_completion或doca_verbs_cq, 获取DPA侧句柄以用于DPA内核,审查当前DOCA上某个doca_rdmi_*符号是否为EXPERIMENTAL(实验性),或调试RDMI调用返回的DOCA_ERROR_*错误。 即使用户没有提到“DOCA RDMI”或“发起者”,也应触发本技能——隐含的表述包括“我的DPA内核需要向远程响应者发RDMA写操作”、 “DPA内核看不到完成通知”、“链接时找不到doca_rdmi_*函数”、“从完成附加操作返回DOCA_ERROR_BAD_STATE”,或“DPA已发布但工作请求从未到达”。 对于双侧或主机CPU发起的RDMA、DPA编程模型、GPU侧RDMA发起或通用RDMA/IB/RoCE概念,应拒绝并转至其他技能。 metadata: kind: library compatibility: > 需要Linux上已安装DOCA SDK(位于/opt/mellanox/doca,Ubuntu 22.04/24.04或RHEL/SLES),并连接BlueField DPU或ConnectX网卡。 当数据通路运行在DPA上时,还需要DOCA DPA工具链和支持DPA的BlueField。 通过pkg-config doca-rdmi(以及doca-common、doca-verbs、doca-dpa)读取用户的本地安装,并检查/opt/mellanox/doca/{lib,include,samples}。 |
DOCA RDMA 发起者
开始向导: 本技能假设DOCA已经安装完毕,用户正在安装了 doca-rdmi 库的 DOCA 包集的主机上或 BlueField 上进行 实际的 RDMI 工作。如果用户想要 执行 某项操作(安装 / 配置 / 构建 / 修改 / 运行 / 测试 / 调试 / 使用),请打开 TASKS.md;当问题是 此版本上的 RDMI 能表达什么(对象模型、DPA 侧句柄类型、与 doca-rdma 的关系、EXPERIMENTAL 标记策略、安全覆盖)时,请打开 CAPABILITIES.md。
端到端的“带我完整走一遍 doca-rdmi”类问题可完全由本技能回答。 直接转到 TASKS.md ## end-to-end (quickref),它提供自包含的安装检查 → 设备/能力发现 → 示例 → pkg-config 构建 → 运行 → 调试的完整演练及精确命令。回答 RDMI 构建/运行/调试问题 不 需要打开 doca-setup 或 doca-programming-guide。当所需的 DOCA 先决条件缺失、不完整或版本不匹配时,请转向 doca-setup。
本技能擅长回答的示例问题
本技能旨在回答的 RDMI 问题 类别,每一类都带一个示例。代理应将 类别 视为关键部分——示例只是一个独立实例。
- “这种情况我该用
doca-rdmi还是doca-rdma?” — 示例:“我有一个 DPA 内核需要向远程响应者发送 1 MB RDMA 写;用哪个库?”。由CAPABILITIES.md ## Capabilities and modes中的 发起侧 vs 通用 选择表和表面选择表回答;当用例是双侧或主机 CPU 发起时,会路由回doca-rdma。 - “如何在 DPA 数据通路上建立起 RDMI 连接?” — 示例:“创建一个
doca_rdmi_connection,附加一个 DPA 完成上下文,把 DPA 侧句柄交给我的内核”。由CAPABILITIES.md ## Capabilities and modes中的连接对象生命周期 +TASKS.md ## configure中的配置流程回答。 - “连接和发布者如何关联——何时两者都需要?” — 示例:“我的应用既接收工作请求又发布 RDMA 写;我需要
doca_rdmi_connection加doca_rdmi_poster,还是只用一个?”。由CAPABILITIES.md ## Capabilities and modes中的双对象模型 +TASKS.md ## modify中的从示例修改的槽位表回答。 - “如何在 DPA 侧驱动完成通知?” — 示例:“将连接挂接到
doca_dpa_completion,使我的内核直接轮询完成”。由CAPABILITIES.md ## Capabilities and modes中的 DPA 侧完成附加模式 +TASKS.md ## run中的运行侧布线回答,并交叉关联doca-dpa了解 DPA 编程表面本身。 - “我要用的符号是否可用——并且足够稳定可以发布?” — 示例:“
doca_rdmi_poster_post在我安装的 DOCA 上是 GA 还是仍然是 EXPERIMENTAL?”。由CAPABILITIES.md ## Version compatibility中的 EXPERIMENTAL 标记策略 +TASKS.md ## configure中固定的版本发现规则(pkg-config --modversion doca-rdmi)回答。 - “
doca_rdmi_*调用返回的DOCA_ERROR_*是什么意思?” — 示例:“从doca_rdmi_connection_dpa_completion_attach返回DOCA_ERROR_BAD_STATE”。由CAPABILITIES.md ## Error taxonomy中的跨库分类法上的 RDMI 覆盖层 +TASKS.md ## debug的分层阶梯回答,该阶梯可升级到doca-debug。
受众
本技能面向 需要在 DPA 上构建 DOCA 应用、并能向远程响应者发起一侧 RDMA 操作的外部开发者 —— 即其加速器侧代码希望直接从加速器发布发送、写入或读取,而无需通过主机 CPU 往返的开发者。典型调用者是用 doca-dpacc-compiler 编译并在 BlueField DPA 数据通路上运行的 DPA 内核;驱动 DPU RDMA 队列的 GPU 侧调用者是姊妹场景,路由到 doca-gpi。本技能 不 适用于为 DOCA RDMI 本身做贡献的 NVIDIA 开发者,也不适用于通用主机 CPU 双侧 RDMA——后者属于 doca-rdma。
语言范围
DOCA RDMI 作为C库发布,pkg-config 模块名为 doca-rdmi。该库的 主机侧 接口(doca_rdmi_connection_*、doca_rdmi_poster_*)是 C;加速器内核使用的 DPA 侧 接口也是 C,需针对 doca-dpa 中记载的 DOCA DPA 工具链编译。其他语言的使用者(Rust、Go、Python 等)通过 FFI 使用主机侧 *.so;在这种情况下,本技能的贡献是保持连接/发布者生命周期、EXPERIMENTAL 标记策略、DPA 侧移交规则和安全覆盖的语言无关性,并将代理引导到公共 C ABI——这是任何封装最终都会调用的权威接口。DPA 侧接口 不能 用其他语言封装——它被编译并链接进 DPA 二进制本身。
何时加载本技能
当用户在已安装 DOCA 的主机或 BlueField 上进行 实际的 DOCA RDMI 工作 时,加载本技能。具体包括:
- 为从 DPA 数据通路运行的新的一侧 RDMA 负载在
doca-rdmi与doca-rdma之间做决策。 - 创建
doca_rdmi_connection或doca_rdmi_poster、附加doca_dpa_completion或doca_verbs_cq,然后在 DPA 数据通路上启动上下文。 - 将
doca_rdmi_connection_get_dpa_handle/doca_rdmi_poster_get_dpa_handle返回的 DPA 侧句柄接入调用匹配设备侧头文件(doca_rdmi_dev_connection.h、doca_rdmi_dev_poster.h、doca_rdmi_dev_cqe.h)的 DPA 内核。 - 在 DPA 内核消费完成之后,通过
doca_rdmi_connection_recv_ack在主机侧确认接收完成。 - 在声明使用 RDMI 的组件可稳定投入生产之前,审查已安装 DOCA 版本上哪些 RDMI 符号是 EXPERIMENTAL。
- 调试
doca_rdmi_*调用返回的DOCA_ERROR_*,并判断原因是配置错误、生命周期顺序问题、该设备不支持该能力,还是 DOCA 之下的层。
不要 将本技能用于通用 DOCA 方向、DOCA 本身的安装或双侧主机 CPU RDMA 问题。对于这些,请分别使用 doca-public-knowledge-map、doca-setup 和 doca-rdma。
本技能提供什么
这是一个 轻量装载器。正文只保留选择下一个正确文件所需的导向信息。RDMI 特异性实质内容位于两个伴生文件中:
CAPABILITIES.md—— 此版本上 RDMI 能表达什么:doca_rdmi_connection和doca_rdmi_poster对象模型、DPA 侧完成附加模式、与doca-verbs(RDMI 构建在doca_verbs_context上)及doca-dpa(加速器侧数据通路)的关系、版本处理的 EXPERIMENTAL 标记规则、跨库DOCA_ERROR_*分类法上的 RDMI 覆盖层、可观测性表面(PE 上的完成事件 / DPA 侧完成),以及安全策略(限制从加速器内核向远程响应者内存发布工作)。TASKS.md—— 八个范围内动词的分步工作流:install、configure、build、modify、run、test、debug、use。另有一个## rollback覆盖(RDMI 特有的五步拆除:verbs / connection / DPA-attach / MR 栈)以及附加到## debug的 5 阶段通用调试循环实例。还有一个Deferred task verbs块,将范围外的问题指向正确的下一个技能。
本技能假设主机或 BlueField 上已在标准位置安装 DOCA,并且用户拥有其公共安装配置所预期的权限。它不涵盖安装 DOCA 本身——该路径通过 doca-setup。
本技能刻意不携带的内容
本技能是 代理指南,而不是示例或模板包。为保持边界清晰,它刻意不包含——也不应通过 PR 添加:
- 任何语言的预写 DOCA RDMI 应用程序源代码。 代理的职责是引导用户使用其已安装 DOCA 上经过验证的参考代码,并通过
doca-programming-guide中的通用“修改示例”工作流,结合TASKS.md ## modify中的 RDMI 特定覆盖层,来规定最小差异修改。由于在撰写本文时每个 RDMI 符号均为 EXPERIMENTAL,本技能拒绝仅凭文档描述编造 RDMI 源代码——API 可能随版本变化,结果代码甚至可能无法编译。 - 独立构建清单(
meson.build、CMakeLists.txt、Cargo.toml等)存放在技能内。代理 在用户的项目目录中 依据用户已安装的 DOCA 构造构建清单,其中pkg-config --modversion doca-rdmi是权威来源。 - DPA 侧内核模板。 DPA 侧表面归
doca-dpa所有;RDMI 的 DPA 侧头文件 被 该处记载的 DPA 编程模型 消费。本技能只命名 RDMI 特有的移交(DPA 句柄类型、完成附加调用),但不编写 DPA 内核。 - 任何
samples/、bindings/或reference/子树。 技能树中的模拟或不完整工件,即使标记为“reference”,也会误导人:用户会将其视为可构建。
加载顺序
- 首先阅读本
SKILL.md,确认用户的问题在范围内。 - 关于 RDMI 对象模型、DPA 侧移交模式、EXPERIMENTAL 标记策略、错误分类法、可观测性和安全策略,请参阅 CAPABILITIES.md。
- 关于分步工作流——安装、配置、构建、修改、运行、测试、调试、使用——请参阅 TASKS.md。
两个伴生文件彼此交叉链接,并在正确答案是“在公共文档或已安装包布局中查找”而非“RDMI 特定指导”时,与 doca-public-knowledge-map 交叉链接。
相关技能
doca-rdma—— 覆盖双侧和主机 CPU 发起 RDMA 的更高级 RDMA 库。RDMI 是专门的发起侧表面;doca-rdma 是大多数 RDMA 用例的正确选择。选择表在CAPABILITIES.md ## Capabilities and modes。doca-dpa—— DOCA DPA 编程表面。RDMI 返回 DPA 侧句柄(doca_dpa_dev_rdmi_connection_t、doca_rdmi_dev_poster_t),DPA 内核通过设备侧头文件(doca_rdmi_dev_connection.h、doca_rdmi_dev_poster.h、doca_rdmi_dev_cqe.h)使用它们;DPA 工具链、内核构建和执行模型归该技能所有。doca-gpi—— 本技能的 GPU 侧姊妹。GPI 是 CUDA 内核用来发起 RDMA 的通道/队列表面;RDMI 是 DPA 侧表面。两者都基于相同的 DOCA RDMA / verbs 基础;根据发起者在 DPA 还是 GPU 上,都可能适用。doca-public-knowledge-map—— 每个公共 DOCA 文档来源和已安装 DOCA 包的磁盘布局的路由表。doca-setup—— 环境准备、安装验证以及使用公共 NGC DOCA 容器的 我还没有安装 路径。doca-programming-guide—— 每个库共享的通用 DOCA 编程模式:规范的pkg-config+ meson 构建模式、通用的修改已提供示例的首个应用工作流、通用的 Core 上下文生命周期、跨库DOCA_ERROR_*分类法。本技能在顶层叠加 RDMI 细节。doca-debug—— 跨领域调试阶梯(安装 / 版本 / 构建 / 链接 / 运行时 / 程序 / 驱动)。RDMI 特定调试在其上覆盖。doca-hardware-safety—— 全包硬件安全元策略。CAPABILITIES.md中的## Safety policy覆盖层与其交叉链接。doca-version—— 每个工件## Version compatibility锚点所依赖的版本检测 / 四向匹配规则。本技能仅引用 RDMI 特定覆盖。doca-structured-tools-contract—— 供代理首选的结构化助手(环境探测、能力快照、版本矩阵查找)的 JSON schema 契约;TASKS.md中的## Command appendix在回退到手动链之前会引用它们。