Linux:CPU中断绑定----计算 SMP IRQ Affinity

本文详细解释了如何使用二进制数字将IRQ(中断请求)绑定到特定的CPU上,并介绍了Linux系统中实现这一操作的具体命令。此外还讨论了手动绑定IRQ前需要停用irqbalance服务的原因及IO-APIC的不同工作模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“echo 2 > /proc/irq/33/smp_affinity” 中的 ”2“ 是怎么来的,这其实是个二进制数字,代表 00000010,00000001 代表 CPU0 的话,00000010 就代表 CPU1, “echo 2 > /proc/irq/33/smp_affinity” 的意思就是说把 33 中断绑定到 00000001(CPU0)上。所以各个 CPU 用二进制和十六进制表示就是:

也就是说,Linux绑定CPU是通过掩码表示的,每个CPU对应1位,0表示关闭,1表示开启。

如果想把 IRQ 绑定到 CPU2 上就是 00000100=4:

echo "1" > /proc/irq/33/smp_affinity

 如果想把 IRQ 同时平衡到 CPU0 和 CPU2 上就是 00000001+00000100=00000101=5:

echo "5" > /proc/irq/33/smp_affinity

注意,在手动绑定 IRQ 到 CPU 之前需要先停掉 irqbalance 这个服务,irqbalance 是个服务进程、是用来自动绑定和平衡 IRQ 的.

还有一个限制就是,IO-APIC 有两种工作模式:logic 和 physical。

  • 在 logic 模式下 IO-APIC 可以同时分布同一种 IO 中断到8颗 CPU (core) 上(受到 bitmask 寄存器的限制,因为 bitmask 只有8位长。);
  • 在 physical 模式下不能同时分布同一中断到不同 CPU 上,比如,不能让 eth0 中断同时由 CPU0 和 CPU1 处理,这个时候只能定位 eth0 到 CPU0、eth1 到 CPU1,也就是说 eth0 中断不能像 logic 模式那样可以同时由多个 CPU 处理。
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值