# RDMA MTU 实验:把 MTU 从 1500 调到 9000,到底能提升多少带宽? 关键字RDMA MTU、巨型帧、Jumbo Frame、9000 MTU、perftest msg_size MTU 关系一、问题动机实验测试全程用默认 MTU1500标准以太网发现QP1, msg4KB 跑出 77.68 Gb/sQP1, msg4KB, bidir 跑出128.44 Gb/sMTU1500 在小包场景下会有分片开销。4KB / 1500B 3 个 IP 分片64KB / 1500B 44 个分片每个分片都要单独的包头Ethernet IP UDP RoCE v2 至少 78 字节如果把 MTU 改成 9000巨型帧 / Jumbo Frame呢二、MTU 是什么2.1 一句话定义MTUMaximum Transmission Unit是单个网络包能承载的最大数据量不含包头。2.2 类比快递包裹的尺寸限制MTU1500 小包裹每次只能装 1.5kg分批发MTU9000 大包裹一次能装 9kg少发货次包头 vs 包体每个网络包 78 字节包头Ethernet 14 IP 20 UDP 8 RoCE v2 36MTU 字节数据MTU 越大 →包头占比越小→传输效率越高2.3 不同 MTU 下 4KB 数据需要的包数MTU4KB 数据需要包头总开销实际包数15003 个包3 × 78 234 字节数据 234B40961 个包1 × 78 78 字节数据 78B90001 个包1 × 78 78 字节数据 78B注意MTU4096 跟 MTU9000 对 4KB 数据看起来一样都是单包但 MTU9000 给 CPU 更少的中断次数用于更大包。三、实验方法配置2 × cx8200GbE RoCE v2ib_write_bw perf statQP1, 4验证甜点msg_size: 4KB, 64KB, 1MB3 个量级MTU:1500 vs 9000对比test_duration: 15 秒配置方法# 改 MTU需重启网络或下拉接口iplinkseteth1 mtu9000iplinkseteth2 mtu9000# 测完后还原iplinkseteth1 mtu1500iplinkseteth2 mtu1500四、测试结果4.1 完整数据12 个配置点MTUQPmsg_sizeBW (Gb/s)IPCL1_dc_missctx_switch150014KB60.762.31936.8M1491500164KB47.942.4029.4M141150011MB50.942.5131.9M105150044KB50.202.71540.1M1621500464KB50.312.9618.6M162150041MB50.893.0262.7M388900014KB74.91⭐2.18745.8M1189000164KB51.552.4568.1M160900011MB51.772.5262.0M270900044KB52.062.69941.8M1609000464KB51.462.9708.5M259900041MB50.093.0202.6M1614.2 MTU9000 vs MTU1500 对比配置MTU1500MTU9000提升QP1, msg4KB60.7674.9123.3%⭐QP1, msg64KB47.9451.557.5%QP1, msg1MB50.9451.771.6%QP4, msg4KB50.2052.063.7%QP4, msg64KB50.3151.462.3%QP4, msg1MB50.8950.09-1.6%4.3 ASCII 图BW vs msg_sizeQP1MTU 对比BW (Gb/s) 80 ┤ ● ← MTU 9000, msg4KB 74.91 75 ┤ 70 ┤ 65 ┤ 60 ┤ ● ← MTU 1500, msg4KB 60.76 55 ┤ 50 ┤ ● ● ← 平台期 45 ┤ ●(1500) ← MTU 1500 64KB 47.94异常 └──┬──┬──┬─► msg_size 4K 64K 1M五、根因分析5.1 为什么 MTU9000 在 4KB 时提升 23%MTU1500 4KB 数据4KB / 1464B (1500 - 36 包头) 3 个 IP 分片每次 DMA 处理 1464B 包头 →3 次 PCIe 事务CPU 3 次中断处理 →3 次 L1 cache 访问MTU9000 4KB 数据4KB / 8964B 1 个包单次 DMA → 单次 PCIe → 单次中断 →单次 cache 访问包头开销从 234B 降到 78B省 67%理论提升(4096 234) / (4096 78) 4330 / 4174 1.037 倍包头节省但实际看到 1.23 倍提升 →分片整合带来的 CPU 调度节省比单纯包头开销大5.2 为什么 MTU1500 msg64KB 跌到 47.9464KB / 1500B 44 个 IP 分片每个分片都是独立的 PCIe DMA 中断处理64KB 数据实际传输 64KB 44×78B 67.4KB 物理流量44 次中断 → CPU 调度开销巨大MTU9000 msg64KB64KB / 8964B 8 个包8 次中断 vs 44 次中断 →CPU 调度开销减少 82%BW 从 47.94 升到 51.557.5%5.3 为什么大包1MBMTU 影响小1MB / 1500B ≈ 699 个包1MB / 9000B ≈ 117 个包但 699 vs 117 都不算多已经够流水线所以包数减少带来的收益摊薄到总耗时上很小。而且1MB 大包的瓶颈是 DMA / PCIe / 内存带宽不在 CPU 包数处理。六、MTU bidir 综合实验追加测试猜想MTU 9000 bidir 4KB 是不是能突破 128 Gb/s结果MTUQP模式单方向 BW总 BW链路利用率15001单向 4KB77.68*77.6838.8%15001bidir 4KB64.22128.4464.2%⭐90001单向 4KB74.9174.9137.5%90001bidir 4KB53.64107.2853.6%90004单向 4KB52.0652.0626.0%90004bidir 4KB50.64101.2850.6%⭐* 上次实验值本次测试波动到 60.76见 4.1反直觉发现MTU 9000 bidir 不如 MTU 1500 bidir组合总 BWMTU 1500 bidir QP1128.44⭐MTU 9000 bidir QP1107.28MTU 9000 bidir QP4101.28为什么MTU 1500 bidir 优势每包小 → 包数多 →CPU 流水线越深4 个核并发处理多个 SQ 槽 → 隐藏 CPU 延迟MTU 9000 bidir 劣势每包大 → 包数少 →CPU 等待 DMA 完成时间变长i3 单核在这段时间闲着未能充分发挥流水线推论在 i3 单核 CPU 上MTU 1500 bidir 反而是最优组合。七、综合判断7.1 MTU 怎么选场景推荐 MTU理由单核 CPU 小包 单向MTU9000省包头 省中断23%单核 CPU 小包 bidirMTU1500⭐包数多利于流水线128 vs 107多核 CPU 大包MTU9000省分片开销多核 CPU NCCL AllReduce两者都行NCCL 内部已优化跨广域网MTU1500互联网普遍不支持巨型帧八、复现命令# 设 MTU 9000sshrootcx8ip link set eth1 mtu 9000 ip link set eth2 mtu 9000# 跑测试sshrootcx8ib_write_bw -d mlx5_0 -x 2 -s 4096 -D 15 -q 1 -t 128 -b \ --report_gbits --cpu_util sleep2sshrootcx8ib_write_bw -d mlx5_1 -x 2 -s 4096 -D 15 -q 1 -t 128 -b \ --report_gbits --cpu_util 192.168.99.1# 还原 MTUsshrootcx8ip link set eth1 mtu 1500 ip link set eth2 mtu 1500九、一句话总结MTU 9000 对小包单方向帮助显著23%但单核 CPU 下小包 bidir 反而不如 MTU 1500128 vs 107。MTU 不是越大越好要看 CPU 核心数和流量模式。