DGX Spark (GB10) 双机互联 + nvidia-peermem 加载失败 — 论坛反馈报告

作者: 清泓
日期: 2026-06-17
系统: DGX OS 7.2.3 + 580.159.03 + 内核 6.17.0-1021-nvidia (ARM64 Grace Blackwell)
硬件: 2× NVIDIA DGX Spark (GB10) 互连用 1 根 QSFP56 DAC


1. 双机互联 (成功)

配置

  • 物理: 1 根 QSFP56 DAC 直连两机 enp1s0f1np1enp1s0f1np1

  • IP:

    • 01 机: 192.168.100.1/24

    • 02 机: 192.168.100.2/24 (hostname spark-798a)

  • MTU: 9000 (jumbo frame)

  • 协议: IB / RoCE v2 (inbox kernel 驱动)

  • SSH 免密: 通

  • 驱动版本对齐: 两机均 580.159.03,内核 6.17.0-1021-nvidia

协商结果

ibstat rocep1s0f1 Rate 200 Gbps
ethtool enp1s0f1np1 Speed 200000Mb/s
Link detected yes
CX-7 设备 4 个,2 个 Up(网线两端各 1 个)

性能测试

测试 带宽 备注
ib_send_bw 1 QP, 64KB 12.99 GB/s ≈ 100 Gbps 单向,200G 双向满速
ib_write_bw 16 QP, 64KB 13.32 GB/s 107 Gbps,多 QP 不涨
ib_write_bw 32 QP, 64KB 13.32 GB/s 同样 100G 满速
ib_write_bw 8 QP, 1MB 13.34 GB/s 大块一致 100G 满速
iperf3 TCP 1 stream 31 Gbits/s 单核瓶颈
iperf3 TCP 4 streams 84 Gbits/s 4 流 = 100G
ping 0.7ms (avg) -–

结论: 1 根线 200G 物理上跑满,100 Gbps 双向满速已达成。


2. nvidia-peermem 加载失败 (问题)

现象

$ sudo modprobe nvidia-peermem
modprobe: ERROR: could not insert 'nvidia_peermem': Invalid argument

或用 insmod:

insmod: ERROR: could not insert module ... Invalid parameters

关键诊断日志

  • dmesg: nvidia_peermem: unknown parameter 'verbose' ignored (无实质错误,只参数被忽略)

  • strace 跟踪: finit_module(3, "", 0) = -1 EINVAL (无效的参数)

  • .ko 文件: /lib/modules/6.17.0-1021-nvidia/updates/dkms/nvidia-peermem.ko.zst (7.6K,实际未压缩的源在 /usr/src/nvidia-srv-580.159.03/nvidia-peermem.ko 386K)

  • 模块签名: GB10-Custom-Sign,vermagic 6.17.0-1021-nvidia

  • peerdirect_support=0/1 各种参数组合都失败

根因 (已通过阅读源码确认)

/usr/src/nvidia-srv-580.159.03/nvidia-peermem/nvidia-peermem.c:

static int __init nv_mem_client_init(void)
{
#if defined (NV_MLNX_IB_PEER_MEM_SYMBOLS_PRESENT)
    // 正常注册 GPUDirect RDMA peer memory client
    ...
#else
    return -EINVAL;   // ← 我们中招
#endif
}

NV_MLNX_IB_PEER_MEM_SYMBOLS_PRESENT 没被定义。编译 .ko 时 nvidia conftest 探测内核是否暴露 ib_register_peer_memory_client symbol。我们用的 inbox 6.17 内核不导出这个 symbol(只 MLNX OFED 才导)。

验证:

$ sudo cat /proc/kallsyms | grep ib_register_peer_memory_client
(空)

当前 OFED 状态

状态
nvidia-mlnx-tools (23.04) ✓ 已装 (空壳)
nvidia-system-mlnx-drivers (2404.26.01) 未装
doca-ofed-25.10-6.17.0-1021-nvidia ✗ 未装

apt 装:

sudo apt install nvidia-system-mlnx-drivers
# 会拉: doca-ofed, doca-repo, mlnx-pxe-setup, nvidia-mlnx-config,
#       nvidia-ib-umad-loader, mlnx-nvme-dkms, mlnx-nfsrdma-dkms, mlnx-fw-updater

nvidia-system-mlnx-drivers 依赖 doca-ofed,但 doca-ofed 跟 GB10 兼容性尚未完全验证,我没敢自己装(驱动栈冲突风险大,debootstrap 失败回不去)。


3. 性能影响分析

我们已经测到 100G 满速

  • 1 根线物理极限就是 200G 双向,实测 100G 单向 = 200G 双向满速

  • 多 QP 同样 13.3 GB/s,瓶颈在物理线,不在软件

  • LPDDR5X 200-300 GB/s 内存带宽也不卡

装 OFED 实际收益有限

用例 是否依赖 nvidia-peermem
vLLM 跨机 tensor parallel (NCCL) ✗ 走 ib_verbs,不受影响
NCCL all-reduce 跨机 ✗ 走 ib_verbs
OpenMPI 早期版本 RDMA ✓ 需要
GDRCopy / 自定义 ibverbs ✓ 需要

对当前用 M2.7 + vLLM 没影响,但视频生成 / 大模型分布式训练可能受困。


4. 给 NVIDIA 论坛的建议

希望 NVIDIA 解决的事

  1. nvidia-peermem 在 DGX OS 7.2.3 默认应该能用,或者明确默认集成 doca-ofed-25.10-6.17.0-1021-nvidia(apt 仓库里有这个 .ko,但 meta-package nvidia-system-mlnx-drivers 不在 base 镜像)

  2. README 明确写清楚:

    • “GPUDirect RDMA 1.0 需要 doca-ofed”

    • “DGX OS 7.2.3 base 不带 doca-ofed,需要 apt 装”

  3. nvidia-system-mlnx-drivers 装好 doca-ofed 后,给出完整操作步骤(nvidia-ctk 重新生成 CDI?重装 vLLM 容器?reboot?)

  4. 验证 6.17.0-1021-nvidia + doca-ofed-25.10 + nvidia 580 驱动栈互操作性(我担心)

  5. dmesg 错误打印改进:nvidia-peermem 加载失败时,dmesg 应该有具体原因,而不是只显示"unknown parameter verbose ignored"

我现在的工作流

  • 2 根 QSFP56 DAC 只接 1 根(1 根 200G 够用,NCCL 满载)

  • nvidia-peermem 暂时不修(等官方集成)

  • 未来 200B+ 模型双机张量并行时再装 doca-ofed

给社区的复现命令

# 在 DGX Spark GB10 + DGX OS 7.2.3 + 580.159.03
sudo modprobe nvidia-peermem
# modprobe: ERROR: could not insert 'nvidia_peermem': Invalid argument

sudo cat /proc/kallsyms | grep ib_register_peer_memory_client
# (空)  ← 关键证据

# 看 nvidia-peermem 源码:
cat /usr/src/nvidia-srv-580.159.03/nvidia-peermem/nvidia-peermem.c
# 看 #if defined (NV_MLNX_IB_PEER_MEM_SYMBOLS_PRESENT) 分支


5. 附件

系统信息

  • 主机名: gx10-james01 (01 机), spark-798a (02 机)

  • 内核: 6.17.0-1021-nvidia (arm64, SMP, PREEMPT_DYNAMIC)

  • 驱动: NVRM version: NVIDIA UNIX aarch64 Kernel Module 580.159.03 Fri Apr 24 06:47:43 UTC 2026

  • BIOS: GX10DGX.0104.2026.0326.1657 (ASUS GX10), DGX Spark 品牌也是这个 BIOS

  • 互连网口: enp1s0f1np1 (PCI 0000:01:00.1, Mellanox MT2910 ConnectX-7)

  • 互连 IP: 192.168.100.1/24192.168.100.2/24

已装的相关包

  • nvidia-driver-580-server 580.159.03

  • nvidia-mlnx-tools 23.04 (空壳)

  • infiniband-diags 50.0-2ubuntu0.2

  • perftest 24.01.0+0.38-1build2

  • rdma-core 50.0-2ubuntu0.2

  • linux-image-6.17.0-1021-nvidia 6.17.0-1021.21

没装 (但 apt 里有)

  • nvidia-system-mlnx-drivers 2404.26.01-1 (Conflicts: 自己)

  • doca-ofed-25.10-6.17.0-1021-nvidia (6.17.0-1021 子包)

完整 .ko 文件位置

  • 编译后: /usr/src/nvidia-srv-580.159.03/nvidia-peermem.ko (386K,version 580.159.03)

  • dkms 安装: /lib/modules/6.17.0-1021-nvidia/updates/dkms/nvidia-peermem.ko.zst (2K,压缩了 .ko,内嵌 PE 文件)

  • 备用裸 .ko: /lib/modules/6.17.0-1021-nvidia/kernel/drivers/misc/nvidia-peermem.ko (完整 .ko)