前段时间一个培训项目遇到了所有网卡中断都跑在一个核上,造成负载不均衡的问题,解决思路如下:
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内核上没法保证,不论多么高优先级的实时任务都会被中断抢占,因此