我在 4 核英特尔机器上有一个多队列 NIC 卡,我将 NIC 卡的每个队列绑定在一个 cpu 内核上(设置 /proc/irq/xxx/smp_affinity)假设 core0 上的 queue0,core1 上的 queue1 等等。
据说软中断将在发生硬件中断的同一个内核上调用。为什么 ksoftirqd 不能在我的机器上并行运行?它只是一个内核线程(如 ksoftirqd/2)将使用 100% 的内核,但其他内核线程为 0%
当我使用
cat /proc/interrupts | grep eth1
我可以看到所有的包甚至都分发到了所有的 NIC 队列中。
更新:
这里是100%softirq问题的解决方案,如果你能看懂中文 http://hi.baidu.com/higkoo/item/42ba6c353bc8aed76d15e9c3(请看#7)如果不行,哪个博客说你可以再加一张卡,这个问题将得到解决