ethtool -K 关闭 TSO/GSO 后网络吞吐反而下降的业务场景验证
发布时间 - 2026-01-28 00:00:00 点击率:次关闭TSO/GSO后吞吐下降是因TCP分段回归内核软中断处理,导致softirq压力陡增成为瓶颈,尤其在高吞吐小包混合场景下;典型表现为单流吞吐降15–30%、si%持续超40%、TcpOutSegs暴涨。
为什么 ethtool -K 关闭 TSO/GSO 后吞吐反而掉?
这不是配置错了,而是 TCP 分段逻辑被强行“降级”后,CPU 和网卡协同方式发生了根本变化。TSO(TCP Segmentation Offload)和 GSO(Generic Segmentation Offload)本质是把 TCP 大包的分段工作从内核协议栈下推到网卡硬件或驱动层;关闭后,所有分段回归内核软中断处理,尤其在高吞吐、小包混合场景下,softirq 压力陡增,反而成为瓶颈。
典型表现:单流大文件传输吞吐下降 15–30%,top 中 si%(softirq 占用)持续高于 40%,/proc/net/snmp 里 TcpOutSegs 暴涨但 IpOutNoRoutes 或 TcpRetransSegs 无异常。
哪些业务场景会明显踩中这个坑?
不是所有关 TSO/GSO 都会掉吞吐,关键看流量特征和硬件能力:
- 使用 DPDK 或 XDP 的应用(如 Envoy、自研 proxy),本身绕过内核协议栈,关 TSO/GSO 几乎无影响,甚至因避免硬件分段校验开销而略升
- 高并发短连接 + 小响应体(如 HTTP/1.1 JSON API),关 GSO 后每个
write()触发一次 skb 分配+拷贝+软中断调度,alloc_skb和__netif_成热点
receive_skb_core
- 启用了
tcp_congestion_control为bbr或cubic且 RTT -
虚拟化环境(KVM + virtio-net),关 TSO 后 guest 内核需承担全部分段,而
virtio_net_hdr头部处理又额外增加 CPU 开销
ethtool -K 关闭项的实际作用差异
ethtool -K eth0 tso off gso off 看似一步到位,但三者生效层级不同,误关可能白忙:
-
tso:仅影响 IPv4 TCP 流量,且依赖网卡支持(ethtool -i eth0查supports-tso);关了但网卡不支持 TSO,实际无变化 -
gso:内核软件层分段开关,影响所有 L4 协议(TCP/UDP/FULL),关了会强制所有发送路径走dev_hard_start_xmit()前分段,是吞吐下降主因 -
gro(常被一起关):是接收端聚合,关它一般不影响发送吞吐,但会抬高接收侧 CPU,间接加剧整体负载失衡
验证时建议逐项关闭:ethtool -K eth0 gso off 单独测,再加 tso off,比一并关更易定位根因。
怎么验证是不是真被 TSO/GSO 关闭拖累?
别只看 iperf3 -c 结果,要抓三层证据链:
- 确认关闭生效:
ethtool -k eth0 | grep -E "(tso|gso|gro)"输出必须全为off - 看软中断分布:
cat /proc/softirqs | grep "NET_TX\|NET_RX",对比开关前后同一负载下第 9 列(NET_TX)增长倍数,>2x 即强相关 - 抓发送路径火焰图:
perf record -e 'skb:consume_skb' -g -a sleep 30,关 GSO 后若tcp_write_xmit → __tcp_push_pending_frames → tcp_mss_split_point占比突增,就是内核分段成瓶颈 - 检查 TX ring 状态:
ethtool -S eth0 | grep tx_.*_errors,若tx_dma_failed或tx_timeout上升,说明关 offload 后驱动提交速率跟不上
真正难的是区分「GSO 关闭导致吞吐降」和「GSO 关闭暴露了原有瓶颈」——比如原本网卡驱动有锁竞争,关 GSO 后分段调用变密集,锁争用被放大。这时候改驱动比关 GSO 更治本。
# js
# json
# 栈
# ai
# proxy
# 热点
# 虚拟化
# 网卡驱动
# 为什么
# 有锁
# Generic
# 并发
# http
# udp
# linux
# 关了
# 的是
# 错了
# 这不是
# 不支持
# 只看
# 表现为
# 再加
# 推到
# 发短
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
制作公司内部网站有哪些,内网如何建网站?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Laravel观察者模式如何使用_Laravel Model Observer配置
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
如何在景安服务器上快速搭建个人网站?
微信小程序 闭包写法详细介绍
,交易猫的商品怎么发布到网站上去?
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
如何破解联通资金短缺导致的基站建设难题?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel Session怎么存储_Laravel Session驱动配置详解
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
如何批量查询域名的建站时间记录?
如何快速生成凡客建站的专业级图册?
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
Android Socket接口实现即时通讯实例代码
开心动漫网站制作软件下载,十分开心动画为何停播?
Laravel怎么实现模型属性的自动加密
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Laravel如何记录自定义日志?(Log频道配置)
个人摄影网站制作流程,摄影爱好者都去什么网站?
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
LinuxCD持续部署教程_自动发布与回滚机制
南京网站制作费用,南京远驱官方网站?
浅谈Javascript中的Label语句
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
WEB开发之注册页面验证码倒计时代码的实现
用yum安装MySQLdb模块的步骤方法
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
JavaScript如何实现倒计时_时间函数如何精确控制
EditPlus中的正则表达式 实战(2)
如何在云主机快速搭建网站站点?
java ZXing生成二维码及条码实例分享
JavaScript常见的五种数组去重的方式
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
android nfc常用标签读取总结
清除minerd进程的简单方法
如何在不使用负向后查找的情况下匹配特定条件前的换行符
如何用腾讯建站主机快速创建免费网站?


