ethtool -K 是最有效降低高负载下 CPU 占用的方式之一,通过将分段、校验、聚合等操作交由网卡硬件处理,减少中断与调度开销;需先用 ethtool -k 查看支持项(如 tso/gso/gro/rx/tx),再按顺序启用并持久化配置。

直接用 ethtool -K 查看和开启 TSO、GSO 等硬件卸载功能,是降低网络高负载下 CPU 占用最有效的方式之一。这些功能把原本由内核协议栈完成的分段、校验、聚合等操作交由网卡硬件处理,大幅减少中断次数和 CPU 调度开销。
确认网卡支持的卸载能力
先执行以下命令查看当前接口(如 eth0)所有可用的卸载特性:
ethtool -k eth0
重点关注输出中是否包含以下字段及其状态(on / off / [fixed]):
-
tcp-segmentation-offload(TSO) -
generic-segmentation-offload(GSO) -
rx-checksumming和tx-checksumming -
generic-receive-offload(GRO,现代替代 LRO 的推荐选项)
若某项显示 [fixed],说明该功能由硬件固定支持或禁用,无法通过软件开关调整。
开启关键卸载功能
对大多数千兆及以上网卡(Intel e1000e、ixgbe、i40e、mlx5 等),建议按顺序启用以下几项:
-
sudo ethtool -K eth0 tso on—— 启用 TCP 分段卸载(发送端) -
sudo ethtool -K eth0 gso on—— 启用通用分段卸载(兼容 UDP/TCP,驱动层兜底) -
sudo ethtool -K eth0 gro on—— 启用通用接收卸载(替代易出错的 LRO,更安全) -
sudo ethtool -K eth0 rx on tx on—— 同时启用 RX/TX 校验和卸载
注意:不要盲目开启 lro,它在启用 IP 转发(/proc/sys/net/ipv4/ip_forward = 1)时可能引发校验和错误,GRO 是更稳定的选择。
验证开启效果与稳定性
开启后再次运行 ethtool -k eth0,确认对应项已变为 on。接着可做简单压力测试观察变化:
- 用
iperf3或netperf发起大流量 TCP 流,对比开启前后top中softirq和ksoftirqd的 CPU 占用 - 检查
/proc/net/snmp中TcpExt段的SyncookiesSent、TCPSegsOut等指标是否更平稳 - 若出现连接异常或丢包,可逐项关闭(如先关
tso再试gso),定位是否驱动或固件存在兼容问题
让配置持久生效
ethtool -K 设置是临时的,重启即失效。需写入启动脚本或 systemd service:
- 在 Ubuntu/Debian 系统中,可将命令加入
/etc/network/if-up.d/ethtool-tune并赋予可执行权限 - 在 RHEL/CentOS 系统中,可创建
/etc/sysconfig/network-scripts/ifup-local,并在其中添加ethtool -K eth0 ...命令 - 更通用的做法是编写 systemd service(如
ethtool-tune@.service),绑定到网卡设备单元
务必在生产环境变更前备份原配置,并在维护窗口测试。


















