0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux中断“搬家”指南:从应用到操作,手把手教你转移中断核心(RK3588)

jf_44130326 来源:Linux1024 2026-02-04 16:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

wKgZO2kamRWAYpqtAAAlebNTssU358.png

一、为什么要做中断转移?

中断是CPU处理硬件事件的信号,但默认情况下,中断可能被随机分发到不同CPU核心。在以下场景,中断转移尤为重要:

异构CPU(大小核):如RK3588A76大核(性能强)和A55小核(能效高),把网卡、存储等核心中断绑到大核,充分利用大核算力。

多核负载均衡:避免单个核心因中断扎堆导致过载,让核心资源更均衡。

低延迟场景:对延迟敏感的业务(如实时网络、数据库),将中断绑到专属核心,减少调度干扰。

二、应用层:三步完成中断转移

网卡eth0的中断转移到CPU7为例,操作只需3步:

步骤1:找到目标中断的身份证”——中断号

通过/proc/interrupts查看中断与设备的对应关系:

wKgZO2kamRaACa8XAAAgQ1W5w6s256.png

这里156就是**eth0-0中断的中断号**

步骤2:计算目标CPU绑定掩码

Linux十六进制掩码表示中断允许分发的CPU核心,每一位对应一个CPU(从右到左,最低位为CPU0):

CPU001(二进制00000001

CPU102(二进制00000010

CPU204(二进制00000100

...

CPU780(二进制10000000

如果要绑到CPU7,掩码就是80

步骤3:写入掩码,完成搬家

将掩码写入/proc/irq/[中断号]/smp_affinity

echo80 > /proc/irq/156/smp_affinity
验证转移结果

再次查看中断计数,确认CPU7的计数是否开始增长:

watch-n1"cat /proc/interrupts | grep eth0"

eth0-0对应的CPU7列(最右列)数值持续增加,说明转移成功。

三、底层:中断是如何认新核心的?

从内核到硬件,中断转移的核心逻辑分为3层:

1.用户空间与内核的交互:/proc接口

/proc/irq/[中断号]/smp_affinity用户空间与内核中断子系统的桥梁。当你写入掩码时,内核会解析这个十六进制值,转换为CPU亲和性位图。

2.内核中断子系统:配置亲和性

内核通过irq_desc结构体管理每个中断的属性,其中包含irq_data.affinity(亲和性位图)。当写入smp_affinity时,内核会:

解析十六进制掩码为二进制位图;

更新irq_desc中该中断的亲和性配置;

通知中断控制器(如ARM GIC这个中断以后只发给指定CPU”

3.硬件中断控制器:最终的分发者

ARM GIC(通用中断控制器)为例,它会根据内核设置的亲和性寄存器Affinity Register,决定将中断信号发送到哪个CPU核心。

比如,当GIC收到eth0的中断请求时,会检查该中断的亲和性配置,然后直接把中断投递CPU7的中断管线,确保只有CPU7会响应这个中断。

四、实战:RK3588上的中断转移(大小核优化)

RK3588采用“4大核(A76+4小核(A55架构,假设要把eth0的关键中断移到大核(如CPU6CPU7),步骤如下:

1.确定大核编号:通过lscpu查看CPU架构,确认大核对应的逻辑CPU编号(比如CPU4~CPU7是大核)。

2.找到eth0中断号

cat/proc/interrupts | grep eth0

假设关键中断号是156eth0-0)。

1.绑定到大核(如CPU7

echo80 > /proc/irq/156/smp_affinity

1.验证与压测

watch监控中断计数,确认CPU7列增长;

iperf进行网络压测,对比转移前后的吞吐量和延迟。

以下视频为指令切换到不同核,右边中断观察变化

五、注意事项:这些坑要避开

1.irqbalance服务的干扰

irqbalance是一个自动均衡中断的服务,会动态调整中断绑定。如果要固定中断核心,需先关闭它:

systemctl stop irqbalancesystemctldisableirqbalance

1.多队列网卡的配合

现代网卡支持多队列RSS(接收端缩放),可将不同数据流的中断分散到多个队列。此时,除了中断绑定,还需配置队列的CPU亲和性(通过/sys/class/net/eth0/queues/目录)。

2.配置的持久性

/proc下的配置是临时的,重启后会丢失。若需永久生效,可将命令写入启动脚本(如/etc/rc.local)或系统服务。

3.大小核的能力匹配

确保目标CPU核心支持处理该中断(比如某些特殊中断可能只能由特定核心处理,需查阅SoC手册)。

总结

中断转移是Linux系统精细化性能调优的重要手段,从应用层的简单配置,到底层内核与硬件的协同,本质是让中断信号精准匹配算力核心。无论是异构CPU的性能释放,还是多核负载的均衡,掌握中断转移,能让你的系统跑得更聪明

如果是嵌入式或服务器开发,赶紧试试把核心中断绑到高性能核心,看看业务延迟和吞吐量的变化吧~

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5209

    文章

    20629

    浏览量

    336796
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11326

    浏览量

    225836
  • Linux
    +关注

    关注

    88

    文章

    11810

    浏览量

    219513
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3588 Type-C一线通,DP显示输出实战指南

    摘要:RK3588的Type-C接口不仅是数据传输通道,更是一路强大的DisplayPort视频输出接口。本文将手把手教你如何通过Type-C实现DP视频输出,让你使用眺望电子RK3588
    的头像 发表于 04-03 08:33 1.1w次阅读
    <b class='flag-5'>RK3588</b> Type-C一线通,DP显示输出实战<b class='flag-5'>指南</b>

    手把手教你构建一个完整的工程

    手把手教你构建一个完整的工程
    发表于 08-03 09:54 33次下载
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>构建一个完整的工程

    手把手教你写批处理-批处理的介绍

    手把手教你写批处理-批处理的介绍
    发表于 10-25 15:02 69次下载

    美女手把手教你如何装机(中)

    美女手把手教你如何装机(中) 再来是硬碟的部份,这款机壳还不错,可以旋转支架~
    发表于 01-27 11:14 1650次阅读

    美女手把手教你如何装机(下)

    美女手把手教你如何装机(下) 接著下来就是今天的重头戏,开核萝!~
    发表于 01-27 11:16 3178次阅读

    手把手教你安装Quartus II

    本章手把手把教你如何安装 Quartus II 软件 ,并将它激活 。此外 还有USB -Blaster下载器的驱动安装步骤 。
    发表于 09-18 14:55 9次下载

    手把手教你在家搭建监控系统

    手把手教你在家搭建监控系统
    发表于 01-17 19:47 30次下载

    手把手教你如何开始DSP编程

    手把手教你如何开始DSP编程。
    发表于 04-09 11:54 13次下载
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>如何开始DSP编程

    手把手教你学LabVIEW视觉设计

    手把手教你学LabVIEW视觉设计手把手教你学LabVIEW视觉设计手把手教你学LabVIEW视
    发表于 03-06 01:41 3572次阅读

    手把手教你开关电源PCB排板

    手把手教你开关电源PCB排板(新型电源技术)-分享一下开关电源PCB排板的基本要点及分析,以及例子讲解。绝对的手把手
    发表于 09-18 12:27 67次下载
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>开关电源PCB排板

    《嵌入式 - STM32开发指南手把手教你搭建STM32开发环境 [Linux版 - 3]

    《嵌入式 - STM32开发指南手把手教你搭建STM32开发环境 [Linux版 - 1]《嵌入式 - STM32开发指南
    发表于 12-06 09:36 0次下载
    《嵌入式 - STM32开发<b class='flag-5'>指南</b>》<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>搭建STM32开发环境 [<b class='flag-5'>Linux</b>版 - 3]

    手把手教你学FPGA仿真

    电子发烧友网站提供《手把手教你学FPGA仿真.pdf》资料免费下载
    发表于 10-19 09:17 2次下载
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>学FPGA仿真

    手把手教你如何调优Linux网络参数

    在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃。本文基于真实案例分析,参数解读、问题诊断到优化实践,手把手教你如何调优
    的头像 发表于 05-29 09:21 1175次阅读

    RK3588核心板/开发板RT-Linux系统实时性及硬件中断延迟测试

    本文介绍瑞芯微RK3588芯片平台RT-Linux系统实时性及硬件中断延迟测试,基于触觉智能RK3588核心板/开发板演示。
    的头像 发表于 11-28 18:57 954次阅读
    <b class='flag-5'>RK3588</b><b class='flag-5'>核心</b>板/开发板RT-<b class='flag-5'>Linux</b>系统实时性及硬件<b class='flag-5'>中断</b>延迟测试

    RK3588 CPU 隔离:AB/非 AB 系统双方案适配实战

    方案 ,两套方案代码均完整可直接套用,核心差异仅在于 代码集成路径与函数调用时机 ,且均支持通过vendor_storage动态配置隔离核心,无需反复编译固件,重启即可生效。下文将从隔离原理、适用场景、双方案实现、动态配置、效果验证全维度展开,
    的头像 发表于 02-09 07:12 525次阅读
    <b class='flag-5'>RK3588</b> CPU 隔离:AB/非 AB 系统双方案适配实战