irqbalance 不均衡导致单核 softirq 打满的网卡多队列 + affinity 配置

发布时间 - 2026-01-30 00:00:00    点击率:
irqbalance 会因负载评估失效将多队列网卡中断集中到 CPU0;需停用后手动绑定各 RSS 队列到不同 CPU,并配置 RPS/RFS、关闭 GRO/LRO,最后通过 /proc/softirqs 验证 softirq 均衡。

irqbalance 为什么会让网卡中断全挤在 CPU0 上

默认启用的 irqbalance 在某些内核版本(尤其是 4.x/5.x)或特定硬件上,会错误地将多队列网卡的中断(如 eth0-TxRx-0eth0-TxRx-1…)全部映射到同一个 CPU 核心(通常是 CPU0),而不是均匀分散。这不是 bug,而是它依赖的负载评估机制失效:softirq 处理延迟、RSS 队列未被识别、或 /proc/interrupts 中中断计数更新滞后,都会导致它“误判”其他核不忙。

常见现象:top -p $(pgrep irqbalance) 看不到明显占用,但 cat /pro

c/interrupts | grep eth0 显示所有队列中断都集中在 CPU0;同时 watch -n1 'cat /proc/softirqs | grep -E "(NET_RX|NET_TX)"' 显示 CPU0 的 NET_RX 值飙升,而其他核几乎为 0。

停掉 irqbalance 后怎么手动绑定网卡中断

停用 irqbalance 只是第一步,关键是要把每个 RSS 队列中断明确绑定到不同 CPU,且避开系统保留核(如 isolcpus、rcu_nocbs 绑定的核)。

  • 先查网卡支持的中断数量:grep eth0 /proc/interrupts | wc -l(比如 16 个队列)
  • 查可用 CPU 列表:nproccat /sys/devices/system/cpu/online,排除隔离核
  • 逐个写入 smp_affinity_list
    echo 0 > /proc/irq/123/smp_affinity_list  # 第 1 队列 → CPU0
    echo 1 > /proc/irq/124/smp_affinity_list # 第 2 队列 → CPU1
    ...
  • 注意:写入前确认该 IRQ 确实属于对应网卡队列(看 /proc/interrupts 第二列),避免误绑系统中断

网卡队列数、CPU 数、RPS/RFS 设置要对齐

单纯调中断 affinity 不够,softirq 负载还受上层分流影响。如果网卡队列数(ethtool -l eth0)少于 CPU 数,或者没开 RPS,即使中断分开了,所有包仍可能被送到同一个 softirq 上下文处理。

  • 确保 ethtool -l eth0 显示的 Combined 值 ≥ 你打算使用的 CPU 数(如 8 队列配 8 核)
  • 检查 RPS 是否启用:cat /sys/class/net/eth0/queues/rx-0/rps_cpus,若为空或全 0,需按 CPU 掩码写入(如 8 核用 ff,但更推荐用 rps_cpus 按队列分别设)
  • RFS(Receive Flow Steering)建议开启:echo 32768 > /proc/sys/net/core/rps_sock_flow_entries,并为每个 rx 队列设 rps_flow_cnt(如 echo 2048 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
  • 关闭 GRO/LRO(ethtool -K eth0 gro off lro off),避免大包重组集中消耗单核 softirq

验证 softirq 分布是否真的均衡

改完不能只看 /proc/interrupts,必须确认 softirq 实际执行位置。最直接的方法是采样 /proc/softirqs 并观察各列变化速率:

运行 watch -n0.5 'grep -A1 "NET_RX" /proc/softirqs',等 10 秒,看 CPU0–CPU7 对应列是否同步增长(差值

容易忽略的一点:某些主板 BIOS 里有 “Interrupt Remapping” 或 “x2APIC Mode” 选项,若关闭,会导致 smp_affinity_list 写入无效 —— 此时必须进 BIOS 打开 x2APIC,否则手动绑定永远不生效。


# app  # 主板  # ios  # bios  # 为什么  # echo  # class  # linux  # bug  # 绑定  # 尤其是  # 要把  # 这不是  # 会让  # 要对  # 只看  # 并为  # 未被  # 不忙 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在景安服务器上快速搭建个人网站?  如何在搬瓦工VPS快速搭建网站?  如何快速上传自定义模板至建站之星?  个人摄影网站制作流程,摄影爱好者都去什么网站?  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Laravel如何使用查询构建器?(Query Builder高级用法)  Laravel如何处理CORS跨域请求?(配置示例)  Laravel怎么清理缓存_Laravel optimize clear命令详解  如何在景安云服务器上绑定域名并配置虚拟主机?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  canvas 画布在主流浏览器中的尺寸限制详细介绍  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  如何快速建站并高效导出源代码?  如何实现javascript表单验证_正则表达式有哪些实用技巧  如何在建站之星绑定自定义域名?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  如何有效防御Web建站篡改攻击?  浅谈redis在项目中的应用  如何在IIS服务器上快速部署高效网站?  JS经典正则表达式笔试题汇总  Laravel如何使用withoutEvents方法临时禁用模型事件  在线制作视频网站免费,都有哪些好的动漫网站?  魔方云NAT建站如何实现端口转发?  网站制作壁纸教程视频,电脑壁纸网站?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  android nfc常用标签读取总结  桂林网站制作公司有哪些,桂林马拉松怎么报名?  打造顶配客厅影院,这份100寸电视推荐名单请查收  昵图网官网入口 昵图网素材平台官方入口  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  Python3.6正式版新特性预览  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  网站图片在线制作软件,怎么在图片上做链接?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  用yum安装MySQLdb模块的步骤方法  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  高端企业智能建站程序:SEO优化与响应式模板定制开发  高防服务器租用指南:配置选择与快速部署攻略  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何快速搭建高效简练网站?  如何在IIS中新建站点并配置端口与IP地址?  浅述节点的创建及常见功能的实现  Python文件流缓冲机制_IO性能解析【教程】  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何获取PHP WAP自助建站系统源码?