Resumo
Hoje utilizo o FreeBSD basicamente na configuração de proxy-cache. E com o aumento do tráfego das interfaces, surgiu a necessidade de começar a controlar melhor a o "balanceamento" de IRQ e processadores. E esta técnica é chamada de CPU Affinity, o que veremos como fazer no FreeBSD logo a seguir.
Introdução
Neste artigo, aprenderemos como definir em qual processador o IRQ será executado.Para isso utilizaremos dos seguintes comandos:
Para listar as CPUs disponíveis utilizaremos:
# cpuset -g
Para descobrir as interrupções IRQ das interfaces geradas pelo FreeBSD no boot utilizaremos:
# devinfo -rv | less
Para verificar o atual consumo de procesamento dos processadores utilizaremos:
# top -P
Para fixar determinada IRQ em um processador específico utilizaremos:
# cpuset -l NUMERO-DO-PROCESSADOR -x NUMERO-DA-IRQ
Mãos-a-obra
Primeiramente, vamos listar nossas CPUs disponíveis:# cpuset -g
pid -1 mask: 0, 1, 2, 3
Veja que no meu caso, tenho disponíveis 4 processadores (ou núcleos) identificados pelo FreeBSD. Numerados de 0 a 3 respectivamente.
Agora que já sabemos quantos processadores temos, vamos listar os IRQs das interfaces.
# devinfo -rv | less
A saída do devinfo -rv é muito extensa, como sei que minhas interfaces de rede são em0 e em1, vou procurar a linha que começa com o nome das mesmas. E logo abaixo dessa linha tenho as interrupções que as interfaces estão utilizando.
em0 pnpinfo vendor=0x8086 device=0x10d3 subvendor=0x15d9 subdevice=0x0605 class=0x020000 at slot=0 function=0
Interrupt request lines:
256
257
258
em1 pnpinfo vendor=0x8086 device=0x10d3 subvendor=0x15d9 subdevice=0x0605 class=0x020000 at slot=0 function=0
Interrupt request lines:
259
260
261
Podemos identificar acima que a interface em0 tem os IRQs 256 257 258 e a interface em1 tem os IRQs 259 260 261.
Agora chegamos a um momento de decisão, temos 6 IRQs para 4 processadores, para isso vamos analisar o consumo atual dos processadores executando...
# top -P
CPU 0: 2.3% user, 0.0% nice, 1.2% system, 3.5% interrupt, 93.0% idle
CPU 1: 2.3% user, 0.0% nice, 0.6% system, 0.0% interrupt, 97.1% idle
CPU 2: 4.1% user, 0.0% nice, 1.7% system, 0.0% interrupt, 94.2% idle
CPU 3: 0.6% user, 0.0% nice, 0.0% system, 0.0% interrupt, 99.4% idle
Com isso, consigo analisar que o processador 0 e o 3 estão sendo menos consumidos, assim posso definir o CPU Affinity nesses dois processadores.
# /usr/bin/cpuset -l 0 -x 256
# /usr/bin/cpuset -l 0 -x 257
# /usr/bin/cpuset -l 0 -x 258
# /usr/bin/cpuset -l 3 -x 259
# /usr/bin/cpuset -l 3 -x 260
# /usr/bin/cpuset -l 3 -x 261
Veja que eu decidi setar os IRQs 256, 257 e 258 no processador 0 e os IRQs 259, 260 e 261 no processador 3.
Feito isto, o CPU Affinity já está ativo e funcionando. Mas no seu próximo reboot essa configuração será perdida.
Para isso, basta adicionar as linhas do /usr/sbin/cpuset acima no seu rc.conf para a mudança ser feita logo no boot do sistema.
Referências
http://www.freebsd.org/cgi/man.cgi?query=devinfo&apropos=0&sektion=0&manpath=FreeBSD+9.1-RELEASE&arch=default&format=htmlhttp://www.freebsd.org/cgi/man.cgi?query=cpuset&sektion=1&apropos=0&manpath=FreeBSD+9.1-RELEASE
http://www.freebsd.org/cgi/man.cgi?query=cpuset&sektion=2&apropos=0&manpath=FreeBSD+9.1-RELEASE
http://segfault.in/2010/09/how-to-set-cpu-affinity-for-a-process-in-freebsd/
http://forums.freebsd.org/showthread.php?t=1386
http://www.bsdinfo.com.br/2012/04/16/cpu-affinity-uma-brincadeira-de-crianca/
Sobre o Autor
Nome: Wenderson SouzaIdade: 31 anos (em 07/09/2013)
Profissão: Gerente de TI
Atuo na área de informática desde 1998.
Trabalho com distribuições Linux desde 2000 e com FreeBSD desde 2011.
Atuo na área de telecomunicações desde 2006.
e-mail: wendersonsouza at gmail.com
msn: wendersonsouza at msn.com
skype: wendersonsouza
Nenhum comentário:
Postar um comentário