Linux 中断负载均衡

1 篇文章 0 订阅

背景: 

1)在使用 Xilinx zynq SOC时,发现I2C中断不能得到及时响应,定位发现SPI中断过多引起的.

2)irq 的默认smp_affinity是f, 按照理解中断应该在四个核上动态调整,  但只有CPU0在响应外部中断,其他核不响应中断.

UG1046中如下解释, Linux SMP中断默认都在CPU0在响应;实验发现中断只会在小号核上响应(例如中断绑定在CPU1和CPU2,实际只有CPU1在响应中断,可以查看GIC寄存器)

两种实现中断负载均衡

1)手动

cat /proc/interrupts  // 查看中断情况与中断号

echo cpu_mask > /proc/irq/IRQ#/smp_affinity   // 十六进制,每个bit对应一个CPU
echo cpu_list > /proc/irq/IRQ#/smp_affinity_list  // 十进制


echo cpu_mask > /proc/irq/IRQ#/smp_affinity 

echo 1 > /proc/irq/IRQ#/smp_affinity // 设置为CPU0
echo f > /proc/irq/IRQ#/smp_affinity // 设置为CPU0 CPU1 CPU2 CPU3

echo 2,8 > /proc/irq/78/smp_affinity_list // 设置为CPU2和CPU8 
echo 0-4 > /proc/irq/78/smp_affinity_list // 设置为CPU0 CPU1 CPU2 CPU3 CPU4

2)irqbalance

原理:通过分析/proc/interrupts中断情况和/proc/stat中断负载情况,然后将中断均匀分配到各个CPU核上.

两种mode

performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能.

power-save mode 时,irqbalance 会将中断集中分配给 CPU0,以保证其它空闲 CPU 的睡眠时间,降低能耗.

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值