Le problème ne vient pas de netfilter, c'est la façon dont votre noyau gère les interruptions.
Par défaut, les anciennes versions d'APIC délivrent toutes les interruptions au CPU0.
Vous pouvez vérifier si c'est votre problème avec :
cat /proc/interrupts
Vous pouvez voir si les interruptions de la carte réseau (et rappelez-vous que le crochet netfilter sont exécutés sur un SoftIRQ RX ou TX) sont gérées par un seul noyau.
Dans les nouvelles versions du noyau, il existe une option de compilation (CONFIG_HOTPLUG_CPU), qui équilibre les IRQ sur les cœurs existants.
Ou si vous ne pouvez pas mettre à jour la version ou recompiler le noyau, vous pouvez mettre à jour l'affinité SMP (avec un masque qui gère plus qu'un CPUid) pour essayer d'équilibrer les différents cœurs. Ou allez dans ACPI et la configuration appropriée (Ici, je ne peux pas aider plus).
Vous trouverez ici tout ce qui concerne ce genre de choses (affinité SMP et gestion appropriée des IRQ)
Un problème peut être que votre carte réseau n'a qu'une seule interruption. Certains NICS plus récents ont plusieurs interruptions (appelées NIC multifiles d'attente) permettant de répartir la charge sur plusieurs threads.
Pour les cartes réseau à file d'attente unique, certaines fonctionnalités logicielles sont disponibles dans les nouveaux noyaux que vous pouvez configurer pour répartir la charge. Voir par ex. http://www.spinics.net/lists/linux-doc/msg02975.html pour un aperçu de ce qui est disponible.