Problém není v netfilteru, ale ve způsobu, jakým vaše jádro spravuje přerušení.
Ve výchozím nastavení staré verze APIC doručují všechna přerušení do CPU0.
Můžete zkontrolovat, zda se jedná o váš problém:
cat /proc/interrupts
Můžete vidět, zda přerušení NIC (a nezapomeňte, že hák netfilter se provádí přes RX nebo TX SoftIRQ) jsou zpracovávána jedním jádrem.
V novějších verzích jádra existuje možnost kompilace (CONFIG_HOTPLUG_CPU), která vyrovnává IRQ nad stávajícími jádry.
Nebo pokud nemůžete aktualizovat verzi nebo překompilovat jádro, můžete aktualizovat afinitu SMP (s maskou, která zvládne více než CPUid), abyste se pokusili vyvážit různá jádra. Nebo přejděte do ACPI a správné konfigurace (zde nemohu více pomoci).
Zde najdete vše o těchto věcech (spřažení SMP a správné zpracování IRQ)
Problém může být v tom, že vaše NIC má pouze jedno přerušení. Některé novější NICS mají několik přerušení (tzv. multiqueue NIC), což umožňuje rozložení zátěže mezi mnoho vláken.
Pro síťové karty s jednou frontou jsou v novějších jádrech dostupné některé softwarové funkce, které můžete nakonfigurovat tak, aby se zátěž rozložila. Viz např. http://www.spinics.net/lists/linux-doc/msg02975.html pro přehled toho, co je k dispozici.