[FUG-BR] IRQ affinity com cpuset. Tanto faz hexa ou decimal no parâmetro -l #IRQ?

Marcelo Gondim gondim em bsdinfo.com.br
Quinta Fevereiro 11 10:03:36 BRST 2016


Em 11/02/2016 09:24, Kalil de Albuquerque Carvalho escreveu:
>
>
>
>
> On Wednesday, February 10, 2016 5:52 PM, Marcelo Gondim <gondim em bsdinfo.com.br> wrote:
> 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
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>
> Bom dia Gondim.
>
> Muito obrigado pela orientação. Porem como sou novato no uso do FreeBSD estou confuso quando a saia do top, achava que a interpretação era igual ao GNU/Linux. Digo isso porque a carga esta, na media, em 9 enquanto temos apenas oito núcleos. Analisando a saída do comando o que me preocupou foi a informação "interrupt" o qual me levou a acreditar que tínhamos um problema nas IRQ's. Você perguntou qual o nosso trafego, hoje gira em torno de 1.1Gbps. Quanto ao comando #devinfo -r -v | less o que é apresentado o seguinte:
>
> 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
>
>
> ainda em hexa. Posso seguir o seu exemplo e passar as interrupções desta forma ou devo converte-las em decimal?
>
> Atenciosamente,
Rapaz que interface de rede é essa que você tá usando? Eu sempre usei 
Intel e Broadcom e nunca aconteceu isso comigo rsrsrsr

Como você já tem um tráfego de 1.1Gbps seria interessante partir pra um 
LACP ou uma interface de 10GbE.
Aqui eu uso a Intel X520-SR2 que são 2 portas ópticas de 10GbE.

Quando você faz um: top -PSH   as interrupções aparecem também em hexa?

Agora muito estranho estar mostrando em hexa.

[]´s
Gondim



Mais detalhes sobre a lista de discussão freebsd