[FUG-BR] IRQ affinity com cpuset. Tanto faz hexa ou decimal no parâmetro -l #IRQ?
Marcelo Gondim
gondim em bsdinfo.com.br
Quarta Fevereiro 10 18:52:49 BRST 2016
Em 10/02/2016 16:16, Kalil de Albuquerque Carvalho escreveu:
> Boa tarde a todos.
>
> Acabo de colocar em produção um roteador rodando FreeBSD 10.2-STABLE com Quagga version 0.99.24.1, compilado via Ports. Após a ativação e passado todo o trafego para esta maquina a carga do processador esta no limite do suportado pelo hardware e tudo indica ser problema de IRQ como mostra abaixo:
>
> 45 processes: 2 running, 42 sleeping, 1 waiting
> CPU 0: 0.4% user, 0.0% nice, 0.0% system, 47.5% interrupt, 52.2% idle
> CPU 1: 1.2% user, 0.0% nice, 0.8% system, 43.1% interrupt, 54.9% idle
> CPU 2: 0.0% user, 0.0% nice, 1.2% system, 49.8% interrupt, 49.0% idle
> CPU 3: 0.0% user, 0.0% nice, 0.0% system, 51.4% interrupt, 48.6% idle
> CPU 4: 0.8% user, 0.0% nice, 0.8% system, 40.0% interrupt, 58.4% idle
> CPU 5: 0.0% user, 0.0% nice, 0.8% system, 49.4% interrupt, 49.8% idle
> CPU 6: 0.8% user, 0.0% nice, 0.8% system, 44.7% interrupt, 53.7% idle
> CPU 7: 1.6% user, 0.0% nice, 0.8% system, 43.1% interrupt, 54.5% idle
> Mem: 170M Active, 1118M Inact, 1300M Wired, 1550M Buf, 13G Free
> Swap: 2862M Total, 2862M Free
>
> PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
> 11 root 8 155 ki31 0K 128K RUN 7 4087.9 413.04% [idle]
> 12 root 65 -84 - 0K 1040K WAIT 255 318.8H 383.54% [intr]
> 1841 root 1 35 0 679M 616M select 3 18.7H 17.97% /usr/local/sbin/bgpd -d
> 14 root 1 -16 - 0K 16K - 3 465:17 0.88% [rand_harvestq]
> 1611 root 1 20 0 177M 121M select 2 162:32 0.88% /usr/local/sbin/snmpd -p /var/run/net_snmpd.pid -c /usr/local/etc/snmpd.conf
>
>
> Estava pesquisando formas de usar IRQ affility e me deparei com o cpuset. No manual, e exemplos pela Internet, e sendo colocado a informação da IRQ que o FreeBSD gera coma decimal. Quando faço busca por qual IRQ as minhas interfaces estão usando somente encontro em hexa como mostrado abaixo:
>
> igb4 pnpinfo vendor=0x8086 device=0x1f41 subvendor=0x8086 subdevice=0x1f41 class=0x020000 at slot=20 function=2 handle=\_SB_.PCI0.D010
> Interrupt request lines:
> 0x11c
> 0x11d
> 0x11e
> 0x11f
> 0x120
> 0x121
> 0x122
> 0x123
> 0x124
>
> A minha pergunta é: O comando tem o mesmo efeito rodando no formato hexa ou tenho que converter para decimal?
>
> Example:
>
> Tanto faz?:
>
> #cpuset -l 0x11c -x 1
> ou
> #cpuset -l 284 -x 1
>
Olá Kalil,
Nessa área eu posso ajudar rsrsrs
Primeiramente qual o tráfego que está passando? Olhando o que vc postou
seus cores tem bastante disponibilidade ainda.
Você está sofrendo com o cpuset sem necessidade para achar as
interrupções que as interfaces de rede estão usando use esse comando:
# devinfo -r -v | less
Aí procure a sua interface. Um exemplo abaixo que é a minha ix0:
ix0 pnpinfo vendor=0x8086 device=0x10fb subvendor=0x8086
subdevice=0x000c class=0x020000 at slot=0 function=0
handle=\_SB_.PCI0.BR12.S5F0
Interrupt request lines:
300
301
302
303
304
305
306
307
308
Nesse meu caso vou usar as interrupções de 300 à 308. O -l eu digo o
core e o -x a interrupção. Dependendo do tráfego tem que fazer o cpu
affinity com as interrupções das interfaces senão dá problema e dos
sérios com perdas de pacotes e tudo que tem direito. :)
/usr/bin/cpuset -l 0 -x 300
/usr/bin/cpuset -l 1 -x 301
/usr/bin/cpuset -l 2 -x 302
/usr/bin/cpuset -l 3 -x 303
/usr/bin/cpuset -l 4 -x 304
/usr/bin/cpuset -l 5 -x 305
/usr/bin/cpuset -l 0 -x 306
/usr/bin/cpuset -l 1 -x 307
/usr/bin/cpuset -l 2 -x 308
Esse ai em cima é apenas um exemplo mas existem outros fatores que você
precisa levar em consideração como motherboard, slots PCIe, distribuição
do tráfego de entrada e saída.
[]´s
Gondim
Mais detalhes sobre a lista de discussão freebsd