全文 - doca-sample 之 DOCA RDMA README.md

发布时间:2026/10/14 2:00:42

全文 - doca-sample 之 DOCA RDMA README.md DOCA RDMA每个示例展示两个对端之间的连接使用不同的 RDMA 操作将数据从一个对端传输到另一个对端。有关可用 RDMA 操作的更多信息请参阅“任务”部分。每个示例由两个可执行程序组成每个可执行程序运行在一个对端上。这些示例可以在 DPU 或主机上运行只要所选对端之间具有连接。注意在运行示例之前请确保由设备名称和 GID 索引选择的设备已正确设置并且彼此之间具有连接。在每个示例中用户负责在对端之间复制描述符。通用示例步骤大多数示例遵循以下主要基本步骤分配资源定位并打开设备。所选设备是支持该示例相关任务的设备。如果示例不需要任何任务则可以选择任何设备。创建本地 MMAP 并配置它包括设置 MMAP 内存范围和相关权限。创建 DOCA PE。创建 RDMA 实例并配置它包括设置相关权限。将 RDMA 上下文连接到 PE。示例特定配置配置与示例相关的任务如果有。包括为每种任务类型设置任务数量。为每种任务类型设置回调函数逻辑如下成功完成回调验证从远端接收的数据如果有是否有效。打印传输的数据。释放任务及任务特定资源例如源/目标缓冲区。如果步骤 a. 和 b. 中发生错误则更新遇到的错误。失败完成回调更新遇到的错误。释放任务及任务特定资源例如源/目标缓冲区。减少剩余任务数并在达到 0 时停止上下文。设置状态变更回调函数逻辑如下一旦上下文进入 Starting 状态只能从 Idle 到达导出并连接 RDMA并且在某些示例中导出本地 mmap 或同步事件。一旦上下文进入 Running 状态在 RDMA 示例中只能从 Starting 状态到达在某些示例中仅打印日志并等待对端或同步事件。在其他示例中准备并提交任务如果需要根据收到的已导出 mmap 描述符创建 mmap该描述符由对端传递。从缓冲区清单请求所需缓冲区。分配并初始化所需任务同时将剩余任务数参数设置为该任务的用户数据。提交任务。一旦上下文进入 Stopping 状态打印相关日志。一旦上下文进入 Idle 状态打印相关日志。发送更新表示主循环可以停止。将程序的资源设置为上下文用户数据以便在回调中使用。创建缓冲区清单并启动它。启动上下文。信息启动上下文后PE 会调用状态变更回调函数执行相关步骤。信息在一次成功运行中每个部分按第 2.b 节中呈现的顺序执行。推进 PE推进 PE直到上下文返回 Idle 状态且主循环可以停止原因可能是所有任务已完成的一次运行或由于致命错误。清理资源RDMA 读RDMA 读请求方此示例说明如何使用 DOCA RDMA 从远端对端响应方读取。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。为此示例配置了读任务。在此示例中在成功任务完成回调中从对端读取数据验证其有效并打印。本地 mmap 未导出因为对端不打算访问它。为了从对端读取会根据对端导出的 mmap 创建远端 mmap。参考rdma_read_requester/rdma_read_requester_sample.crdma_read_requester/rdma_read_requester_main.crdma_read_requester/meson.buildRDMA 读响应方此示例说明如何为 DOCA RDMA 读请求设置远端对端。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 和 RDMA 实例的权限都允许 RDMA 读。此示例未配置任务因此不会准备和提交任务也没有任务完成回调。本地 mmap 导出到远端内存以允许对端将其用于 RDMA 读。未创建远端 mmap因为此示例无意访问远端内存。参考rdma_read_responder/rdma_read_responder_sample.crdma_read_responder/rdma_read_responder_main.crdma_read_responder/meson.buildRDMA 写RDMA 写请求方此示例说明如何使用 DOCA RDMA 写入远端对端响应方。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。为此示例配置了写任务。在此示例中将数据写入对端并在成功任务完成回调中打印。本地 mmap 未导出因为对端不打算访问它。为了写入对端会根据对端导出的 mmap 创建远端 mmap。参考rdma_write_requester/rdma_write_requester_sample.crdma_write_requester/rdma_write_requester_main.crdma_write_requester/meson.buildRDMA 写响应方此示例说明如何为 DOCA RDMA 写请求设置远端对端。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 和 RDMA 实例的权限都允许 RDMA 写。此示例未配置任务因此不会准备和提交任务也没有任务完成回调。在此示例中一旦上下文状态变为 Running使用状态变更回调打印写入响应方内存的数据。这仅在收到用户输入、表明请求方已完成写入之后进行。本地 mmap 导出到远端内存以允许对端将其用于 RDMA 写。未创建远端 mmap因为此示例无意访问远端内存。参考rdma_write_responder/rdma_write_responder_sample.crdma_write_responder/rdma_write_responder_main.crdma_write_responder/meson.buildRDMA 带立即值写RDMA 带立即值写请求方此示例说明如何使用 DOCA RDMA 写入远端对端响应方并附带一个通过 OOB 发送的 32 位立即值。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。为此示例配置了带立即值的写任务。在此示例中将数据写入对端并在成功任务完成回调中打印。本地 mmap 未导出因为对端不打算访问它。为了写入对端会根据对端导出的 mmap 创建远端 mmap。参考rdma_write_immediate_requester/rdma_write_immediate_requester_sample.crdma_write_immediate_requester/rdma_write_immediate_requester_main.crdma_write_immediate_requester/meson.buildRDMA 带立即值写响应方此示例说明如何为 DOCA RDMA 写请求设置远端对端同时从对端的 OOB 接收一个 32 位立即值。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 和 RDMA 实例的权限都允许 RDMA 写。为此示例配置了接收任务以获取立即值。如果在带立即值的写任务之前未能提交接收任务将导致致命失败。在此示例中成功任务完成回调还包括检查结果操作码以验证接收任务在收到带立即值的写请求后已完成。验证写入响应方内存的数据是否有效并打印它以及收到的立即数据。本地 mmap 导出到远端内存以允许对端将其用于 RDMA 写。未创建远端 mmap因为此示例无意访问远端内存。参考rdma_write_immediate_responder/rdma_write_immediate_responder_sample.crdma_write_immediate_responder/rdma_write_immediate_responder_main.crdma_write_immediate_responder/meson.buildRDMA 发送与接收RDMA 发送此示例说明如何使用 DOCA RDMA 向远端对端发送消息。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。为此示例配置了发送任务。在此示例中发送的数据在任务准备期间打印而不是在成功任务完成回调中打印。本地 mmap 未导出因为对端不打算访问它。未创建远端 mmap因为此示例无意访问远端内存。参考rdma_send/rdma_send_sample.crdma_send/rdma_send_main.crdma_send/meson.buildRDMA 接收此示例说明远端对端如何接收由对端发送方发送的消息。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。为此示例配置了接收任务以获取发送的数据。如果在发送任务之前未能提交接收任务将导致致命失败。在此示例中在成功任务完成回调中从对端接收数据验证其有效并打印。本地 mmap 未导出因为对端不打算访问它。未创建远端 mmap因为此示例无意访问远端内存。参考rdma_receive/rdma_receive_sample.crdma_receive/rdma_receive_main.crdma_receive/meson.buildRDMA 带立即值发送与接收RDMA 带立即值发送此示例说明如何使用 DOCA RDMA 向远端对端发送消息并附带一个通过 OOB 发送的 32 位立即值。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。为此示例配置了带立即值的发送任务。在此示例中发送的数据在任务准备期间打印而不是在成功任务完成回调中打印。本地 mmap 未导出因为对端不打算访问它。未创建远端 mmap因为此示例无意访问远端内存。参考rdma_send_immediate/rdma_send_immediate_sample.crdma_send_immediate/rdma_send_immediate_main.crdma_send_immediate/meson.buildRDMA 带立即值接收此示例说明远端对端如何接收由对端发送方发送的消息同时从对端的 OOB 接收一个 32 位立即值。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。为此示例配置了接收任务以获取发送的数据和立即值。如果在带立即值的发送任务之前未能提交接收任务将导致致命失败。在此示例中成功任务完成回调还包括检查结果操作码以验证接收任务在收到带立即值的发送消息后已完成。验证从对端接收的数据是否有效并打印它以及收到的立即数据。在此示例中在成功任务完成回调中从对端接收数据验证其有效并打印。本地 mmap 未导出因为对端不打算访问它。未创建远端 mmap因为此示例无意访问远端内存。参考rdma_receive_immediate/rdma_receive_immediate_sample.crdma_receive_immediate/rdma_receive_immediate_main.crdma_receive_immediate/meson.buildRDMA 远端同步事件RDMA 远端同步事件请求方此示例说明如何使用 DOCA RDMA 在本地同步事件和远端同步事件之间进行同步。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。为此示例配置了一个 “remote net sync event notify set” 任务。对于此任务成功任务完成回调具有以下逻辑打印一条信息日志说明任务已成功完成并打印该任务的特定成功完成日志。减少剩余任务数。一旦达到 0释放任务及任务特定资源。停止上下文。对于此任务失败任务完成回调会停止上下文即使剩余任务数不为 0因为对端之间的同步将失败。为此示例配置了一个 “remote net sync event get” 任务。对于此任务成功任务完成回调还包括重新提交任务直到检索到大于或等于预期值的值。一旦检索到这样的值提交一个 “remote net sync event notify set” 任务以表示示例完成包括相应更新成功完成消息。增加已提交任务数。如果遇到错误并且 “remote net sync event notify set” 任务未提交则释放该任务及任务资源。对于此任务失败任务完成回调还包括释放 “remote net sync event notify set” 任务及任务资源。本地 mmap 未导出因为对端不打算访问它。未创建远端 mmap因为此示例无意访问远端内存。为了与对端同步事件会根据对端导出的同步事件创建同步事件远端网络。一旦上下文从 Starting 变为 Running两个任务都会在状态变更回调中准备并提交。“remote net sync event get” 任务的用户数据指向 “remote net sync event notify set” 任务。参考rdma_sync_event_requester/rdma_sync_event_requester_sample.crdma_sync_event_requester/rdma_sync_event_requester_main.crdma_sync_event_requester/meson.buildRDMA 远端同步事件响应方示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。此示例包括创建一个本地同步事件并将其导出到远端内存以允许对端创建远端句柄。此示例未配置任务因此不会准备和提交任务也没有任务完成回调。在此示例中一旦上下文从 Starting 变为 Running使用状态变更回调执行以下步骤等待同步事件从远端侧被触发。从本地侧通知同步事件。等待来自远端侧的完成通知。参考rdma_sync_event_responder/rdma_sync_event_responder_sample.crdma_sync_event_responder/rdma_sync_event_responder_main.crdma_sync_event_responder/meson.buildRDMA 多连接发送与接收以下示例说明如何执行多个连接以演示对端之间的消息交换。请注意使用 DOCA RDMA CM 流程参见“使用 RDMA CM 连接流程进行连接”一个示例将充当服务器而另一个将充当客户端。充当客户端的示例的多个实例需要独立执行以模拟每个客户端对端从而达到所需的 RDMA 连接数量。RDMA 多连接发送此示例展示如何建立多个连接并演示多个对端客户端如何使用 DOCA RDMA CM 流程向远端单个对端服务器发送消息参见“使用 RDMA CM 连接流程进行连接”。单个对端服务器如何使用 DOCA RDMA CM 流程向多个远端对端客户端发送消息参见“使用 RDMA CM 连接流程进行连接”。多个远端对端如何使用 DOCA RDMA 导出和连接流程向其已连接的对端发送消息参见“导出和连接 RDMA”。注意在 DOCA RDMA CM 流程中需要独立执行此示例的多个实例以模拟每个客户端对端从而达到所需的 RDMA 连接数量。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。为此示例配置了发送任务。在此示例中发送的数据在任务准备期间打印而不是在成功任务完成回调中打印。本地 mmap 未导出因为对端不打算访问它。未创建远端 mmap因为此示例无意访问远端内存。连接数选项可以设置为使用 DOCA RDMA CM 流程时单个对端服务器发送方所期望的远端对端数量参见“使用 RDMA CM 连接流程进行连接”。使用 DOCA RDMA 导出和连接流程时要连接到其远端对端的对端数量参见“导出和连接 RDMA”。注意在 DOCA RDMA CM 流程中连接数不能用于模拟每个客户端对端。参考rdma_multi_conn_send/rdma_multi_conn_send_sample.crdma_multi_conn_send/rdma_multi_conn_send_main.crdma_multi_conn_send/meson.buildRDMA 多连接接收此示例展示如何执行多个连接并演示多个远端对端客户端如何使用 DOCA RDMA CM 流程接收由单个对端发送方服务器发送的消息参见“使用 RDMA CM 连接流程进行连接”。单个远端对端服务器如何使用 DOCA RDMA CM 流程从多个对端客户端发送方接收消息参见“使用 RDMA CM 连接流程进行连接”。多个远端对端如何使用 DOCA RDMA 导出和连接流程接收其已连接的对端发送的消息参见“导出和连接 RDMA”。注意在 DOCA RDMA CM 流程中需要独立执行此示例的多个实例以模拟每个客户端对端从而达到所需的 RDMA 连接数量。示例逻辑如“通用示例步骤”所述并特别注意以下内容此示例中本地 mmap 的权限设置为本地读和写。为此示例配置了接收任务以获取发送的数据。注意如果在发送任务之前未能提交接收任务将导致致命失败。在此示例中在成功任务完成回调中从对端接收数据验证其有效并打印。本地 mmap 未导出因为对端不打算访问它。未创建远端 mmap因为此示例无意访问远端内存。连接数可以设置为使用 DOCA RDMA CM 流程时单个远端对端服务器所期望的对端数量参见“使用 RDMA CM 连接流程进行连接”。使用 DOCA RDMA 导出和连接流程时连接到其发送方对端的远端对端数量参见“导出和连接 RDMA”。注意在 DOCA RDMA CM 流程中连接数不能用于模拟每个客户端对端。参考rdma_multi_conn_receive/rdma_multi_conn_receive_sample.crdma_multi_conn_receive/rdma_multi_conn_receive_main.crdma_multi_conn_receive/meson.build
延伸阅读

更多相关文章

2026/10/14 2:00:42

【ESP32笔记】开发环境的搭建

本节目标:在 Windows 上装好虚拟机与 ubuntu 20.04,拉取 esp-idf v5.2 并成功编译出第一个工程一、本节要解决的问题 开发 ESP32 最头疼的事情莫过于开发环境搭建:网上教程多如牛毛,但完全照着做一遍又不行,官方资料也…

2026/10/14 2:00:42

神经网络架构图画图神器:ML Visuals PPT模板使用指南

简介:这份神经网络画图PPT模版专为需要讲解机器学习与深度学习概念的科研人员、学生和教师设计,可快速搭建专业演示文稿。模版内含超过一百页幻灯片,覆盖Softmax、卷积、线性加和归一化、前馈网络、多头注意力机制、位置编码等关键结构&#…

2026/10/14 3:15:46

电子零部件生产追溯系统技术实现:破解全链路溯源与合规痛点

电子零部件行业因 SKU 密度高、精度要求严、下游客户合规溯源要求明确的特性,基于全链路数据打通的生产追溯系统,是当前解决质量管控效率低、合规校验难、客诉响应慢等问题的核心技术路径。 一、电子零部件生产追溯的核心痛点是什么? 据工信…

2026/10/14 3:15:46

生产环境Agent编排:以失败兜底为核心的设计实践

先说结论:把“不失败”当成生产环境里 Agent 编排的目标,是我见过最多项目翻车的根源。我自己做过的模拟项目X,一个面向终端用户的客服问答 Agent,从第一版开始就没指望大模型、第三方接口、甚至是编排器自身能一直稳定。每个环节…

2026/10/13 5:19:27

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/13 17:09:18

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/14 0:00:33

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:33

macOS/iOS高精度计时:mach_absolute_time原理与实战

1. 项目概述:为什么mach_absolute_time是 macOS/iOS 时间测量的“黄金标准”在 macOS 和 iOS 开发中,我见过太多人用CFAbsoluteTimeGetCurrent()或NSDate.timeIntervalSinceReferenceDate做性能打点,结果在高精度场景下被系统时钟跳变、NTP 同…

2026/10/14 0:00:33

SCORM课件演示与测试全解析:从API通信到自动化验证

简介:这是一套遵循SCORM标准的交互式课件演示与测试资源,面向E-Learning课程开发者、LMS平台测试人员及在线教学从业者,用于验证课件在不同学习管理系统中的识别、传递与跟踪能力。压缩包共28个文件,约12.07MB,以swf动…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑