ethtool不能直接设置mtu,因mtu属ip层参数;它仅通过ethtool -g、-i等命令验证网卡是否支持巨型帧、驱动兼容性及链路能力,并配合ip link set实现mtu配置与丢包排查。

ethtool 本身不能直接设置 MTU
MTU 是网络协议栈第三层(IP 层)的参数,属于内核网络接口配置范畴,不是 ethtool 管理的硬件/驱动级参数。ethtool 负责的是物理层和数据链路层底层能力(如速率、双工、环形缓冲区、offload 特性等),而 MTU 的调整必须通过 ip 或 ifconfig 这类网络配置命令完成。
不过——ethtool 在 MTU 优化中起关键支撑作用:它帮你确认网卡是否支持巨型帧(Jumbo Frame)、验证底层链路能否承载更大帧,以及排查因 MTU 不匹配导致的丢包问题。
确认网卡是否支持巨型帧
执行以下命令查看网卡当前最大可接受帧长(即硬件支持的 MTU 上限):
ethtool -g eth0
重点关注 rx/tx maximum 值(单位字节)。若显示为 16384 或更高,说明该网卡硬件支持巨型帧。
再查驱动和设备能力:
ethtool -i eth0
确认 driver(如 ixgbe、i40e、mlx5_core)是否为现代高性能驱动——老旧驱动(如 e1000)可能不支持 >9000 的 MTU 或存在校验缺陷。
检查链路两端 MTU 是否一致
巨型帧要求**端到端全路径所有设备(网卡、交换机、路由器)MTU 设置一致**。任意一跳 MTU 小于发送方,就会导致 IP 分片或静默丢包(尤其 TCP 大包)。
在本机临时设 MTU 后,务必同步检查:
- 直连交换机端口的 MTU 配置(例如华为/H3C/Cisco 交换机需显式启用 jumbo frame 并设为 9000)
- 对端服务器网卡 MTU 是否也设为相同值(如 9000)
- 中间无状态设备(如某些防火墙、负载均衡器)是否透传巨型帧
在线修改 MTU(无需重启网卡)
使用 ip 命令即时生效(但重启后丢失):
sudo ip link set dev eth0 mtu 9000
验证是否成功:
ip link show eth0 | grep mtu
输出应类似:mtu 9000 qdisc mq state UP mode DEFAULT group default qlen 1000
注意:修改前确保接口已 up,且无活跃连接正在使用旧 MTU(TCP 连接会沿用建立时的 MSS,新连接才生效)。
结合 ethtool 排查 MTU 相关丢包
若设完 MTU 仍出现丢包,用 ethtool 定位真实原因:
-
查发送丢包计数:
ethtool -S eth0 | grep -i "tx_.*drop\|err\|defer"—— 若tx_dropped持续增长,可能是驱动队列满或 DMA 缓冲不足 -
查接收侧是否截断:
dmesg | grep -i "frame too long\|jumbo\|mtu"—— 常见报错如eth0: dropped packet, size 9014 > 9000,说明帧超 MTU 被丢弃 -
确认 offload 是否启用:
ethtool -k eth0—— 确保tx offload(如 tso、gso)开启,否则大包需 CPU 分片,增加延迟和错误风险
永久生效与注意事项
临时设置不持久。要永久启用巨型帧:
- RHEL/CentOS:编辑
/etc/sysconfig/network-scripts/ifcfg-eth0,添加一行MTU="9000" - Debian/Ubuntu:在
/etc/network/interfaces对应 iface 段加mtu 9000;或 systemd-networkd 中设MTUBytes=9000 - 务必同步更新
/etc/default/grub中的net.ifnames=0(如需传统 ethX 命名)避免配置错绑
最后提醒:巨型帧虽降低分片开销、提升吞吐,但会放大单帧错误影响,且不兼容部分老旧设备。建议仅在可控局域网(如存储网络、计算集群内部)启用,并搭配 ethtool 持续监控 tx_errors、rx_missed 等指标。











