ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

UCX 的开源 gpunetio submodule 与 --with-doca 的关系分析

UCX 的开源 gpunetio submodule 与 --with-doca 的关系分析 1.external/gpunetio是什么在 UCX 较新版本如 master / 1.23中external/gpunetio是一个git submodule指向 NVIDIA-DOCA/gpunetio。它是DOCA GPUNetIO / DOCA Verbs 的开源子集实现用于支持GDAKIGPUDirect Async Kernel-InitiatedRDMA 通信。根据该仓库 README“This repository provides an open-source version of the DOCA GPUNetIO and DOCA Verbs libraries. The features included here are limited to enabling GDAKI network communication technology over RDMA protocols (InfiniBand and RoCE) using a DOCA-like API in an open-source environment.”功能对比特性DOCA Full SDKOpen Source gpunetioVerbs CPU 控制路径闭源 shared library开源 C 源码GPUNetIO CPU 控制路径闭源 shared library开源 C 源码RDMA Verbs one-sided GPU 数据路径YesYesRDMA Verbs two-sided GPU 数据路径YesNoEthernet GPU 数据路径YesNoDMA GPU 数据路径YesNo结论external/gpunetio是 DOCA GPUNetIO 的开源替代版功能范围更窄但核心 GDAKI one-sided RDMA 能力与 DOCA 版本一致且 CUDA 设备端头文件相同。2. 与--with-doca的关系UCX 1.20.0当前/opt/ucx-1.20.0的情况上游 UCX v1.20.0 的 configure 选项实际是--with-doca-gpunetio(DIR)src/uct/ib/mlx5/gdaki/configure.m4会用它去寻找doca_gpunetio.h并构建libuct_ib_mlx5_gda.la。该库在运行时依赖 DOCA SDK 中闭源的libdoca_gpunetio.so等。当前机器上/opt/ucx-1.20.0的ucx_info -v显示Configured with: ... --with-doca/opt/mellanox/doca ...这说明实际使用的 UCX 源码很可能是DOCA 发行版或经过 patch 的版本它把--with-doca-gpunetio封装/别名成了--with-doca本质上仍是链接 DOCA SDK 的闭源 GPUNetIO。UCX 新版本master / 1.23configure 选项从--with-doca-gpunetio改为--with-gda默认启用可用--without-gda关闭。不再依赖/opt/mellanox/doca里的闭源doca_gpunetio.h/libdoca_gpunetio.so。改为通过子目录src/uct/ib/mlx5/gdaki/gpunetio的符号链接直接引用external/gpunetio/include里的开源头文件。src/uct/ib/mlx5/gdaki/gpunetio - ../../../../../external/gpunetio/includeMakefile 中直接 include 这些开源头文件gpunetio/common/doca_gpunetio_verbs_def.h gpunetio/common/doca_gpunetio_verbs_dev.h gpunetio/device/doca_gpunetio_dev_verbs_common.cuh ...3. 会不会冲突同一 UCX 构建内不会同时启用是互斥路径旧路径UCX 1.20.0 --with-doca→ 使用 DOCA SDK 闭源 GPUNetIO。新路径UCX 新版本 --with-gdaexternal/gpunetiosubmodule → 使用开源 GPUNetIO。一个 UCX 源码树只会走其中一条路configure 不会同时打开两者。因此构建时不会冲突。运行时可能冲突取决于库加载路径如果同一台机器上同时存在/opt/mellanox/doca/lib/libdoca_gpunetio.so闭源 DOCA 版本自己编译的libdoca_gpunetio.so来自external/gpunetio开源版本并且LD_LIBRARY_PATH同时包含了两者或者某进程通过dlopen同时加载了两套库就可能出现符号冲突两者都导出doca_gpu_*、doca_gpunetio_*、doca_verbs_*等符号动态链接器可能把调用解析到错误的实现。头文件/结构体版本不一致虽然 CUDA 设备端头文件相同但主机端库实现细节可能不同混用会导致未定义行为。4. 建议二选一要么继续用 UCX 1.20.0 DOCA SDK闭源路径。要么升级到支持external/gpunetio的新 UCX并不设置--with-doca改用--with-gda或默认。不要让两套libdoca_gpunetio.so同时出现在LD_LIBRARY_PATH。如果必须共存应通过容器、chroot 或严格的LD_LIBRARY_PATH隔离让不同进程分别加载不同版本的 UCX 及其依赖。升级 UCX 时建议清理旧 DOCA GPUNetIO 相关库或至少确认新 UCX 没有通过ldd链接到/opt/mellanox/doca/lib/libdoca_gpunetio.so。5. 对 Holoscan SDK 的启示Holoscan SDK 的 Dockerfile 中 UCX 构建参数如--with-doca是基于其内部验证的 UCX 版本。如果后续 Holoscan 升级到使用带external/gpunetio的 UCX构建脚本会相应改为# 旧--with-doca/opt/mellanox/doca# 新示意--with-gda# 并确保 git submodule update --init external/gpunetio因此/opt/ucx-1.20.0当前基于闭源 DOCA 的配置是合理的若要迁移到开源 gpunetio需要同步升级 UCX 版本并调整构建参数。
返回列表