声明
本文由 🤖AI 协作完成, 内容已过实际测试.
1. 背景
DGX Spark 高速网卡”消失”之谜:一次 PCIe 热插拔的排查实录
我有两台 NVIDIA DGX Spark(GB10 GPU,128GB 统一内存),计划用高速线缆直连组成双机集群,部署一个单机显存放不下的大模型。
两台机器基本配置相同:
- spark-2336:已 OTA 升级到 DGX 7.5.0
- spark-264d:出厂版本 DGX 7.2.3
在准备组网时,我发现了一个奇怪的现象。
2. 发现问题
在 spark-264d 上执行 ip -br link show,能看到 4 个高速网卡接口:
1 | enp1s0f0np0 DOWN 4c:bb:47:2b:26:4e |
但在 spark-2336 上,这些接口完全不存在,只有板载有线网卡和 WiFi:
1 | enP7s7 DOWN 4c:bb:47:30:23:36 |
同样的硬件平台,为什么一台有高速网卡,另一台没有?
3. 定位问题
第一层:PCIe 设备是否存在?
首先用 lspci 确认硬件层面的差异:
1 | # spark-264d — 有 4 个 ConnectX-7 端口 |
ConnectX-7 在 spark-2336 的 PCIe 总线上完全不可见。这看起来像是硬件问题——但真的是吗?
第二层:PCIe Bridge 下游设备去哪了?
进一步检查 PCIe bridge 的 sysfs 目录:
1 | # spark-264d — bridge 下游有设备 |
PCIe bridge 存在,但下游设备消失了。这不像是硬件未安装的表现——如果网卡物理不存在,连 bridge 都不应该分配资源。
第三层:内核启动日志揭示真相
关键一步——查看 journalctl -b -k 内核启动日志:
1 | $ journalctl -b -k | grep -i 'mlx\|pci.*01:00\|cx7' |
日志揭示了完整的故事:
1 | 11:33:11 pci 0000:01:00.0: [15b3:1021] type 00 class 0x020000 PCIe Endpoint ← 启动时检测到了! |
真相大白:ConnectX-7 网卡在启动时被正常识别、驱动加载成功、网络接口也创建了。但 15 秒后,cx7-pcie-hotplug 驱动检测到端口没有插入线缆,主动将整个 PCIe 设备热移除了。
4. 确认问题
为什么 spark-264d 没有这个行为?对比两台机器的热插拔状态:
1 | # spark-2336(7.5.0) |
进一步确认两台机器的 mtk_pcie_hotplug 内核模块完全相同(srcversion 一致),内核版本也相同(6.17.0-1014-nvidia)。差异在于:OTA 7.5.0 升级后,系统固件/ACPI 层面启用了热插拔功能。
完整的因果链:
1 | OTA 升级到 7.5.0 |
5. 解决思路
理解了原因后,解决方案就很清晰:
这不是 bug,是 feature。 DGX Spark 的 ConnectX-7 通过外部线缆连接,热插拔功能的设计目的是:
- 未插线时自动移除设备(节省功耗和系统资源)
- 插线后自动恢复设备(即插即用)
因此:
- 不需要修复 spark-2336,只需插上高速线缆,网卡会自动恢复
- 升级 spark-264d 到 7.5.0,保持两台机器版本一致
- 用高速线缆直连两台设备,即可组网
升级 spark-264d
1 | sudo apt update |
升级后验证:hotplug_enabled = 1,且同样因未插线而看不到高速网卡——行为与 spark-2336 一致。
6. 结论
| 项目 | 说明 |
|---|---|
| 表面现象 | 高速网卡在 lspci 和 ip link 中完全不可见 |
| 误导方向 | 硬件故障、驱动缺失、PCIe 插槽问题 |
| 根本原因 | OTA 升级启用了 PCIe 热插拔,未插线时自动移除设备 |
| 解决方案 | 插上线缆即可,无需任何修复操作 |
7. 所得所感
不要被表象欺骗
lspci 看不到设备,第一反应是硬件问题。但 Linux 的 PCIe 热插拔机制可以在运行时动态添加/移除设备。设备不可见 ≠ 设备不存在。
内核日志是最可靠的证据
dmesg 可能被清空,但 journalctl -b -k 保留了完整的启动日志。通过它我们看到了设备从”被检测到”到”被移除”的完整生命周期,这是破案的关键。
对比法是排查利器
两台相同硬件不同表现,最高效的排查方式就是逐层对比:
- PCIe 设备列表 → 确认差异范围
- sysfs 拓扑 → 确认是动态移除而非物理缺失
- 内核日志 → 找到移除的触发点
- 驱动参数 → 定位配置差异
OTA 升级可能改变系统行为
同一个内核模块,升级前后行为不同。差异不在驱动代码本身,而在固件/ACPI 层面的配置。升级后要关注的不仅是”新增了什么”,还有”原有行为是否改变”。
8. 技术沉淀:热插拔日志速查
当怀疑网卡被热插拔机制关闭时,用以下命令快速确认:
1 | # 查看 hotplug 驱动事件(最直接) |
事件时间线模式:
1 | Hotplug enabled → mlx5_core Link down → E-Switch cleanup → Cable removal → RxErr |
看到这个序列,就是热插拔在工作。插上线缆后应看到反向序列(Cable insertion → 设备枚举 → 驱动加载 → Link up)。
排查环境:NVIDIA DGX Spark / Ubuntu 24.04 / Kernel 6.17.0-1014-nvidia / NVIDIA Driver 580.142 / ConnectX-7 (MT2910)
排查时间:2026-05-12