Linux中断“搬家”指南:从应用到操作,手把手教你转移中断核心(RK3588) 电子说
在高性能服务器或嵌入式设备(如瑞芯微 RK3588)上,中断处理的 CPU 核心绑定是优化性能的关键手段之一。比如网卡中断默认绑在小核上时,高网络负载会导致小核过载,而大核却“闲置”;通过中断转移,把网卡中断绑到性能更强的大核,能显著提升网络吞吐量、降低延迟。

中断是 CPU 处理硬件事件的 “信号”,但默认情况下,中断可能被随机分发到不同 CPU 核心。在以下场景,中断转移尤为重要:
•异构 CPU(大小核):如 RK3588 的 A76 大核(性能强)和 A55 小核(能效高),把网卡、存储等核心中断绑到大核,充分利用大核算力。
•多核负载均衡:避免单个核心因中断“扎堆” 导致过载,让核心资源更均衡。
•低延迟场景:对延迟敏感的业务(如实时网络、数据库),将中断绑到专属核心,减少调度干扰。
以网卡eth0的中断转移到 CPU7为例,操作只需 3 步:
通过/proc/interrupts 查看中断与设备的对应关系:

•这里156就是 **eth0-0中断的中断号 **。
Linux 用十六进制掩码表示中断允许分发的 CPU 核心,每一位对应一个 CPU(从右到左,最低位为CPU0):
•CPU0 → 01(二进制00000001)
•CPU1 → 02(二进制00000010)
•CPU2 → 04(二进制00000100)
•...
•CPU7 → 80(二进制10000000)
如果要绑到CPU7,掩码就是80。
将掩码写入/proc/irq/[中断号]/smp_affinity:
echo 80 > /proc/irq/156/smp_affinity
验证转移结果
再次查看中断计数,确认CPU7的计数是否开始增长:
watch -n1 "cat /proc/interrupts | grep eth0"
若eth0-0对应的CPU7列(最右列)数值持续增加,说明转移成功。
从内核到硬件,中断转移的核心逻辑分为 3 层:
/proc/irq/[中断号]/smp_affinity 是用户空间与内核中断子系统的“桥梁”。当你写入掩码时,内核会解析这个十六进制值,转换为 CPU 亲和性位图。
内核通过irq_desc 结构体管理每个中断的属性,其中包含irq_data.affinity(亲和性位图)。当写入smp_affinity 时,内核会:
•解析十六进制掩码为二进制位图;
•更新irq_desc 中该中断的亲和性配置;
•通知中断控制器(如 ARM GIC):“这个中断以后只发给指定 CPU”。
以 ARM GIC(通用中断控制器)为例,它会根据内核设置的亲和性寄存器(Affinity Register),决定将中断信号发送到哪个 CPU 核心。
比如,当 GIC 收到eth0的中断请求时,会检查该中断的亲和性配置,然后直接把中断“投递” 到CPU7的中断管线,确保只有CPU7会响应这个中断。
RK3588 采用 “4 大核(A76)+4 小核(A55)” 架构,假设要把eth0的关键中断移到大核(如CPU6、CPU7),步骤如下:
1.确定大核编号:通过lscpu 查看 CPU 架构,确认大核对应的逻辑 CPU 编号(比如CPU4~CPU7是大核)。
2.找到eth0中断号:
cat /proc/interrupts | grep eth0
假设关键中断号是156(eth0-0)。
1.绑定到大核(如CPU7):
echo 80 > /proc/irq/156/smp_affinity
1.验证与压测:
◦用watch 监控中断计数,确认CPU7列增长;
◦用iperf 进行网络压测,对比转移前后的吞吐量和延迟。
以下视频为指令切换到不同核,右边中断观察变化
1.irqbalance服务的干扰:
irqbalance是一个“自动均衡中断” 的服务,会动态调整中断绑定。如果要固定中断核心,需先关闭它:
systemctl stop irqbalancesystemctl disable irqbalance
1.多队列网卡的配合:
现代网卡支持“多队列 RSS(接收端缩放)”,可将不同数据流的中断分散到多个队列。此时,除了中断绑定,还需配置队列的 CPU 亲和性(通过 /sys/class/net/eth0/queues/ 目录)。
2.配置的持久性:
/proc 下的配置是临时的,重启后会丢失。若需永久生效,可将命令写入启动脚本(如/etc/rc.local)或系统服务。
3.大小核的“能力” 匹配:
确保目标 CPU 核心支持处理该中断(比如某些特殊中断可能只能由特定核心处理,需查阅 SoC 手册)。
中断转移是 Linux 系统 “精细化性能调优” 的重要手段,从应用层的简单配置,到底层内核与硬件的协同,本质是让 “中断信号” 精准匹配 “算力核心”。无论是异构 CPU 的性能释放,还是多核负载的均衡,掌握中断转移,能让你的系统跑得更 “聪明”。
如果是嵌入式或服务器开发,赶紧试试把核心中断绑到高性能核心,看看业务延迟和吞吐量的变化吧~
全部0条评论
快来发表一下你的评论吧 !