MTU(最大传输单元)设多少合适?这个问题没有万能答案。默认1500适合绝大多数场景,但在大文件传输、存储网络、备份链路等场景下,把MTU调到9000(Jumbo Frame)确实能带来可观的吞吐提升和CPU开销降低。关键是:链路两端和中间每一跳设备都得支持,否则适得其反。
MTU(Maximum Transmission Unit)定义的是网络层一次能传输的最大数据包大小,单位是字节。以太网标准规定默认MTU为1500字节——这个数字从上世纪80年代沿用至今。
一个完整的以太网帧除了MTU承载的数据载荷,还包括14字节的帧头、4字节的FCS校验,以及可选的802.1Q VLAN标签(4字节)。所以MTU不等于帧长,MTU只管"有效数据"那一段。
传输同样大小的数据,MTU 1500需要拆成6个帧,MTU 9000只要1个帧。每个帧都要经过中断处理、协议栈解析、校验计算,帧数少了,CPU的中断开销自然下降。
MTU 9000的Jumbo Frame,实际以太网帧长会达到9022字节(含帧头和FCS)。交换机和网卡的"最大帧长"参数需要大于等于这个值才能正常转发。
理论上的收益很明确:减少帧数、降低CPU中断、提高有效带宽利用率。实际效果取决于工作负载类型。
适合Jumbo Frame的场景:大文件顺序读写(如NFS/iSCSI存储传输、数据库备份、虚拟机迁移)。这类场景数据块大且连续,Jumbo Frame的单帧载荷优势能充分发挥。在25G网络环境下,MTU从1500切换到9000,大文件吞吐通常能提升15%-30%,CPU利用率下降20%以上。
不适合的场景:小包密集型应用(如Web服务的高并发短连接、实时交易系统的微小数据包)。这类场景每个包远小于1500字节,MTU设多大都没意义,反而可能因为等待凑帧引入额外延迟。
Jumbo Frame必须端到端全链路支持:发送端网卡、每一跳交换机、接收端网卡,任何一环不支持9000 MTU,数据包就会被丢弃或被迫分片,性能反而暴跌。配置前务必逐跳确认。
选网卡时,Jumbo Frame支持是基础功能,但不同速率等级的网卡在实际表现上差异明显。以下三款LR-LINK网卡均支持巨帧,覆盖1G到25G速率段:
| 参数 | LRES1027PF-4SFP28 | LREC9804BT | LREC9714HT |
|---|---|---|---|
| 速率 | 1/10/25Gbps | 100M/1G/10Gbps | 10/100/1000Mbps |
| 接口类型 | 4x SFP28 | 4x RJ45 | 4x RJ45 |
| PCIe | v4.0 x8 | v3.0 x8 | v2.1 x4 |
| 功耗 | 12.9W(最大) | 23.5W(10GbE 最大) (10GbE) | 5.04W(最大) |
| RDMA | iWARP/RoCE v2 | 不支持 | 不支持 |
| Jumbo Frame | 支持 | 支持 | 支持 |
| DPDK | 支持 | 支持 | 支持 |
| 典型场景 | 数据中心/存储网络 | 企业万兆升级 | 管理网/监控网 |
对于数据中心存储网络或虚拟化集群,LRES1027PF-4SFP28 是Jumbo Frame收益最大的选择——25G线速配合PCIe 4.0 x8总线带宽,能把MTU 9000的吞吐优势完全释放。PCIe 3.0的10G电口方案在带宽瓶颈上更明显,而千兆网卡受限于1G物理速率,Jumbo Frame的收益主要体现在降低CPU中断频率,而非带宽提升。
Linux配置MTU最直接的方式是通过ip命令,以LREC9804BT为例,假设网卡接口名为enp3s0f0:
# 查看当前MTU
ip link show enp3s0f0
# 临时设置为9000
sudo ip link set dev enp3s0f0 mtu 9000
# 验证是否生效
ip link show enp3s0f0 | grep mtu
# 输出应包含 mtu 9000
# 用ping测试实际帧大小(-s指定数据载荷,加上28字节头 = 实际帧大小)
ping -c 5 -s 8972 -M do 目标IP
临时设置在重启后失效。持久化配置取决于发行版:
Ubuntu/Debian(netplan):
network:
ethernets:
enp3s0f0:
mtu: 9000
CentOS/RHEL(NetworkManager):
nmcli connection modify "有线连接 1" 802-3-ethernet.mtu 9000
nmcli connection up "有线连接 1"
永久生效验证:配置后重启网络服务,再用ip link确认MTU值。
Windows通过设备管理器或PowerShell配置,以LRES1027PF-4SFP28为例:
图形界面方式:
1. 打开"设备管理器" → 展开"网络适配器"
2. 右键目标网卡 → 属性 → "高级"选项卡
3. 找到"Jumbo Packet"或"巨帧数据包"
4. 下拉选择"9014 Bytes"(部分驱动显示"9000 Bytes")
5. 点击确定,网卡会短暂断连后恢复
PowerShell方式:
# 查看当前MTU
Get-NetAdapterAdvancedProperty -Name "以太网 2" -DisplayName "Jumbo Packet"
# 设置为9014
Set-NetAdapterAdvancedProperty -Name "以太网 2" -DisplayName "Jumbo Packet" -DisplayValue "9014 Bytes"
部分Windows网卡驱动(包括Intel驱动)的Jumbo Packet选项值为9014而非9000。这是因为9014包含了以太网帧头和FCS的14字节。交换机侧配MTU 9000即可兼容,两者不冲突。
配完MTU 9000不代表万事大吉。验证方法分三层:
网络层验证——用ping发送不分片的大包:
# Linux:-s 8972 + 28字节头 = 9000字节,-M do禁止分片
ping -c 5 -s 8972 -M do 192.168.1.100
# 如果返回 "message too long" 说明链路中间有不支持Jumbo Frame的设备
# 正常返回5个reply说明端到端MTU 9000通畅
传输层验证——用iperf测实际吞吐:
# 接收端
iperf -s -w 1M
# 发送端
iperf -c 192.168.1.100 -w 1M -l 8192 -t 30
# -l 8192 指定TCP段大小,配合Jumbo Frame发挥最大效率
对比测试:先MTU 1500跑一轮,再MTU 9000跑一轮,记录带宽和CPU占用率差异。正常情况下25G环境(如使用LRES1027PF-4SFP28)吞吐提升应在15%以上。
MTU 1500是安全默认值,适合绝大多数通用网络场景。Jumbo Frame(MTU 9000)在大文件传输、存储网络、虚拟机迁移等场景能显著提升吞吐并降低CPU开销,但前提是端到端全链路支持。选网卡时确认Jumbo Frame支持是基本操作,25G和10G高速网卡上收益最明显。
误区一:MTU越大越好。 不是。MTU过大在小包场景下反而增加延迟(因为需要等数据凑满一个帧),而且一旦链路中有不支持的设备,整条链路的MTU都被迫回退到1500甚至更低。
误区二:只要网卡支持就能开。 网卡只是起点。交换机每个端口、VLAN配置、甚至路由器都要支持Jumbo Frame。最常见的翻车是:服务器端配了9000,交换机端口还是默认1500,结果大包全部被丢。
误区三:千兆网卡开Jumbo Frame没意义。 不完全对。虽然千兆带宽有限,Jumbo Frame对吞吐提升不大,但在大量小包场景下(如NFS挂载的文件服务器),减少帧数可以降低CPU中断开销,对系统整体响应有帮助。像LREC9714HT这种5.04W(最大)低功耗千兆四口卡,在管理网络或监控网络中开Jumbo Frame,CPU节省效果反而比吞吐提升更值得关注。
大概率是链路中有设备不支持Jumbo Frame导致大包被丢弃。先用 ping -s 8972 -M do 目标IP 逐跳排查,找到不支持的设备后要么给它也配上9000 MTU,要么把发送端改回1500。不要只改一端。
对于大文件顺序传输,Jumbo Frame通常降低延迟(更少的帧处理开销)。但对于小包实时应用(如在线游戏的UDP包),MTU 9000没有意义且可能增加排队延迟。通用办公网保持1500即可。
不同品牌命令不同。华为/华三交换机在接口视图下用 jumboframe enable 命令;锐捷用 system jumbo-frame 全局配置;Cisco用 system mtu jumbo 9000。配置后记得保存,交换机重启后可能恢复默认。
如果你的千兆链路主要传大文件(比如NAS备份、视频素材传输),开Jumbo Frame有好处,CPU中断次数减少约80%,虽然带宽不会突破1Gbps上限,但系统整体负载更低。如果是办公上网和网页浏览,保持默认1500即可。
两者独立但互补。RDMA绕过内核协议栈直接传输数据,Jumbo Frame减少帧处理次数。在支持RDMA的网卡(如支持iWARP/RoCE v2的25G方案)上同时开启两者,存储网络和HPC场景能获得叠加的性能收益。