IPTables sfrutta i processori multicore?


10

Ogni pacchetto viene elaborato da un core diverso? O è un processo a thread singolo?


2
Non sono sicuro del motivo per cui Chopper3 abbia chiuso questa domanda. Per rispondere però: Iptables è in realtà solo il front-end dello spazio utenti per il firewall linux che è netfilter. Netfilter è in realtà un sistema di hook nel kernel per l'elaborazione dei pacchetti. Ogni pacchetto viene elaborato dal kernel innescando un interrupt. Il fatto che i saldi del kernel si interrompano su più CPU dipende da quanti anni ha. Vedi questa discussione su StackOverflow al riguardo. stackoverflow.com/questions/7467688/...
JakePaulus

+1, perché penso che sia una vera domanda.
Sachin Divekar,

@JakePaulus Questo bilanciamento IRQ non assegnerà mai più di un core a un interrupt. Quindi un cambio di core per ogni pacchetto su una singola linea non avrà mai luogo?
Nils,

Dal punto di vista della cache della memoria della CPU, cambiare i core per una singola connessione non ha molto senso: rallenterebbe anche le cose se questi core non condividessero la stessa cache. Ma perché fai questa domanda?
Nils,

@Nils Gli interrupt generati da un'interfaccia potrebbero essere reindirizzati a un'altra CPU, meno occupata. Inoltre, a più interfacce potrebbero essere inviati i loro interrupt a CPU diverse per distribuire il carico. Penso che tu abbia ragione sul traffico da un'unica interfaccia che non viene bilanciato tra le CPU in base al pacchetto.
JakePaulus,

Risposte:


6

Iptables è davvero solo il front-end dello spazio utenti per il firewall linux che è netfilter. Netfilter è in realtà un sistema di hook nel kernel per l'elaborazione dei pacchetti. Ogni pacchetto viene elaborato dal kernel innescando un interrupt. Il fatto che i saldi del kernel si interrompano su più CPU dipende da quanti anni ha. Vedi questa discussione su StackOverflow al riguardo. /programming/7467688/netfilter-hooks-on-multi-core-system

Come menzionato da Nils, questi interrupt non sarebbero bilanciati in base al pacchetto. Sarebbero bilanciati per IRQ (per interfaccia) o eventualmente spostati del tutto su CPU diverse se uno diventasse troppo occupato.


in alternativa, puoi anche limitare i tuoi interrupt o affinarli a diversi core. Ho visto in alcuni casi, che affondano tutti gli interrupt di rete a pochi core per garantire il riordino dei pacchetti e l'elaborazione della migrazione tra i core.
chandank,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.