资讯详情

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

📅 2026/10/14 2:00:48 | 华诺云谱 👁 阅读
全文 - 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
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑