У меня есть сетевая карта с несколькими очередями на 4-ядерной машине Intel, и я привязываю каждую очередь сетевой карты к ядру процессора (установить /proc/irq/xxx/smp_affinity). Скажем, очередь0 на ядре0, очередь1 на ядре1 и так далее.
Говорят, что softirq будет вызываться на том же ядре, где произошло аппаратное прерывание. Почему ksoftirqd не может работать параллельно на моей машине? Это только один поток ядра (например, ksoftirqd/2), который будет использовать 100% ядра, а другие — 0%.
когда я использую
cat /proc/interrupts | grep eth1
Я вижу, что все пакеты даже распределены по всем очередям NIC.
Обновить:
Вот решение проблемы 100% softirq, если вы умеете читать по-китайски http://hi.baidu.com/higkoo/item/42ba6c353bc8aed76d15e9c3 (см. № 7), если нет, в каком блоге говорится, что вы можете добавить другую карту, эта проблема будет решена