前段时间一个培训项目遇到了所有网卡中断都跑在一个核上,造成负载不均衡的问题,解决思路如下:
1. 首先查看一下
irqbalance service是否正常运行,自动平衡irq负载的service
2. 可以用下面命令绑定不同irq到不同的cpu上,smp_affinity为cpu的位掩码,3(0x11)代表0号和1号cpu
# service irqbalance stop
# echo "3" > /proc/irq/irqnum/smp_affinity
3. 在注册irq时,可以参考kernel函数 irq_set_affinity直接将irq绑定到指定的cpu
int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask)
{
struct irq_desc *desc = irq_to_desc(irq);
unsigned long flags;
if (!desc->chip->set_affinity)
return -EINVAL;
。。。
if (!desc->chip->set_affinity(irq, cpumask)) {
。。。
}
}
关于linux内核的实时性:
1. 实时性就是要求指定的任务可以在预期的时间内被处理,这在非实时的linux内核上没法保证,不论多么高优先级的实时任务都会被中

本文介绍了如何解决Linux系统中所有网卡中断集中在单一CPU核心导致的负载不均衡问题,包括检查irqbalance服务、手动绑定中断到不同CPU,以及使用kernel函数irq_set_affinity。同时,文章探讨了Linux内核实时性的需求,解释了中断线程化的重要性,以确保高优先级任务不会被中断抢占,并简述了中断线程化的实现机制。
最低0.47元/天 解锁文章
1757

被折叠的 条评论
为什么被折叠?



