¿IPTables aprovecha los procesadores multinúcleo?

10

¿Cada paquete es procesado por un núcleo diferente? ¿O es un proceso de subproceso único?

entrampar
fuente
2
No estoy seguro de por qué Chopper3 cerró esta pregunta. Sin embargo, para responderlo: Iptables es realmente el front-end del espacio de usuario para el firewall de Linux que es netfilter. Netfilter es realmente un sistema de ganchos en el núcleo alrededor del procesamiento de paquetes. Cada paquete es procesado por el núcleo activando una interrupción. Si el kernel equilibra las interrupciones en varias CPU depende de la antigüedad. Vea este hilo en StackOverflow al respecto. stackoverflow.com/questions/7467688/…
JakePaulus
+1, porque creo que es una pregunta genuina.
Sachin Divekar
@JakePaulus Este balance de IRQ nunca asignará más de un núcleo a una interrupción. Entonces, ¿nunca tendrá lugar un cambio de núcleos para cada paquete en una sola línea?
Nils
Desde el punto de vista de la memoria caché de la CPU, el cambio de núcleos para una sola conexión no tiene mucho sentido: incluso podría ralentizar las cosas si estos núcleos no comparten la misma memoria caché. ¿Pero por qué haces esta pregunta?
Nils
@Nils Las interrupciones generadas por una interfaz podrían redirigirse a otra CPU menos ocupada. Además, las interfaces múltiples podrían tener sus interrupciones enviadas a diferentes CPU para distribuir la carga. Creo que tiene razón sobre el tráfico de una única interfaz que no se equilibra en las CPU por paquete.
JakePaulus

Respuestas:

6

Iptables es realmente el front-end del espacio de usuario para el firewall de Linux que es netfilter. Netfilter es realmente un sistema de ganchos en el núcleo alrededor del procesamiento de paquetes. Cada paquete es procesado por el núcleo activando una interrupción. Si el kernel equilibra las interrupciones en varias CPU depende de la antigüedad. Vea este hilo en StackOverflow al respecto. /programming/7467688/netfilter-hooks-on-multi-core-system

Como mencionó Nils, estas interrupciones no se equilibrarían por paquete. Se equilibrarían por IRQ (por interfaz) o posiblemente se trasladarían por completo a una CPU diferente si uno estuviera demasiado ocupado.

JakePaulus
fuente
Alternativamente, también podría acelerar sus interrupciones o afinarlas a diferentes núcleos. He visto en algunos casos que afinan todas las interrupciones de la red a pocos núcleos para garantizar la menor reordenación de paquetes y la migración de procesos a través de los núcleos.
chandank