Nutzt IPTables Multicore-Prozessoren?

10

Wird jedes Paket von einem anderen Kern verarbeitet? Oder ist es ein Single-Thread-Prozess?

verstricken
quelle
2
Ich bin mir nicht sicher, warum Chopper3 diese Frage geschlossen hat. Um es jedoch zu beantworten: Iptables ist eigentlich nur das Userspace-Frontend für die Linux-Firewall, die Netfilter ist. Netfilter ist wirklich ein System von Hooks im Kernel um die Paketverarbeitung. Jedes Paket wird vom Kernel durch Auslösen einer Unterbrechung verarbeitet. Ob Ihr Kernel Interrupts über mehrere CPUs verteilt, hängt davon ab, wie alt er ist. Siehe diesen Thread auf StackOverflow darüber. stackoverflow.com/questions/7467688/…
JakePaulus
+1, weil ich denke, dass es eine echte Frage ist.
Sachin Divekar
@JakePaulus Dieser IRQ-Ausgleich weist einem Interrupt niemals mehr als einen Kern zu. Ein Kernwechsel für jedes Paket in einer einzelnen Leitung wird also niemals stattfinden?
Nils
Aus Sicht des CPU-Speichercaches ist das Wechseln der Kerne für eine einzelne Verbindung nicht sehr sinnvoll - es würde wahrscheinlich sogar die Dinge verlangsamen, wenn diese Kerne nicht denselben Cache verwenden. Aber warum stellst du diese Frage?
Nils
@Nils Die von einer Schnittstelle erzeugten Interrupts können auf eine andere, weniger ausgelastete CPU umgeleitet werden. Außerdem können die Interrupts mehrerer Schnittstellen an verschiedene CPUs gesendet werden, um die Last zu verteilen. Ich denke, Sie haben Recht damit, dass der Datenverkehr von einer einzelnen Schnittstelle nicht pro Paket auf CPUs verteilt wird.
JakePaulus

Antworten:

6

Iptables ist eigentlich nur das Userspace-Frontend für die Linux-Firewall, die Netfilter ist. Netfilter ist wirklich ein System von Hooks im Kernel um die Paketverarbeitung. Jedes Paket wird vom Kernel durch Auslösen einer Unterbrechung verarbeitet. Ob Ihr Kernel Interrupts über mehrere CPUs verteilt, hängt davon ab, wie alt er ist. Siehe diesen Thread auf StackOverflow darüber. /programming/7467688/netfilter-hooks-on-multi-core-system

Wie Nils erwähnte, würden diese Interrupts nicht pro Paket ausgeglichen. Sie würden pro IRQ (pro Schnittstelle) ausgeglichen oder möglicherweise ganz auf eine andere CPU verschoben, wenn eine zu beschäftigt wäre.

JakePaulus
quelle
Alternativ können Sie Ihre Interrupts auch drosseln oder auf verschiedene Kerne übertragen. Ich habe in einigen Fällen gesehen, dass alle Netzwerk-Interrupts auf wenige Kerne übertragen werden, um die geringste Neuordnung von Paketen und die Prozessmigration zwischen Kernen sicherzustellen.
Chandank