Linux怎么配置irqbalance服务让多核CPU均匀分担网卡中断

星婷君_2843

星婷君_2843

2026-10-03

921人浏览

原创

irqbalance 默认在多队列网卡上失效,将所有中断集中到cpu0,因其无法准确识别rss队列负载;需停用后手动绑定irq、启用rps/rfs并禁用gro/lro才能实现真正均衡。

linux怎么配置irqbalance服务让多核cpu均匀分担网卡中断

irqbalance 默认在多队列网卡上经常失效,反而把所有中断塞给 CPU0 —— 不是配错了,而是它压根没识别到 RSS 队列负载,直接放弃均衡。真要均匀分担,得关掉它,手动绑 + 补 RPS/RFS。

为什么 irqbalance 会把所有网卡中断塞给 CPU0

它依赖 /proc/interrupts 的计数更新和 softirq 延迟反馈做负载评估,但 RSS 队列中断计数滞后、NET_RX 软中断延迟不被准确采集、或内核版本(如 4.19/5.4)中 irqbalance 对 MSI-X 多向量中断识别有缺陷,都会让它“以为”只有 CPU0 在干活。现象很典型:cat /proc/interrupts | grep eth0 显示所有 eth0-TxRx-* 行的数字全集中在第一列;watch -n1 'cat /proc/softirqs | grep NET_RX' 里只有 CPU0 的值飙升。

停用 irqbalance 后怎么安全绑定各 RSS 队列到不同 CPU

不能只停服务,必须逐个 IRQ 精确绑定,否则可能误绑系统中断或触发 NUMA 远程访问:

Alpine Linux
Alpine Linux

获取最新发布版本;聚合最新版本架构

下载
  • 先确认网卡队列数:grep eth0 /proc/interrupts | wc -l(比如输出 8,说明有 8 个 RSS 队列)
  • 查可用 CPU 列表:cat /sys/devices/system/cpu/online,排除 isolcpus 或 rcu_nocbs 绑定的核
  • 逐个写入 smp_affinity_list:
    echo 0 > /proc/irq/44/smp_affinity_list(假设 44 是 eth0-TxRx-0 的 IRQ 号)
    echo 1 > /proc/irq/45/smp_affinity_list(45 是 eth0-TxRx-1)
    ……依此类推,确保每个队列对应一个独占 CPU
  • 验证是否生效:cat /proc/irq/44/smp_affinity_list 应返回 0,且 /proc/interrupts 中该行数字开始在对应列增长

RPS/RFS 必须补上,否则中断分开了 softirq 还是挤在单核

单纯绑 IRQ 只控制硬中断投递,NET_RX 软中断仍可能全部在 CPU0 上执行 —— 因为上层收包路径没分流:

  • 检查 RPS 是否启用:cat /sys/class/net/eth0/queues/rx-0/rps_cpus,为空就需配置
    例如 8 核:对每个 rx 队列执行 echo ff > /sys/class/net/eth0/queues/rx-0/rps_cpus(十六进制掩码)
  • RFS 推荐开启: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,否则大包重组会绕过 RPS,集中消耗单核 softirq

验证是否真正均衡的关键命令

别信 top 或 htop 里的 si%,它们只反映采样瞬间,容易漏掉 burst:

  • 持续观察软中断分布:watch -n1 'grep -E "NET_RX|NET_TX" /proc/softirqs',确认各 CPU 列数值同步上升,标准差
  • 检查实际收包队列使用率:ethtool -S eth0 | grep rx_queue_.*_packets,8 个队列数值应大致接近(±20% 内)
  • 如果仍有某核 softirq 持续偏高,大概率是 RPS 掩码没对齐队列数,或应用层 socket 没开 SO_ATTACH_REUSEPORT_CBPF 导致连接哈希倾斜

最易被忽略的是:RSS 队列数 ≠ CPU 数 ≠ RPS 掩码位数。三者不对齐时,哪怕 IRQ 绑对了,RPS 也会把多个队列映射到同一个 CPU,软中断照样打满。动手前一定先跑 ethtool -l eth0 确认 Combined 值,再决定绑几个核、设几位掩码。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3790

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3273

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2393

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5730

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5382

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3173

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2685

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2899

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习