Pular para o conteúdo

irqbalance - Ajuste de Distribuição de Interrupção - Guia de Referência

irqbalance - Ajuste de Distribuição de Interrupção - Guia de Referência

irqbalance é um daemon que distribui interrupções de hardware (IRQs) entre núcleos de CPU. Por padrão, Linux pode encaminhar a maioria de interrupções de uma NIC ou controlador de armazenamento ocupado para CPU 0, tornando esse núcleo um gargalo enquanto outros ficam ociosos. irqbalance monitora carga de interrupção e rebalanceia afinidade IRQ para espalhar o trabalho. Inversamente, para cargas de trabalho críticas de latência com CPUs hand-pinned, frequentemente é deliberadamente desabilitado para que não possa mover interrupções para núcleos isolados.

Instalação

PlataformaComando
Debian/Ubuntusudo apt install irqbalance
Fedora/RHELsudo dnf install irqbalance
Arch Linuxsudo pacman -S irqbalance
Serviçosudo systemctl enable --now irqbalance
Verificarirqbalance --version

Inspecionando Interrupções Primeiro

ComandoMostra
cat /proc/interruptsContagens de interrupção por CPU por dispositivo
watch -n1 'cat /proc/interrupts'Crescimento ao vivo (spot no núcleo quente)
mpstat -I SUM -P ALL 1Interrupções por CPU por segundo
cat /proc/irq/<N>/smp_affinityMáscara de afinidade para um IRQ
cat /proc/irq/<N>/smp_affinity_listMesmo, como lista de CPU
# Um CPU está absorvendo todas as interrupções de NIC?
watch -n1 "grep -E 'eth0|mlx|ens' /proc/interrupts"

Executando o Daemon

ComandoDescrição
sudo systemctl status irqbalanceVerificar que está executando
sudo irqbalance --foregroundExecutar em foreground (debug)
sudo irqbalance --oneshotBalancear uma vez, depois sair
sudo irqbalance --debugDecisões verbose

Opções Principais / Ambiente

ConfiguraçãoEfeito
IRQBALANCE_BANNED_CPUS=<mask>Nunca atribuir IRQs a essas CPUs
--banirq=NExcluir um IRQ específico do balanceamento
--policyscript=PATHScript que decide política por IRQ
--interval=SECONDSIntervalo de rebalanceamento
`—hintpolicy=exactsubset
--powerthresh=NThreshold de consolidação de poder-save

Configuração usualmente vive em /etc/default/irqbalance ou /etc/sysconfig/irqbalance.

# Manter IRQs longe de núcleos isolados 8-15 (máscara para CPUs 8..15)
echo 'IRQBALANCE_BANNED_CPUS=0000ff00' | sudo tee -a /etc/default/irqbalance
sudo systemctl restart irqbalance

Afinidade IRQ Manual (quando você desabilita o daemon)

# Pinar IRQ 42 para CPU 2 (bitmask 0x4)
echo 4 | sudo tee /proc/irq/42/smp_affinity

# Ou por lista de CPU
echo 2 | sudo tee /proc/irq/42/smp_affinity_list
AbordagemUse
irqbalance em execuçãoServidores gerais, carga variável
irqbalance desabilitado + pinning manualCarga de trabalho com baixa-latência, NUMA-pinned, RT
CPUs banidasHíbrido: balancear, mas proteger núcleos isolados

Padrão Crítico de Latência

# Setup de baixa-latência típico: parar o balancer, pinar IRQs de NIC perto do NUMA node da app
sudo systemctl stop irqbalance
sudo systemctl disable irqbalance
# depois definir smp_affinity para os IRQs da NIC em núcleos no mesmo NUMA node

Combine com numactl para que memória da aplicação e manipulação de interrupção vivam no mesmo NUMA node — manipulação de interrupção entre nodes é uma fonte de latência oculta clássica.

Verificando a Mudança

VerificaçãoComando
Spread de interrupçãompstat -I SUM -P ALL 1
Carga de softirqtop%si por CPU
Throughput de redesar -n DEV 1
Contagens por IRQwatch 'cat /proc/interrupts'

Sucesso se parece com contagens de interrupção crescendo uniformemente entre núcleos pretendidos (ou concentrado nos exatos núcleos que você escolheu).

irqbalance vs Ajuste Relacionado

FerramentaPapel
irqbalanceDistribuir IRQs entre CPUs
numactlVincular processo CPU/memória a nós NUMA
cpupowerControle de frequência/estado-ocioso
tunedPerfis em toda-sistema (pode gerenciar irqbalance)
RPS/RFSSteering de pacote lado-software

Recursos