当前位置: 首页 > news >正文

Linux 中断优化

绑了进程还慢、缓存被污染、延迟抖动、软中断高、迁移依然存在—— 99% 都是中断导致的。

中断(硬中断 + 软中断)会抢占你的线程、污染 L1/L2 缓存、导致缓存全部失效。中断优化 = 把中断从业务核心赶走,实现核心隔离。

中断为什么破坏性能?

  1. 中断最高优先级,随时抢占进程 / 线程
  2. 中断处理函数会读 / 写大量数据 → 污染缓存
  3. 网卡、磁盘高 IO 时,每秒几万次中断
  4. 你的业务线程刚把数据加载进 L1/L2一来中断 → 缓存直接被冲掉
  5. 结果:缓存命中率暴跌、延迟暴跳、CPU sy 高

这就是绑了核也不流畅、性能上不去的真正原因。

irqbalance

irqbalance = 自动管理中断亲和性的系统服务它会自动修改每个 IRQ 的 smp_affinity,让中断均匀分布在 CPU 核心,避免单核被打满。

但:如果你自己手动绑核(业务线程 + 中断隔离),必须关闭 irqbalance!否则它会覆盖你的配置,让你白调。

irqbalance 做什么?

  1. 周期性扫描/proc/interrupts
  2. 看每个中断流量(网卡、NVMe、网卡多队列等)
  3. 自动分配中断到不同 CPU,避免单个 CPU 软中断打满
  4. 自动调整/proc/irq/<num>/smp_affinity

目标:中断负载均衡 → 不出现单核 CPU 被 IRQ 占满

适用场景:

  • 普通服务器
  • 没有手动绑核
  • 不追求极低延迟
  • 多队列网卡默认场景

irqbalance为什么会和你冲突?

你手动设置:

echo 100 > /proc/irq/42/smp_affinity

过一会又变回去了→ 就是 irqbalance 改的。

irqbalance 与手动 IRQ 亲和性完全互斥!

它的逻辑:

  • 你设置 = 我不管?不是!
  • 它会强制覆盖所有 IRQ 的亲和性
  • 包括你自己绑的

所以:

只要你自己做中断优化、绑核、低延迟优化 → 必须关闭 irqbalance

irqbalance 工作模式

它有两种策略:

1)全均衡(默认)

  • 所有 CPU 平等
  • 中断均匀分布
  • 会把中断扔到任意核心,包括你的业务核心污染缓存、导致抖动、降低缓存命中率

2)NUMA 感知

  • 优先把中断分配在本地 NUMA 节点
  • 性能比全均衡好但依然:会随机分配到你业务线程所在 CPU,破坏缓存!

irqbalance 与业务线程关系

sched_setaffinity 绑了核,为什么性能还是不行?

答案:irqbalance 把网卡中断随机扔到你的业务 CPU 上→ 中断频繁抢占→L1/L2 缓存被不断冲刷→ 缓存命中率暴跌→ 延迟抖动巨大

  • 关闭 irqbalance
  • 中断手动绑到专用 CPU 核心(如 0-3)
  • 业务线程绑到另外 CPU(4-7)
  • 每个线程只绑 1 个核心(不迁移)
  • grub 设置isolcpus=4-7 nohz_full irqaffinity=0-3
  • 关闭节能、固定 CPU 频率

什么时候可以开 irqbalance?

只有这些情况:

  • 普通 Web 服务
  • 无低延迟要求
  • 没有手动绑核
  • 不关心缓存抖动
  • 运维简单省事

否则:关!

关键要点

irqbalance 只保证中断不拥塞,不保证低延迟、不保证缓存命中率

它的设计目标:稳定、不丢包、不分单核打满

不是目标:

  • 低延迟
  • 高缓存命中
  • 线程独占 CPU
  • 实时性

所以:

高性能 / 低延迟 / 数据库 / DPDK / 网关:永远关 irqbalance

中断优化三件事

1. 中断亲和性(IRQ affinity):把中断绑到固定 CPU

2. 关闭 irqbalance(自动均衡会破坏绑核)

3. 业务核心完全不处理任何中断(最高效)

实战操作

1. 查看中断 & 找到网卡中断号

cat /proc/interrupts | grep eth0 # 或 grep -E 'eth|nvme|mlx' /proc/interrupts

例如:eth0对应中断号42

2. 设置中断亲和性(绑到 CPU8)

echo 100 | sudo tee /proc/irq/42/smp_affinity # 100 = 第8位(二进制 100000000)
  • smp_affinity十六进制位掩码
  • 第 N 位为 1 → 中断可以在该 CPU 触发

简单规则:

  • CPU0 → 0x1
  • CPU1 → 0x2
  • CPU2 → 0x4
  • CPU3 → 0x8
  • CPU4 → 0x10
  • CPU8 → 0x100

3. 关闭 irqbalance(必须!)

systemctl stop irqbalance systemctl disable irqbalance

irqbalance 会自动改 smp_affinity,让你白绑。

最高性能架构:中断核心 + 业务核心 分离

标准企业级布局:

  • CPU0:管理核心 + 系统中断
  • CPU1–CPU3:网卡 / 磁盘硬中断 + 软中断
  • CPU4–CPU7:业务线程(完全无中断)

这样:

  • 业务线程不被任何中断抢占
  • L1/L2 永不被中断污染
  • 缓存命中率达到最高
  • 延迟极低、无抖动

这就是DPDK / 高并发网关 / 数据库的标准架构。

RPS / RFS 软中断分发(网卡多队列必备)

很多网卡单队列,中断只能绑一个 CPU,导致单核软中断打满。

开启 RPS(把软中断分发到多个 CPU)

echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus # 绑CPU0-3
  • f= 0xF → CPU0-1-2-3
  • 软中断在多个 CPU 处理,不单核打满

RFS(提升缓存局部性,配合业务绑核)

echo 32768 > /proc/sys/net/core/rps_sock_flow_entries echo 8192 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt

作用:同一个 TCP 流始终走同一个 CPU → 缓存命中更高。

彻底杜绝中断干扰:isolcpus + nohz_full

你前面问:sched_setaffinity 为什么还会迁移、还会卡顿?答案:因为中断 + 时钟 tick 仍会打扰

内核启动参数(最高境界)

isolcpus=4-7 # 业务核心,完全不参与调度 nohz_full=4-7 # 关闭时钟tick,无周期性中断 rcu_nocbs=4-7 # RCU 回调不打扰业务核心 irqaffinity=0-3 # 所有中断强制只往0-3送

这样:4-7 核心:无中断、无 tick、无 RCU、无迁移、无抢占→ 缓存命中率接近 100%

关键总结

  1. sched_setaffinity 只管线程,不管中断
  2. 中断优先级高于一切,随时污染缓存
  3. 必须:中断绑固定 CPU,业务绑别的 CPU
  4. 单 mask 内仍会迁移 →绑单核才不迁移
  5. 最高境界:isolcpus + nohz_full + irqaffinity
http://www.jsqmd.com/news/565781/

相关文章:

  • 2026年木卡板厂家专业推荐:防震卡板/免检卡板/防静电卡板/防泄漏卡板一体化供应精选 - 品牌推荐官
  • RAG工程化实践方法论 - 从零实现一个基础RAG
  • 突破性虚拟形象创作:零基础玩转开源虚拟主播工具EasyVtuber
  • 从 SDLC 到 AIDLC:CIT 的 AI 驱动开发转型经验 + Kiro IDE 深度集成
  • OBCA vs OBCP:从线上理论到线下上机,我如何规划OceanBase双证备考路线?
  • Phi-3-mini-4k-instruct-gguf环境部署:CUDA推理路线+隔离venv最佳实践
  • Windows服务管理
  • 分期乐京东e卡套装回收平台怎么选?实测数据教你避坑! - 猎卡回收公众号
  • 如何3步将AutoHotkey脚本编译为独立可执行文件:Ahk2Exe完整指南
  • AI赋能开发:在快马平台探索多模型驱动的新一代代码生成官网
  • 2026年上海AI推流方案公司解析:上海橙一网络科技提供获客方法、机制、设备与方案全攻略 - 品牌推荐官
  • AI演示文稿生成:从自动化排版到模板定制的全流程指南
  • ExcelDataReader:告别Excel读取烦恼,3分钟上手C最强Excel解析库
  • 基于Python的智慧养老中心管理系统毕业设计源码
  • Kinetics数据集下载与预处理全攻略:避开YouTube下载的坑(附国内镜像源)
  • Hunyuan-MT-7B多场景应用:在线教育平台用它实现直播课程实时多语字幕+知识点弹窗
  • GLM-4.1V-9B-Base与MATLAB联动:科学计算可视化报告的自动生成
  • 2026年全国整木定制家居行业五大排行:橱柜/护墙板/全屋定制/衣柜/木门/楼梯公司深度盘点,布局西南地区四川成都等地区 - 十大品牌榜
  • intv_ai_mk11效果对比:在‘解释梯度下降’任务中,相比通用大模型,其技术术语准确率提升35%
  • 构建智能体的安全技能树 - Claude 环境下 Agent Skills 的多元实践(下篇)
  • 实测Qwen3-8B:在Ollama上快速部署,体验推理能力超强的轻量级模型
  • NFT法医:鉴定数字资产死因
  • gcc 性能优化 内建函数
  • 2026年资产管理系统公司推荐,主流平台与服务商完整汇总 - 品牌2026
  • GPT-5.4 vs Claude 4.6 接入差异对比(含迁移与统一接入)
  • 如何用MaxMind GeoLite2数据库分析fail2ban拦截的恶意IP?附Python代码示例
  • 简化连接:三星文件传输体验
  • 付费内容访问难题如何破解?开源工具的创新解决方案
  • 颠覆级AI演示工具:3步打造专业PPT的完整指南
  • SpringCloud OpenFeign拦截器实战:如何优雅传递JWT Token到下游服务?