新闻详情

新闻详情

首页 / 资讯中心 / 详情

DOCA 的模块、作用与依赖关系

发布时间:2026/10/2 16:06:41来源:尧图网络
DOCA 的模块、作用与依赖关系
1. DAKI、IBGDAGPUDirectRDMA、gpunetioGINGDAGDR这几个词分属三个不同层次技术理念、库/SDK、通信框架特性。下面按层次梳理。1.1. 理念层GPUDirect 家族技术不是库GPUDirect 是 NVIDIA 一系列绕过 CPU的直达技术的总称覆盖存储、网络、GPU 间、视频等方向。网络方向有两个关键成员技术解决的问题含义GPUDirect RDMA (GDR)数据路径网卡通过 PCIe 直接 DMA 读写 GPU 显存零拷贝不再需要 CPU 倒手内存GPUDirect Async (GDA)控制路径GPU 侧自主调度网络操作进一步把 CPU 从控制逻辑中解放出来2016 年 CUDA 8.0 引入GDAKIGPUDirect Async Kernel-Initiated就是 GPUDirect Async 在网络上的具体形态CUDA kernel 里的 GPU 线程自己构造 WQE、敲 NIC doorbell、轮询 CQE整个收发过程 CPU 完全不参与。它在 InfiniBand 上的早期实现叫IBGDAInfiniBand GPUDirect Async最初是 NVSHMEM 内部的一个 transport。1.2. 库层DOCA GPUNetIOGDAKI 的统一实现GDAKI 以前各家NVSHMEM、NCCL各自重复造轮子IBGDANVIDIA 于是把它收敛成一个统一的库——DOCA GPUNetIO官方定位就是同时实现 GPUDirect RDMA数据直达和 GPUDirect Async Kernel-InitiatedGPU 控制通信两项技术。闭源版在 DOCA SDK 里DOCA::gpunetio开源版就是 GitHub 上那个 gpunetio 仓库目标是把多个 GDAKI 实现合并成统一的驱动和库供 NVSHMEM、NCCL、UCX 共用。关系GDAKI 是技术思想GPUNetIO 是这个思想的官方 SDK 实现。官方文档也直接说 “GDAKI is also named IBGDA when used with the RDMA protocol”。1.3. 框架层GINNCCL 的网络模式GINGPU-Initiated Networking是 NCCL 2.28 引入 Device API 时的三种操作模式之一另两个是面向 NVLink/PCIe 的 LSA 和面向 NVLink SHARP 的 MultimemGIN 专管跨节点 RDMA。GIN 的三层架构里最底层是可插拔的网络后端有两个GDAKI 后端libnccl-net-gdaki.so基于DOCA GPUNetIO实现真正的 GPU→NIC 直连要求 ConnectX-6 Dx 及以上Proxy 后端GPU 通过无锁队列把描述符交给 CPU 代理线程转发兼容任意 RDMA 网卡性能较低。1.4. 汇总图┌─────────────────────────────────────────────────────┐ │ 框架层消费者 │ │ NCCL ── Device API ──► GINGPU-Initiated Networking│ │ ├─ GDAKI 后端 ──┐ │ │ └─ Proxy 后端任意 RDMA 网卡│ │ NVSHMEM ── transport: IBGDA ──► 已被 GPUNetIO 取代 │ │ UCX ── GDAKI module │ │ ├───────────────────────────────────┼───────────────────┤ │ 库层实现者 ▼ │ │ DOCA GPUNetIO闭源 SDK / 开源 gpunetio │ │ ├─ GPU 数据路径写 WQE、敲 doorbell、poll CQE │ │ └─ CPU 控制路径建 QP/CQ、导出 GPU 句柄 │ ├──────────────────────────────────────────────────────┤ │ 技术理念层GPUDirect 家族 │ │ GPUDirect RDMA ── 数据路径NIC 直接 DMA 读写 GPU 显存 │ │ GPUDirect Async ── 控制路径GPU 自主调度通信 │ │ └─ GDAKI Kernel-Initiated 形态 │ │ └─ IBGDA GDAKI 在 InfiniBand 上的早期实现 │ └──────────────────────────────────────────────────────┘一条贯穿线GDAKI≈IBGDA是思想 → GPUNetIO 是统一实现 → GIN 是 NCCL 里基于 GPUNetIO 落地的特性而 GPUDirect RDMA 是这一切的地基没有它网卡连 GPU 显存都摸不着。官方生态对应关系是NCCL 的 GIN transport、NVSHMEM 的 GPUNetIO transport替代 IBGDA、UCX 的新 GDAKI 模块全部收敛到 GPUNetIO 之上。顺带一个和你上一个问题的衔接点NVSHMEM 的 GPUNetIO transport 依赖 DOCA SDK 来解锁 Data Direct Placement 等高级网卡特性最低要求版本正是 DOCA 3.4也是通过DOCA_SDK_LIB_PATH环境变量指定的——这就是开源 gpunetio 里那个 SDK 模式设计的实际用途。2. DOCA::gpunetio 与 开源 gpunetio2.1. DOCA 3.4 的模块、作用与依赖关系DOCA 3.4 的 SDK 在编程指南中把组件分为三层DOCA Libraries核心功能库、DOCA Utils辅助工具、DOCA Drivers驱动框架。官方说明每个库都提供 API、文档和示例用于加速数据中心和网络应用开发。1. DOCA Libraries按官方文档结构模块作用DOCA Common含 DOCA Core DOCA Log所有库的地基设备打开、内存管理buf/mmap、进度引擎PE、Sync Event、日志DOCA Flow通用包转发与流表卸载match-action 流水线、steering、RSS、hairpin 等含 Flow Connection Tracking、Flow TuneDPA SubsystemDOCA DPA、DPA Comms、DPA Verbs在 BlueField 的 DPA数据路径加速器核上编程DOCA PCC可编程拥塞控制ZTR-RTTCC、DCQCN 算法DOCA DMABlueField DMA 引擎的内存拷贝DOCA ComchHost 与 DPU 之间的通信通道DOCA UROM把 HPC/AI 并行计算任务从主机卸载到 DPU 的框架DOCA RDMA高层 RDMA 操作封装Write/Send/Read/RecvDOCA RDMA Verbs低层 verbs 风格的 QP/CQ/UMEM/UAR 直接管理是 GDAKI 的基础DOCA Ethernet以太网 TXQ/RXQ 队列创建与管理DOCA GPUNetIOGPU 中心数据路径GDAKI本文主角DOCA App Shield主机入侵检测DOCA Compress硬件压缩/解压卸载DOCA SHA硬件 SHA 计算DOCA Erasure Coding纠删码卸载DOCA AES-GCMAES-GCM 加解密卸载DOCA Rivermax媒体流网络库ST 2110 等DOCA Telemetry / Telemetry Exporter设备遥测数据采集与导出含 Adp Retx、Diag、DPA、PCC、PCI、PHY 子项DOCA Device EmulationDevEmu PCI / Virtio在 DPU 上模拟 PCI/Virtio 设备virtio-fs/net/blk 等DOCA STA简化存储 target 应用如 SPDK、NVMe-oF在 BlueField-3 上的集成与卸载DOCA Management通过 Linux fwctl 框架管理 DPU/主机设备及其 PF/VF/SF、固件配置DOCA UtilsDOCA Arg Parser命令行解析。DOCA DriversDOCA UCX、MLX 驱动文档IB/Ethernet/RDMA 底层驱动能力。2. 模块间依赖关系核心依赖链可概括为DOCA Common / Corelibdoca_common 设备、内存 buf/mmap、PE、Sync Event、Log ┌──────────┼──────────┬──────────┐ ▼ ▼ ▼ ▼ DOCA Flow DPA 子系统 DOCA RDMA DOCA DMA Ethernet RDMA Verbs Comch ... │ ┌──┴──┐ │ │ DOCA PCC UROM │ ▼ ▼ ▼ ▼ └─────► DOCA GPUNetIO ◄─────┘ 组合 EthernetFlow / RDMA / Verbs / DMA / Comch一切库都依赖 DOCA Common设备句柄、内存注册、进度引擎、日志都由它提供。DPA 子系统基于 CorePCC的数据路径运行在 DPA 上UROM基于 DPA Comch。RDMA / RDMA Verbs / Ethernet底层走 mlx5/libibverbs 驱动层。GPUNetIO 是组合者它本身不创建队列而是给 Core、Ethernet、Flow、RDMA、Verbs、DMA、Comch 创建的对象导出 GPU 句柄让 CUDA kernel 直接操作。2.2. 开源 gpunetio 依赖 DOCA 的哪些模块答案默认模式下一个 DOCA 模块都不依赖。这正是它的设计目标——“open-source version of DOCA GPUNetIO and DOCA Verbs libraries”即用开源代码重新实现这两个库的功能子集让 GDAKI 可以在无 DOCA SDK 的环境运行。我克隆仓库分析了 Makefile 和源码它的实际依赖是依赖方式说明libibverbslibmlx5直接链接-libverbs -lmlx5rdma-core / MLNX_OFED 用户态 verbsQP/CQ/MR 的实际创建者libcudaCUDA Driver APIlibcudart_static直接链接GPU 控制与示例libgdrapi.so.2GDRCopy运行时 dlopenCPU 侧映射/访问 GPU 显存MPI可选示例用Makefile 里有MPI_HOME它自带了doca_verbs_dev/qp/cq/umem/uar和doca_gpu_*的完整开源实现src/doca_verbs_*.cpp直接调ibv_*和mlx5dv_*所以纯开源模式与 DOCA 解耦。但有一个可选的 “SDK 模式”设置环境变量DOCA_SDK_LIB_PATH指向 DOCA 安装目录如/opt/mellanox/doca/lib/x86_64-linux-gnu后它会通过dlopen动态加载三个 DOCA 闭源库以解锁受限功能libdoca_common.soDOCA Corelibdoca_verbs.soDOCA RDMA Verbslibdoca_gpunetio.soDOCA GPUNetIO 闭源版我在源码中确认了这三个.so正是*_sdk_wrapper.cpp里 dlopen 的目标。2.3. 闭源完整版GPUNetIO 依赖 DOCA 的哪些模块闭源 GPUNetIO 由三部分组成libdoca_gpunetio.soCPU 控制路径、libdoca_gpunetio_device.aGPU 数据路径静态库含 RDMA/DMA/CommCh 的 device 函数、doca_gpunetio_dev_*.cuh头文件Ethernet 和 Verbs 的内联 device 函数。按官方架构文档它依赖/组合的 DOCA 模块如下DOCA 模块在 GPUNetIO 中的作用必要性DOCA Common / Core创建网卡设备句柄、GPU 设备、内存管理必需DOCA RDMA Verbs创建 QP/CQ/UAR/UMEM供 Verbs GDAKIIBGDA数据路径使用支持单边双边 RDMAVerbs 功能必需DOCA RDMA高层 RDMA 队列Write/Send/Read/Recvdevice 函数在静态库.a里高层 RDMA 必需DOCA Ethernet创建 TXQ/RXQ 收发队列并导出 GPU 句柄以太网功能必需DOCA Flow安装流规则把报文 steering 到 GPU 管理的队列以太网接收必需需 rootDOCA DMA创建 DMA 队列GPU kernel 可触发 BlueField DMA 引擎拷贝DMA 功能必需DOCA ComchGPUNetIO CommCh 设备函数GPU 侧通道通信包含在静态库中CommCh 功能必需官方原文也明确以太网 GDAKI 需要 GPUNetIO Ethernet Flow 三个库组合DMA 则需要 GPUNetIO DMA 两个库。此外是外部非 DOCA依赖libdoca_gpunetio.so依赖libcuda.soCUDA Driver API静态设备库libdoca_gpunetio_device.a用 CUDA 13.0 预编译链接它的应用必须用 CUDA 13.0另有 GDRCopy、mlx5 驱动、nvidia-peermem/dmabuf 等系统级依赖。开源 vs 闭源速览能力闭源 Full SDK开源版Verbs 单边 GPU 数据路径Read/Write/Atomic✔✔头文件两边相同Verbs 双边 GPU 数据路径Send/Recv✔✘Ethernet GPU 数据路径依赖 EthFlow✔✘DMA GPU 数据路径依赖 DOCA DMA✔✘CommCh GPU 数据路径✔✘CPU 控制路径闭源 .so开源 C直连 libibverbs/libmlx5对 DOCA 的依赖依赖 Core/Verbs/RDMA/Eth/Flow/DMA/Comch无可选 dlopen 三个 .so 解锁受限功能功能差异以官方 README 的 Open vs Full 表为准。总结开源 gpunetio 是对 DOCA GPUNetIO DOCA Verbs 的开源重写默认只依赖 rdma-corelibibverbs/libmlx5、CUDA 和 GDRCopy不依赖任何 DOCA 闭源模块闭源完整版则建立在 DOCA Core 之上横向组合 Verbs、RDMA、Ethernet、Flow、DMA、Comch 六个模块功能覆盖单边/双边 RDMA、以太网收发和 DMA。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

MindManager 2026 安装初始化报错排查与高效使用指南 2026/10/2 16:53:50

MindManager 2026 安装初始化报错排查与高效使用指南

很多刚接触思维导图的朋友问我,2026年如果只想选一款桌面端思维导图工具,到底该不该直接上 MindManager?我的回答一直是:如果你的工作流里充斥着复杂的项目拆解、会议纪要和知识体系整理,那它依然是目前逻辑承载能力最…

阅读更多 →
质量工程师的完整工具地图:从测试设计到CI/CD落地 2026/10/2 16:53:50

质量工程师的完整工具地图:从测试设计到CI/CD落地

做质量工程师这些年,我最大的感触是:这个岗位看着拼的是工具熟练度,实际上拼的是对工具背后逻辑的理解。我见过有人把JMeter的线程数调得很溜,却连一个像样的性能测试计划都写不出来;也见过团队把JIRA流程建得比需求还…

阅读更多 →
PHP上传几MB图片为什么CPU飙到100%?从图片尺寸到异步处理的实战 2026/10/2 16:53:43

PHP上传几MB图片为什么CPU飙到100%?从图片尺寸到异步处理的实战

最近维护一个 PHP 图片上传功能时,遇到一个比较奇怪的问题: 用户上传一张普通图片,文件大小只有几 MB,但是服务器 CPU 很快就升到了 100%。 与此同时,PHP-FPM 出现大量慢请求: PHP请求耗时 8 秒 PHP请求耗时…

阅读更多 →
IMU标定避坑指南:从零偏建模到壳体失准角,飞控落地的关键一步 2026/10/2 16:53:37

IMU标定避坑指南:从零偏建模到壳体失准角,飞控落地的关键一步

前阵子帮一个做飞控的团队排查落地漂移问题,我问他们的IMU标定是怎么做的。对方说得很顺畅:模块平放一分钟取平均值当零偏,六个方向各停十秒算比例因子,然后直接装到无人机上。我一听就知道问题出在哪了——这套流程只能算"测…

阅读更多 →
STM32H743VIT6封装与系统边界深度解析 2026/10/2 16:53:37

STM32H743VIT6封装与系统边界深度解析

1. 为什么“STM32H743VIT6采购复核”这件事,90%的工程师都踩在同一个坑里?你手头正赶一个工业边缘网关项目,BOM表里赫然写着“STM32H743VIT6 2”,采购同事发来确认邮件:“型号已锁定,交期4周,是…

阅读更多 →
ESP32 接大模型不是 AI 硬件:8 个工程陷阱与量产级解决方案 2026/10/2 16:53:37

ESP32 接大模型不是 AI 硬件:8 个工程陷阱与量产级解决方案

上个月我把一个 ESP32-S3 语音助手接上了大模型 API,朋友看了一眼说:这不就是 AI 硬件了吗?我笑了笑没接话。因为被他忽略掉的那一长串东西——内存、算力、模型转换、云端链路、功耗、实时性、稳定性、安全——才是真正让人掉头发的地方。网…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉