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%,topsi%(softirq 占用)持续高于 40%,/proc/net/snmpTcpOutSegs 暴涨但 IpOutNoRoutesTcpRetransSegs 无异常。

哪些业务场景会明显踩中这个坑?

不是所有关 TSO/GSO 都会掉吞吐,关键看流量特征和硬件能力:

  • 使用 DPDK 或 XDP 的应用(如 Envoy、自研 proxy),本身绕过内核协议栈,关 TSO/GSO 几乎无影响,甚至因避免硬件分段校验开销而略升
  • 高并发短连接 + 小响应体(如 HTTP/1.1 JSON API),关 GSO 后每个 write() 触发一次 skb 分配+拷贝+软中断调度,alloc_skb__netif_

    receive_skb_core
    成热点
  • 启用了 tcp_congestion_controlbbrcubic 且 RTT
  • 虚拟化环境(KVM + virtio-net),关 TSO 后 guest 内核需承担全部分段,而 virtio_net_hdr 头部处理又额外增加 CPU 开销

ethtool -K 关闭项的实际作用差异

ethtool -K eth0 tso off gso off 看似一步到位,但三者生效层级不同,误关可能白忙:

  • tso:仅影响 IPv4 TCP 流量,且依赖网卡支持(ethtool -i eth0supports-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_failedtx_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进程的简单方法  如何在不使用负向后查找的情况下匹配特定条件前的换行符  如何用腾讯建站主机快速创建免费网站?