MultimodalFlow
← 返回博客

双 Jetson AGX Thor 四路 10GbE 直连实测:为什么总带宽只有 12 Gbps?

Jetson Thor10GbEiperf3分布式推理LLM边缘 AI网络测试PD 分离

两台 Jetson AGX Thor 都提供了多路高速以太网接口。只看接口数量,很容易得出一个诱人的估算:4 路 10GbE 直连,理论总带宽应该接近 40 Gbps。

但在真实测试中,我们得到的结果是:每一条链路单独跑都能接近 10 Gbps,多条链路同时跑时,总吞吐却在约 12 Gbps 封顶。

这篇文章记录测试方法、原始结果,以及这个带宽上限对双机大模型推理到底意味着什么。

快速结论

问题实测结论
单条 10GbE 链路正常吗?正常,四条链路分别达到 8.98–9.75 Gbps
单链路多流能否突破 10 Gbps?不能,iperf3 -P 4 合计约 9.85 Gbps
两条链路能否叠加?能,但合计只到 12.18 Gbps
四条链路能否接近 40 Gbps?不能,合计约 11.88 Gbps
是 CPU 跑满导致的吗?测试期间 CPU 仍有约 76% 空闲,不像是 CPU 上限
12 Gbps 对层切分够用吗?对只传小型隐藏状态的方案通常足够
对 KV Cache 传输够用吗?取决于模型和上下文;本文案例中网络不是主要矛盾

测试拓扑

测试使用两台 Jetson AGX Thor,四组 MGBE 接口逐一网线直连。为避免公开实验室内部主机和完整地址,下面只保留接口与子网结构:

节点 A 接口节点 B 地址用途
mgbe0_0192.168.100.2链路 0
mgbe1_0192.168.101.2链路 1
mgbe2_0192.168.102.2链路 2
mgbe3_0192.168.103.2链路 3

测试工具为 iperf3,每轮持续约 8–12 秒。先逐条测试,再启动多个服务端口并行压测,观察多链路合计吞吐。

第一轮:逐条测试四个 10GbE 接口

单链路结果如下:

接口吞吐
mgbe0_09.75 Gbps
mgbe1_08.98 Gbps
mgbe2_09.49 Gbps
mgbe3_09.69 Gbps

这个结果说明,四组接口和直连网络本身都能工作。考虑以太网、TCP/IP 协议开销,单链路接近 9–10 Gbps 属于合理表现。

最低的一条为 8.98 Gbps,但它并没有低到足以解释后面的多链路总吞吐上限。

第二轮:单链路增加并发流

随后在一条链路上使用:

iperf3 -c 192.168.100.2 -P 4

四条 TCP 流的合计吞吐约为 9.85 Gbps。

这说明单连接调度不是主要问题。增加 TCP 并发流可以更充分地利用一条 10GbE 链路,但不会让单个物理接口越过其线速上限。

第三轮:两条和四条链路并发

真正值得关注的是多接口同时传输的结果:

配置各链路吞吐合计吞吐
2 条并发:mgbe0_0 + mgbe2_06.25 / 5.93 Gbps12.18 Gbps
4 条并发3.39 / 1.67 / 3.40 / 3.42 Gbps11.88 Gbps

从一条增加到两条,合计吞吐确实从约 9.8 Gbps 提升到约 12.2 Gbps;继续增加到四条,不仅没有继续增长,反而略微下降。

所以这套配置的实际结论不是“4 × 10 Gbps = 40 Gbps”,而是:

四个接口各自都可以接近 10 Gbps,但同时使用时共享了某个约 12 Gbps 的系统级瓶颈。

瓶颈可能在哪里?

测试过程中 CPU 约有 76% 空闲,因此当前证据不支持“CPU 已跑满”这个解释。四个接口单独测试也都正常,因此单个网口或单根网线同样不像根因。

更合理的推断是:多个 MGBE 接口在 SoC 内部共享了 DMA、内存或 I/O 数据通路,多链路并发时触碰了共同上限。但必须强调,这仍是根据吞吐形态做出的工程推断,不是通过 NVIDIA 内部互联计数器完成的硬件级归因。

如果要进一步定位,可以补充以下测试:

  • 同时记录 EMC、MGBE、CPU 和 SoC 频率,排除功耗模式或时钟限制;
  • 分别测试单向与双向流量,观察收发路径是否共享上限;
  • 改变 MTU、TCP 窗口和 CPU 亲和性,确认协议栈与中断分配的影响;
  • 使用设备侧性能计数器或 NVIDIA 分析工具检查内存与 I/O 压力;
  • 在不同 JetPack、内核和功耗模式下复测。

在完成这些验证之前,我们可以确定“多链路没有线性叠加”,但不应把具体内部部件写成已经证实的故障点。

对双机 LLM 推理有什么影响?

12 Gbps 换算后约为 1.5 GB/s 的理论字节吞吐。它远低于四路 10GbE 的表面总和,但是否构成问题,取决于双机之间到底传什么。

1. 层切分:通常不是网络瓶颈

如果两台设备按模型层进行切分,跨机传递的是某一层的隐藏状态,而不是每生成一个 token 都搬运整套权重。

在我们已验证的一条 8-bit 隐状态路径中,跨机数据量约为 7 KB/token。即使考虑协议开销,12 Gbps 对这种数据规模也非常宽裕。此时更值得关注的是:

  • 每个 token 的同步延迟;
  • 两端算力是否均衡;
  • 通信与计算能否重叠;
  • 推理框架是否为这种切分方式做过优化。

换句话说,层切分场景不应该只看峰值带宽。

2. Prefill/Decode 分离:先算 KV Cache 体积

Prefill/Decode 分离会把预填充阶段产生的 KV Cache 发送到解码节点。这里网络需求更大,但仍然应该先计算真实传输量,而不是看到“分布式推理”就默认必须使用 100GbE。

以我们测试过的一个压缩 KV 模型为例,32K 上下文对应的 KV Cache 约为 0.78 GiB。若有效传输速度按 1.5 GB/s 粗略估算,纯数据搬运约需:

0.78 GiB ÷ 1.5 GB/s ≈ 0.5–0.6 秒

而该上下文的 prefill 约需 80 秒。即使不做流水化,网络传输所占比例也不到 1%。这个案例里,PD 分离不一定值得做,但原因不是 12 Gbps 太慢,而是它未必能改善真正限制吞吐的解码阶段。

这个结论不能直接套到所有模型。标准多头注意力、大 batch、更长上下文或未压缩 KV Cache 都可能显著增加传输量。部署前至少要测三个数字:KV Cache 字节数、真实有效带宽、prefill 与 decode 各自耗时。

多网卡框架配置能绕过上限吗?

如果瓶颈发生在路由或单接口选择上,UCX multi-rail、NCCL 多网卡或 NIXL 多 NIC 配置可能带来提升。

但本次测试中,多个独立 iperf3 进程已经分别绑定不同物理接口和子网,合计吞吐仍停在约 12 Gbps。因此,仅在应用层启用更多 rail,大概率无法自动突破同一个底层共享通路。

这些框架仍然有价值:它们可以改善接口选择、并发调度、容错和通信重叠。只是不能把“识别到四张网卡”等同于“必然得到四倍吞吐”。

部署建议

如果你也在两台 Jetson AGX Thor 之间做分布式推理,建议按下面的顺序验证:

  1. 逐接口测单链路,确认每条链路、网线和地址配置正常;
  2. 在单链路上用 -P 4 测多流,排除单 TCP 流限制;
  3. 使用独立子网和端口做多接口并发测试;
  4. 记录 CPU 空闲率、功耗模式、温度和时钟;
  5. 用模型真实张量大小计算通信需求;
  6. 最后再决定是否引入 UCX、NCCL、NIXL 或更复杂的调度层。

不要用网口数量代替实测,也不要只根据 iperf3 峰值判断分布式推理一定可行或不可行。网络带宽、同步延迟、张量体积和两端计算时间必须放在同一张账上计算。

总结

本次双 Thor 直连测试得到三个清晰结果:

  • 四条 10GbE 链路单独使用时均接近线速;
  • 两条或四条并发时,总吞吐约在 12 Gbps 封顶;
  • 对小型隐藏状态传输以及本文的压缩 KV Cache 案例,这一带宽仍然够用。

真正重要的不是“40 Gbps 为什么没跑出来”这一项数字,而是系统设计方式:如果跨机传输量本来就小,继续堆网卡没有意义;如果通信量巨大,也应先证明瓶颈确实在网络,再投入更昂贵的互联方案。