O IPTables tira proveito dos processadores multicore?

10

Cada pacote é processado por um núcleo diferente? Ou é um processo de thread único?

prender
fonte
2
Não sei por que o Chopper3 encerrou esta pergunta. Para responder, no entanto: Iptables é realmente apenas o front end do espaço de usuário para o firewall linux, que é netfilter. O Netfilter é realmente um sistema de ganchos no kernel em torno do processamento de pacotes. Cada pacote é processado pelo kernel, acionando uma interrupção. Se o saldo do seu kernel é interrompido em várias CPUs, depende da idade. Veja este tópico no StackOverflow sobre isso. stackoverflow.com/questions/7467688/...
JakePaulus
+1, porque acho que é uma pergunta genuína.
Sachin Divekar
@JakePaulus Esse balanceamento de IRQ nunca atribuirá mais de um núcleo a uma interrupção. Portanto, nunca haverá uma troca de núcleos para cada pacote em uma única linha?
Nils
Do ponto de vista do cache da memória da CPU, alternar núcleos para uma única conexão não faz muito sentido - seria propenso a desacelerar as coisas se esses núcleos não compartilharem o mesmo cache. Mas por que você faz essa pergunta?
Nils
@Nils As interrupções geradas por uma interface podem ser redirecionadas para outra CPU menos ocupada. Além disso, várias interfaces podem ter suas interrupções enviadas para diferentes CPUs para espalhar a carga. Eu acho que você está certo sobre o tráfego de uma única interface não estar equilibrado entre as CPUs por pacote.
JakePaulus

Respostas:

6

O Iptables é realmente apenas o front end do espaço de usuário para o firewall linux, que é netfilter. O Netfilter é realmente um sistema de ganchos no kernel em torno do processamento de pacotes. Cada pacote é processado pelo kernel, acionando uma interrupção. Se o saldo do seu kernel é interrompido em várias CPUs, depende da idade. Veja este tópico no StackOverflow sobre isso. /programming/7467688/netfilter-hooks-on-multi-core-system

Como Nils mencionou, essas interrupções não seriam equilibradas por pacote. Eles seriam balanceados por IRQ (por interface) ou, possivelmente, movidos para uma CPU diferente, se alguém ficasse muito ocupado.

JakePaulus
fonte
Como alternativa, você também pode limitar suas interrupções ou afiná-las a diferentes núcleos. Eu já vi em alguns casos, eles afinam todas as interrupções de rede em poucos núcleos para garantir o mínimo de reordenamento de pacotes e migração de processos entre núcleos.
chandank