作者: 清泓
日期: 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 直连两机
enp1s0f1np1↔enp1s0f1np1 -
IP:
-
01 机:
192.168.100.1/24 -
02 机:
192.168.100.2/24(hostnamespark-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.ko386K) -
模块签名:
GB10-Custom-Sign,vermagic6.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 解决的事
-
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 镜像) -
README 明确写清楚:
-
“GPUDirect RDMA 1.0 需要 doca-ofed”
-
“DGX OS 7.2.3 base 不带 doca-ofed,需要 apt 装”
-
-
nvidia-system-mlnx-drivers 装好 doca-ofed 后,给出完整操作步骤(nvidia-ctk 重新生成 CDI?重装 vLLM 容器?reboot?)
-
验证 6.17.0-1021-nvidia + doca-ofed-25.10 + nvidia 580 驱动栈互操作性(我担心)
-
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/24↔192.168.100.2/24
已装的相关包
-
nvidia-driver-580-server580.159.03 -
nvidia-mlnx-tools23.04 (空壳) -
infiniband-diags50.0-2ubuntu0.2 -
perftest24.01.0+0.38-1build2 -
rdma-core50.0-2ubuntu0.2 -
linux-image-6.17.0-1021-nvidia6.17.0-1021.21
没装 (但 apt 里有)
-
nvidia-system-mlnx-drivers2404.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)