[GTER] RES: Quagga

Breno Lastra breno.lastra at locaweb.com.br
Tue Mar 31 20:06:34 -03 2009


Pessoal,

A algum tempo atrás fiz alguns testes com afinidade de placa de rede e processadores. Cheguei a algumas conclusões que estão abaixo.

Para escolher quais CPUs a interface vai utilizar para processar o pacote, é necessário utilizar o parâmetro smp_affinity que se encontra dentro do /proc.

Por exemplo, no caso abaixo, para travar a eth1 na cpu0, eth2 na cpu1 e assim por diante:

echo 1 > /proc/irq/1257/smp_affinity
echo 2 > /proc/irq/1251/smp_affinity
echo 4 > /proc/irq/1245/smp_affinity
echo 8 > /proc/irq/1243/smp_affinity

Segue uma fonte de estudo sobre isso: http://www.cs.uwaterloo.ca/~brecht/servers/apic/SMP-affinity.txt


É possível utilizar mais de um CPU por interface de rede, porém, isso pode causar perda de performance, ao invés de ganho. A não ser que, em servidores multiprocessados, você garanta que os cores que a interface esteja utilizando são todos do mesmo processador.

Para duas interfaces de rede, em servidor de 2 processadores físicos, utilizando todos os cores, recomendo os comandos abaixo:

echo 55 > /proc/irq/`cat /proc/interrupts | fgrep eth0 | cut -f1 -d:`/smp_affinity
echo aa > /proc/irq/`cat /proc/interrupts | fgrep eth1 | cut -f1 -d:`/smp_affinity


-----Original Message-----
From: gter-bounces at eng.registro.br [mailto:gter-bounces at eng.registro.br] On Behalf Of Antonio Carlos Pina
Sent: terça-feira, 31 de março de 2009 18:11
To: juliano at cyberweb.com.br; Grupo de Trabalho de Engenharia e Operacao de Redes
Subject: Re: [GTER] RES: Quagga

Entretanto, Juliano, Quando você distribui as interrupções, o processo de
salvar o contexto impacta imensamente na performance, fora detalhes como
cache de código.

Travando o affinity a performance é muito superior.

Abs

2009/3/31 Juliano Primavesi - Cyberweb Networks <juliano at cyberweb.com.br>

> Olha
>
> Por experiencia propria, cada nucleo nao cuida de uma porta especifica, mas
> o fato de ser multi-core, faz com que ele distribua as interrupções -> pelo
> menos no Linux. Ex:
>
> cat /proc/interrupts  | egrep '(CPU|eth)'
>
>          CPU0       CPU1       CPU2       CPU3
> 1243:    3139120    3144146    3139718    3141994   PCI-MSI-edge      eth4
> 1245:          3          1          0          1   PCI-MSI-edge      eth3
> 1246:  587740232  588829200  587764276  588764654   PCI-MSI-edge
>  eth3-rx3
> 1247:  583812591  584894670  583790078  584773312   PCI-MSI-edge
>  eth3-rx2
> 1248:  578423426  579435501  578347717  579388820   PCI-MSI-edge
>  eth3-rx1
> 1249:  587423840  588457221  587389245  588420938   PCI-MSI-edge
>  eth3-rx0
> 1250: 3497023358 3487970919 3497170186 3489171904   PCI-MSI-edge
>  eth3-tx0
> 1251:          1          0          2          3   PCI-MSI-edge      eth2
> 1252: 1106673229 1108477869 1106661087 1108350283   PCI-MSI-edge
>  eth2-rx3
> 1253: 1104001975 1105833067 1103972047 1105684514   PCI-MSI-edge
>  eth2-rx2
> 1254: 1117261860 1119095317 1117239069 1119004270   PCI-MSI-edge
>  eth2-rx1
> 1255: 1116480078 1118314060 1116423970 1118218673   PCI-MSI-edge
>  eth2-rx0
> 1256: 4231997586 4222764274 4232315360 4222978323   PCI-MSI-edge
>  eth2-tx0
> 1257:          1          0          3          3   PCI-MSI-edge      eth1
> 1258: 1847792271 1851556017 1847647345 1851241045   PCI-MSI-edge
>  eth1-rx3
> 1259: 1834505847 1838190091 1834391331 1837924049   PCI-MSI-edge
>  eth1-rx2
> 1260: 1828282947 1831951105 1828152953 1831674900   PCI-MSI-edge
>  eth1-rx1
> 1261: 1836098669 1839761175 1836001388 1839539093   PCI-MSI-edge
>  eth1-rx0
> 1262:   64346955   56302963   64592694   56708652   PCI-MSI-edge
>  eth1-tx0
>
> Juliano
>
> Antonio Carlos Pina escreveu:
>
>> SMP não é realmente essencial, mas SMP affinity em um servidor permite que
>> cada núcleo cuide de uma "porta ethernet" independente, trazendo o
>> pc-router
>> para um outro nível de performance.
>>
>> Abs
>> Pina
>>
>>
>> Mais uma vez: SMP nao e' essencial para um roteador. Hoje em dia, ate' a
>>
>>
>>> pilha
>>> tcp/ip pode rodar diretamente nas placas de rede, sem muita interferencia
>>> do
>>> host processor.
>>>
>>>
>>>
>>>
>> --
>> gter list    https://eng.registro.br/mailman/listinfo/gter
>>
>>
> --
> gter list    https://eng.registro.br/mailman/listinfo/gter
>
--
gter list    https://eng.registro.br/mailman/listinfo/gter






More information about the gter mailing list