{"id":21042,"date":"2026-08-27T08:32:23","date_gmt":"2026-08-27T06:32:23","guid":{"rendered":"https:\/\/webhosting.de\/irq-balance-linux-konfigurieren-server\/"},"modified":"2026-08-27T08:32:23","modified_gmt":"2026-08-27T06:32:23","slug":"configurar-o-irq-balance-no-linux-num-servidor","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/irq-balance-linux-konfigurieren-server\/","title":{"rendered":"Configurar corretamente o IRQ Balance no Linux: guia pr\u00e1tico"},"content":{"rendered":"<p>No Linux, o IRQ Balance controla a distribui\u00e7\u00e3o das interrup\u00e7\u00f5es de hardware pelos n\u00facleos da CPU e, assim, determina se a carga de rede \u00e9 distribu\u00edda de forma uniforme ou se alguns n\u00facleos ficam sobrecarregados. Vou mostrar-te como utilizar o irqbalance de forma espec\u00edfica, quando devo mudar para a afinidade manual de IRQ e quais as configura\u00e7\u00f5es a utilizar em servidores com elevada <strong>carga da rede<\/strong> o que realmente importa.<\/p>\n\n<h2>Pontos centrais<\/h2>\n<p>Antes de entrar em pormenores, vou resumir as decis\u00f5es mais importantes que me t\u00eam ajudado de forma fi\u00e1vel em projetos com elevada carga de E\/S. Considero que a distribui\u00e7\u00e3o autom\u00e1tica atrav\u00e9s do irqbalance \u00e9 um bom ponto de partida; avalio o efeito e fa\u00e7o ajustes seletivos. No caso de cargas de trabalho determin\u00edsticas, atribuo manualmente IRQs espec\u00edficas a determinados n\u00facleos e excluo as restantes CPUs da distribui\u00e7\u00e3o autom\u00e1tica. Tenho em conta a proximidade NUMA numa fase inicial, pois reduz a lat\u00eancia e garante o d\u00e9bito. Com uma monitoriza\u00e7\u00e3o clara, deteto mais rapidamente os estrangulamentos e regul\u00e1-los sem <strong>Riscos<\/strong>.<\/p>\n<p>Esta lista mostra-te os aspetos a que presto especial aten\u00e7\u00e3o durante a configura\u00e7\u00e3o:<\/p>\n<ul>\n  <li><strong>Autom\u00e1tico<\/strong> Primeiro: ativar o irqbalance e medir o efeito<\/li>\n  <li><strong>afinidade<\/strong> de forma espec\u00edfica: fixar IRQs cr\u00edticas, reduzir o jitter<\/li>\n  <li><strong>CPUs proibidas<\/strong>: Manter n\u00facleos livres para os App Threads<\/li>\n  <li><strong>NUMA<\/strong> Nota: manter os IRQs pr\u00f3ximos do n\u00f3 de mem\u00f3ria<\/li>\n  <li><strong>Monitoriza\u00e7\u00e3o<\/strong>: Verificar \/proc\/interrupts e as lat\u00eancias<\/li>\n<\/ul>\n\n<h2>No\u00e7\u00f5es b\u00e1sicas sobre IRQ explicadas de forma sucinta<\/h2>\n<p>Um pedido de interrup\u00e7\u00e3o (IRQ) \u00e9 um sinal atrav\u00e9s do qual o hardware transfere trabalho para a CPU, interrompendo assim uma tarefa em execu\u00e7\u00e3o. Se chegarem demasiados sinais destes ao mesmo n\u00facleo, a carga de trabalho nesse n\u00facleo aumenta e o tempo de resposta torna-se lento, enquanto outros n\u00facleos permanecem ociosos; \u00e9 exatamente isso que pretendo com <strong>Distribui\u00e7\u00e3o<\/strong> evitar. O irqbalance distribui estes IRQs dinamicamente por v\u00e1rios n\u00facleos e avalia o estado do sistema a intervalos regulares. Para tal, come\u00e7o por ver <code>\/proc\/interrup\u00e7\u00f5es<\/code> e vejo nas colunas quantas IRQs chegam por cada CPU. Se alguma coluna ficar com valores excessivamente elevados, fa\u00e7o um ajuste ativo e, assim, reduzo as <strong>Pontos de acesso<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-irq-guide-4513.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Distribui\u00e7\u00e3o autom\u00e1tica com o irqbalance<\/h2>\n<p>Nas distribui\u00e7\u00f5es modernas, inicio com o servi\u00e7o irqbalance, que, por predefini\u00e7\u00e3o, ajusta periodicamente a distribui\u00e7\u00e3o de IRQ. Ativo-o manualmente com <code>systemctl enable --now irqbalance<\/code> e verifico o estado antes de avan\u00e7ar mais; assim, aproveito o que j\u00e1 existe <strong>Autom\u00e1tico<\/strong>. Os ficheiros de configura\u00e7\u00e3o encontram-se, dependendo do sistema, em <code>\/etc\/sysconfig\/irqbalance<\/code> ou <code>\/etc\/default\/irqbalance<\/code>, onde posso excluir CPUs ou IRQs. A vari\u00e1vel \u00e9 particularmente \u00fatil <code>IRQBALANCE_BANNED_CPUS<\/code> como m\u00e1scara de 64 bits, para reservar n\u00facleos espec\u00edficos para aplica\u00e7\u00f5es. Quem quiser aprofundar-se em exemplos pr\u00e1ticos, encontrar\u00e1 aqui uma introdu\u00e7\u00e3o sucinta \u00e0 <a href=\"https:\/\/webhosting.de\/pt\/servidor-irq-balancing-otimizacao-do-desempenho-da-rede-centro-de-dados\/\">Desempenho da rede<\/a>, que costumo mencionar em workshops e aplicar em projetos.<\/p>\n\n<h2>Implementar com seguran\u00e7a a afinidade manual de IRQ<\/h2>\n<p>Quando as cargas de trabalho s\u00e3o muito sens\u00edveis ao jitter ou quando \u00e9 necess\u00e1rio que determinados n\u00facleos permane\u00e7am dispon\u00edveis exclusivamente para processos do espa\u00e7o do utilizador, defino manualmente a afinidade de IRQ. Para tal, escrevo m\u00e1scaras de bits de acordo com <code>\/proc\/irq\/<em>N\u00daMERO-DE-IRQ<\/em>\/smp_affinity<\/code> e definir em que n\u00facleos uma interrup\u00e7\u00e3o pode ser executada; isto permite uma gest\u00e3o plane\u00e1vel <strong>Conduta<\/strong>. Primeiro, determino os n\u00fameros de IRQ relevantes com <code>grep<\/code> em <code>\/proc\/interrup\u00e7\u00f5es<\/code>. No caso dos dispositivos de rede, costumo atribuir as filas RX\/TX a n\u00facleos pr\u00f3ximos dos threads das aplica\u00e7\u00f5es, mantendo os outros n\u00facleos livres. Este breve artigo re\u00fane boas explica\u00e7\u00f5es sobre esta abordagem <a href=\"https:\/\/webhosting.de\/pt\/servidor-irq-afinidade-multicore-rede-otimizacao-desempenho\/\">Guia de Afinidade de IRQ<\/a>, que utilizo regularmente como ponto de partida.<\/p>\n<p>A tabela seguinte apresenta m\u00e1scaras de bits comuns e o seu significado. Utilizo estes exemplos para definir configura\u00e7\u00f5es de forma r\u00e1pida e com poucos erros e, posteriormente, verificar o efeito com <code>\/proc\/interrup\u00e7\u00f5es<\/code> para <strong>verificar<\/strong>.<\/p>\n<table>\n  <thead>\n    <tr>\n      <th>Objetivo<\/th>\n      <th>Exemplo de m\u00e1scara (hex)<\/th>\n      <th>n\u00facleos<\/th>\n      <th>Comente<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Apenas CPU0<\/td>\n      <td>0x1<\/td>\n      <td>0<\/td>\n      <td>Teste simples, baixo <strong>dispers\u00e3o<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>Apenas CPU1<\/td>\n      <td>0x2<\/td>\n      <td>1<\/td>\n      <td>Separa os IRQs da CPU0, reduz <strong>Interfer\u00eancia<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>CPU0\u2013CPU1<\/td>\n      <td>0x3<\/td>\n      <td>0\u20131<\/td>\n      <td>Distribu\u00eddo por dois n\u00facleos, leve <strong>Al\u00edvio<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>CPU2\u2013CPU3<\/td>\n      <td>0xC<\/td>\n      <td>2-3<\/td>\n      <td>\u00datil quando 0\u20131 para threads de aplica\u00e7\u00f5es <strong>livre<\/strong> ficar<\/td>\n    <\/tr>\n    <tr>\n      <td>CPU0\u2013CPU3<\/td>\n      <td>0xF<\/td>\n      <td>0\u20133<\/td>\n      <td>Distribui\u00e7\u00e3o ampla por 4 n\u00facleos, mistura <strong>Carga<\/strong><\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/IRQ_Linux_Konferenz_3235.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Medi\u00e7\u00e3o: Ler corretamente o ficheiro \/proc\/interrupts<\/h2>\n<p>Abro o ficheiro <code>\/proc\/interrup\u00e7\u00f5es<\/code> e vejo, por linha, um IRQ e, por coluna, os contadores de cada CPU; isso revela imediatamente os desequil\u00edbrios <strong>vis\u00edvel<\/strong>. Quando uma coluna cresce significativamente mais r\u00e1pido do que as outras, a carga concentra-se nessa coluna. Nesse caso, verifico qual o controlador envolvido e se o RSS\/RPS j\u00e1 est\u00e1 a distribuir a carga. Al\u00e9m disso, inicio temporariamente o irqbalance em primeiro plano com sa\u00edda de depura\u00e7\u00e3o, para compreender as suas decis\u00f5es e evitar erros de avalia\u00e7\u00e3o. Ap\u00f3s cada altera\u00e7\u00e3o, verifico novamente os contadores e me\u00e7o a lat\u00eancia sob carga, para poder comprovar os efeitos e evitar <strong>Riscos<\/strong> pode evitar.<\/p>\n\n<h2>Isolamento da CPU e m\u00e1scaras de exclus\u00e3o<\/h2>\n<p>Eu fixo <code>IRQBALANCE_BANNED_CPUS<\/code>, para excluir sistematicamente determinados n\u00facleos da distribui\u00e7\u00e3o autom\u00e1tica; assim, libero recursos para os threads das aplica\u00e7\u00f5es. Nas configura\u00e7\u00f5es mais recentes, utilizo tamb\u00e9m <code>IRQBALANCE_BANNED_IRQS<\/code>, quando se pretende que determinados dispositivos funcionem de forma aut\u00f3noma num n\u00facleo; isso reduz as interfer\u00eancias em sistemas sens\u00edveis <strong>Cargas de trabalho<\/strong>. Em cen\u00e1rios de baixa lat\u00eancia, desativo o irqbalance de forma seletiva e atribuo os IRQs de forma est\u00e1tica, para que n\u00e3o haja qualquer redistribui\u00e7\u00e3o a interferir. Quem quiser compreender melhor a atribui\u00e7\u00e3o da CPU no tratamento de interrup\u00e7\u00f5es encontrar\u00e1 informa\u00e7\u00f5es \u00fateis sobre o <a href=\"https:\/\/webhosting.de\/pt\/tratamento-de-interrupcoes-no-servidor-otimizacao-do-desempenho-do-cpu-7342\/\">Gest\u00e3o de interrup\u00e7\u00f5es<\/a> nos servidores. O importante \u00e9: primeiro medir, depois definir e voltar a verificar o efeito, para evitar surpresas no <strong>Funcionamento<\/strong> a evitar.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/irq-balance-linux-guide-setup-3458.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Aspectos NUMA e proximidade<\/h2>\n<p>Em sistemas NUMA, procuro direcionar as IRQs, sempre que poss\u00edvel, para os n\u00facleos do n\u00f3 NUMA em cuja mem\u00f3ria se encontram os dados em quest\u00e3o; isso reduz a lat\u00eancia e aumenta <strong>Rendimento<\/strong>. Combino isto com a afinidade da CPU para a aplica\u00e7\u00e3o, para que os threads e as interrup\u00e7\u00f5es sejam executados localmente entre si. O irqbalance funciona bem em NUMA, mas, se necess\u00e1rio, fa\u00e7o ajustes com m\u00e1scaras de proibi\u00e7\u00e3o. \u00c9 fundamental n\u00e3o distribuir a carga por v\u00e1rios n\u00f3s, se for poss\u00edvel mant\u00ea-la localmente. Quem mantiver essa proximidade obt\u00e9m tempos de resposta constantes e poupa valiosos <strong>Cache<\/strong>-Recursos.<\/p>\n\n<h2>Curso intensivo sobre redes: RSS, RPS\/RFS e XPS<\/h2>\n<p>Antes de ajustar com precis\u00e3o as m\u00e1scaras de IRQ, verifico as funcionalidades da placa de rede, como o RSS, bem como os mecanismos do kernel, como o RPS\/RFS e o XPS; estes influenciam fortemente a distribui\u00e7\u00e3o dos pacotes. O RSS j\u00e1 distribui as interrup\u00e7\u00f5es de fila por v\u00e1rios n\u00facleos, enquanto o RPS\/RFS molda o processamento no kernel e o XPS molda as rotas de transmiss\u00e3o; isto evita <strong>Pontos de acesso<\/strong>. Ajusto estes mecanismos de acordo com a minha estrat\u00e9gia de IRQ, para que n\u00e3o entrem em conflito. Se as filas, as afinidades de IRQ e a afinidade das aplica\u00e7\u00f5es estiverem bem coordenadas, a E\/S de rede funciona de forma significativamente mais fluida. Depois, volto a medir sob carga real, antes de prosseguir com <strong>Passos<\/strong> coloque.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/irq_balance_linux_guide_7163.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>MSI-X, Multi-Queue e um layout de fila organizado<\/h2>\n<p>Muitas placas de rede de 10\u2013100G utilizam o MSI-X e disponibilizam vetores de interrup\u00e7\u00e3o pr\u00f3prios para cada fila de RX\/TX. Come\u00e7o por verificar com <code>ethtool -l eth0<\/code> (n\u00famero de canais) e <code>\/proc\/interrup\u00e7\u00f5es<\/code>, quantas filas est\u00e3o realmente ativas e quais s\u00e3o os seus nomes (por exemplo,. <code>eth0\u2011TxRx\u20110<\/code>, <code>eth0\u2011TxRx\u20111<\/code>). O objetivo \u00e9 ajustar o n\u00famero de filas ao n\u00famero de n\u00facleos utilizados por n\u00f3 NUMA e fix\u00e1-las de forma determin\u00edstica. Com <code>ethtool -L eth0 combined N<\/code> Defino o n\u00famero de filas; depois, organizo os IRQs resultantes atrav\u00e9s de <code>smp_affinity<\/code> nos n\u00facleos adequados. Tenho o cuidado de colocar os pares RX\/TX da mesma fila no mesmo n\u00facleo ou, pelo menos, no mesmo socket, para que <strong>Localiza\u00e7\u00e3o da cache<\/strong> aplica-se. Importante: verifico as altera\u00e7\u00f5es no n\u00famero de filas e na afinidade diretamente em <code>\/proc\/interrup\u00e7\u00f5es<\/code> e com um breve teste de carga (pps\/Throughput), antes de continuar a otimizar.<\/p>\n\n<h2>Coalesc\u00eancia de interrup\u00e7\u00f5es e or\u00e7amento NAPI<\/h2>\n<p>Sobretudo quando as taxas de pacotes s\u00e3o elevadas, os valores de coalesc\u00eancia influenciam a efic\u00e1cia da minha estrat\u00e9gia de IRQ. Com <code>ethtool -c eth0<\/code> vejo se <code>rx-usecs<\/code> e <code>rx-frames<\/code> est\u00e3o definidos. Uma maior coalesc\u00eancia reduz o n\u00famero de IRQs por segundo e poupa CPU, mas aumenta a lat\u00eancia e o jitter. Fa\u00e7o ajustes cautelosos: pequenos passos, medindo sempre (lat\u00eancia p95\/p99 e carga da CPU). Do lado do remetente, tem efeito <code>tx-usecs<\/code> de forma anal\u00f3gica. Al\u00e9m disso, adapto o comportamento do NAPI atrav\u00e9s de <code>net.core.netdev_budget<\/code> e <code>net.core.netdev_budget_usecs<\/code>, quando <strong>NET_RX<\/strong> come\u00e7a a acumular-se nos SoftIRQs. Se as perdas aumentarem em <code>\/proc\/net\/softnet_stat<\/code>, a t\u00edtulo de teste, aumentei o or\u00e7amento ou distribui as filas RX de forma mais coerente; se a lat\u00eancia do sistema se tornar excessiva, reduzo novamente. Tenho em conta o GRO\/LRO e o TSO\/GSO em conjunto: uma agrega\u00e7\u00e3o excessiva reduz a carga de IRQ, mas pode gerar picos de lat\u00eancia \u2014 compenso-os com o perfil da aplica\u00e7\u00e3o.<\/p>\n\n<h2>Ler SoftIRQs de forma transparente<\/h2>\n<p>Para al\u00e9m dos HardIRQs, sou eu que decido a carga nos SoftIRQs. Com <code>cat \/proc\/softirqs<\/code> Observo <strong>NET_RX<\/strong> e <strong>NET_TX<\/strong> por CPU; se determinadas colunas se destacarem, acaba por haver demasiado trabalho nessas colunas nos threads do ksoftirqd. Um <code>top -H<\/code> mostra-me rapidamente quais <code>ksoftirqd\/N<\/code> Carregue os n\u00facleos. Eu fa\u00e7o medi\u00e7\u00f5es mais profundas com <code>perf top<\/code> ou curtas <code>registo de desempenho<\/code> Executar para identificar pontos cr\u00edticos no controlador ou no processamento da pilha. Quando os threads ksoftirqd se tornam ativos (em vez do processamento imediato no contexto da IRQ), a lat\u00eancia aumenta frequentemente de forma significativa; respondo com uma melhor distribui\u00e7\u00e3o da fila, um maior or\u00e7amento NAPI ou a atribui\u00e7\u00e3o espec\u00edfica de CPU aos threads ksoftirqd afetados atrav\u00e9s de <code>taskset -pc<\/code>. Importante: estou a documentar estas altera\u00e7\u00f5es porque t\u00eam um efeito subtil e, em caso de d\u00favida, preciso de poder reverter rapidamente as altera\u00e7\u00f5es.<\/p>\n\n<h2>Utilizar corretamente o SMT\/Hyper-Threading e a topologia<\/h2>\n<p>Com o SMT ativo, partilho um n\u00facleo f\u00edsico com duas CPUs l\u00f3gicas. Verifico as rela\u00e7\u00f5es entre \u00abirm\u00e3os\u00bb atrav\u00e9s de <code>lscpu -e<\/code> e <code>\/sys\/devices\/system\/cpu\/cpuX\/topology\/thread_siblings_list<\/code>. No caso de percursos em que a lat\u00eancia \u00e9 cr\u00edtica, evito colocar o thread da aplica\u00e7\u00e3o e a IRQ associada no mesmo n\u00facleo f\u00edsico (threads SMT diferentes); estes competem pelas unidades de execu\u00e7\u00e3o e pelas caches. Prefiro pares em que, por exemplo, um thread da aplica\u00e7\u00e3o seja executado na CPU2 e a fila RX associada na CPU3 (outro n\u00facleo f\u00edsico, mesmo n\u00f3 NUMA). Se o SMT perturbar a consist\u00eancia, opto por utilizar menos n\u00facleos f\u00edsicos, mas exclusivos, e evito assim a instabilidade <strong>Interfer\u00eancias<\/strong>.<\/p>\n\n<h2>Virtualiza\u00e7\u00e3o: KVM, vhost e SR-IOV<\/h2>\n<p>Em ambientes virtualizados, considero o anfitri\u00e3o e o convidado separadamente. No anfitri\u00e3o, distribuo os IRQs f\u00edsicos das placas de rede de forma organizada pelos n\u00facleos do n\u00f3 NUMA correspondente. Se o convidado utilizar o virtio-net, surgem IRQs adicionais para os threads vhost; identifico-os em <code>\/proc\/interrup\u00e7\u00f5es<\/code> e atribuo os vhost-Workers de forma consistente \u00e0s filas da NIC f\u00edsica. Ao n\u00edvel do convidado, defino tamb\u00e9m as afinidades RSS\/XPS e IRQ, desde que o controlador virtio disponibilize v\u00e1rias filas. No caso do SR-IOV, vale a pena atribuir a cada convidado uma ou mais VF com os seus pr\u00f3prios vetores MSI-X e fix\u00e1-las no convidado; o isolamento melhora a lat\u00eancia e a previsibilidade. Sigo um esquema claro: vCPUs do convidado em pCPUs dedicadas, IRQs associadas em n\u00facleos pr\u00f3ximos e n\u00e3o misturar os threads do emulador\/vhost com threads de aplica\u00e7\u00f5es que exigem muitos recursos de computa\u00e7\u00e3o \u2014 assim, o caminho dos dados permanece <strong>plane\u00e1vel<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/irq_balance_linux_guide_5421.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Frequ\u00eancia da CPU, estados C e ajuste NOHZ<\/h2>\n<p>As lat\u00eancias de IRQ s\u00e3o afetadas quando os n\u00facleos entram em estados C profundos ou funcionam com uma frequ\u00eancia de rel\u00f3gio agressiva. Para cargas de trabalho sens\u00edveis, defino o regulador da CPU para <code>desempenho<\/code> (<code>cpupower frequency\u2011set -g performance<\/code>) e reduzo os estados C profundos atrav\u00e9s de op\u00e7\u00f5es de arranque ou de controladores, para limitar os tempos de recupera\u00e7\u00e3o. Em servidores com carga elevada, isto tem frequentemente um efeito mais positivo do que qualquer ajuste fino nas afinidades. Em perfis de lat\u00eancia muito exigentes, complemento <code>nohz_full=<\/code> e <code>rcu_nocbs=<\/code> para n\u00facleos isolados, de modo a que o Tick-Timer e os RCU-Call-Backs n\u00e3o interfiram entre si; defino deliberadamente as CPUs de manuten\u00e7\u00e3o de forma separada. No entanto, testo estas interven\u00e7\u00f5es separadamente, pois podem ter efeitos colaterais na agendamento e no consumo de energia. O essencial continua a ser: comparar cuidadosamente os valores medidos antes e depois da altera\u00e7\u00e3o; caso contr\u00e1rio, acabo por andar \u00e0s cegas em <strong>Otimiza\u00e7\u00f5es<\/strong> no escuro.<\/p>\n\n<h2>Systemd, Cgroups e isolamento de aplica\u00e7\u00f5es<\/h2>\n<p>Para al\u00e9m do IRQ-pinning, isolo os threads das aplica\u00e7\u00f5es utilizando Cgroups e a affinity do systemd. Atrav\u00e9s de <code>CPUAffinity=<\/code> Nos ficheiros Unit e nos controladores de CPU (cgroup v2), atribuo n\u00facleos fixos aos servi\u00e7os. Desta forma, evito que, do lado do agendador, os threads sejam direcionados para as CPUs que reservei para as IRQs. Em ambientes de contentores, defino <code>cpuset.cpus<\/code> e verificar <code>cpuset.cpus.effective<\/code>, para que as promessas de recursos tenham realmente efeito. Importante: <code>IRQBALANCE_BANNED_CPUS<\/code> controla apenas onde o irqbalance n\u00e3o distribui; os threads do kernel, como o ksoftirqd, continuam a seguir o agendador. Para um isolamento rigoroso, preciso, portanto, de uma combina\u00e7\u00e3o de afinidades de IRQ, afinidade de CPU dos servi\u00e7os e, se necess\u00e1rio, kernels isolados. Desta forma, o caminho dos dados e a aplica\u00e7\u00e3o permanecem claramente separados e o <strong>Carga<\/strong> n\u00e3o se mistura de forma descontrolada.<\/p>\n\n<h2>Erros t\u00edpicos e medidas corretivas<\/h2>\n<p>Nunca desativo o irqbalance de forma generalizada sem conhecer os padr\u00f5es de carga; caso contr\u00e1rio, as IRQs concentram-se rapidamente em poucos n\u00facleos. \u00c9 igualmente desfavor\u00e1vel abrir todos os n\u00facleos para todas as IRQs, apesar de os threads sens\u00edveis serem exclusivos <strong>Recursos<\/strong> precisamos. Outro erro: n\u00e3o testar as altera\u00e7\u00f5es isoladamente e n\u00e3o medir os efeitos; assim, n\u00e3o fica claro o que realmente ajuda. Tamb\u00e9m tenho em conta os pares de Hyper-Threading: \u00e9 melhor que o thread da aplica\u00e7\u00e3o e o IRQ associado n\u00e3o partilhem o mesmo n\u00facleo f\u00edsico. Documento cada passo e crio pontos de revers\u00e3o, para que, em caso de problemas, possa regressar rapidamente \u00e0 \u00faltima <strong>bom<\/strong> Voltar \u00e0 configura\u00e7\u00e3o.<\/p>\n\n<h2>Lista de verifica\u00e7\u00e3o pr\u00e1tica para servidores<\/h2>\n<p>Come\u00e7o sempre por estabelecer uma linha de base: ativar o irqbalance, registar a carga do sistema, observar o \/proc\/interrupts e medir as lat\u00eancias; s\u00f3 depois \u00e9 que alterei as configura\u00e7\u00f5es. Na segunda etapa, concluo com <code>IRQBALANCE_BANNED_CPUS<\/code> seleciono os n\u00facleos que devem ficar reservados para os threads das aplica\u00e7\u00f5es; assim, evito interfer\u00eancias desnecess\u00e1rias de IRQ. Em seguida, mapeio as IRQs cr\u00edticas atrav\u00e9s de <code>smp_affinity<\/code> utilizo poucos n\u00facleos bem selecionados e mantenho a proximidade NUMA. Em seguida, verifico o RSS\/RPS\/RFS e o XPS, bem como as op\u00e7\u00f5es de offloading da NIC, para distribuir o trabalho de forma otimizada. Por fim, realizo testes sob carga de produ\u00e7\u00e3o, comparo as m\u00e9tricas e mantenho apenas as altera\u00e7\u00f5es que comprovadamente <strong>trabalho<\/strong>.<\/p>\n\n<h2>Ficheiros de configura\u00e7\u00e3o e comandos do systemd<\/h2>\n<p>Ativo o servi\u00e7o com <code>systemctl enable --now irqbalance<\/code> e verifica com <code>systemctl status irqbalance<\/code> o prazo; \u00e9 assim que eu defino o <strong>Servi\u00e7o<\/strong> certamente pronto. Em <code>\/etc\/sysconfig\/irqbalance<\/code> ou <code>\/etc\/default\/irqbalance<\/code> coloco <code>IRQBALANCE_BANNED_CPUS<\/code> bem como, opcionalmente <code>IRQBALANCE_BANNED_IRQS<\/code>. Aceito as altera\u00e7\u00f5es com <code>systemctl restart irqbalance<\/code> e, ao mesmo tempo, observo os contadores em <code>\/proc\/interrup\u00e7\u00f5es<\/code>. Para os testes, utilizo o modo \u00abForeground\u00bb do irqbalance para acompanhar as decis\u00f5es em tempo real. S\u00f3 quando compreendo o comportamento \u00e9 que introduzo as altera\u00e7\u00f5es de forma permanente no <strong>Configura\u00e7\u00e3o<\/strong>.<\/p>\n\n<h2>Quando desativo o irqbalance<\/h2>\n<p>Em configura\u00e7\u00f5es em tempo real ou em aplica\u00e7\u00f5es extremamente sens\u00edveis \u00e0 lat\u00eancia, paro o irqbalance e atribuo os IRQs de forma est\u00e1tica, para que nenhuma redistribui\u00e7\u00e3o cause interfer\u00eancias. Isolei os n\u00facleos para estas cargas de trabalho e deixo os IRQs de tr\u00e1fego a funcionar deliberadamente noutros n\u00facleos; assim, os threads das aplica\u00e7\u00f5es permanecem <strong>plane\u00e1vel<\/strong>. Mesmo em ambientes de inquilinos rigorosamente separados, esta abordagem compensa, porque reduz as interfer\u00eancias entre m\u00e1quinas virtuais ou contentores. Se surgirem controladores que funcionam menos bem com o modo autom\u00e1tico, excluo os seus IRQs atrav\u00e9s da lista de bloqueados. Assim que os padr\u00f5es de carga voltarem a tornar-se mais vari\u00e1veis, ativo novamente o irqbalance e verifico o efeito com novos <strong>Valores medidos<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-irq-balance-setup-1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Brevemente resumido<\/h2>\n<p>Come\u00e7o com o irqbalance, avalio o efeito e fa\u00e7o ajustes seletivos, em vez de intervir cegamente em todo o lado; assim, mantenho uma vis\u00e3o global do sistema e <strong>Transpar\u00eancia<\/strong>. Para cargas de trabalho sens\u00edveis, atribuo IRQs adequadas, isolo n\u00facleos para aplica\u00e7\u00f5es e respeito a proximidade NUMA. Com m\u00e1scaras de restri\u00e7\u00e3o, controlo onde o irqbalance pode operar e evito deslocamentos indesejados. Verifico regularmente <code>\/proc\/interrup\u00e7\u00f5es<\/code>, lat\u00eancia e d\u00e9bito, para que as altera\u00e7\u00f5es sejam comprovadas de forma fi\u00e1vel. Quem proceder desta forma tira o m\u00e1ximo partido do potencial do IRQ Balance e mant\u00e9m os servidores sob carga de rede de forma percet\u00edvel <strong>reativo<\/strong>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Configurar corretamente o irqbalance no Linux: Veja como distribuir interrup\u00e7\u00f5es de forma eficiente em servidores Linux e melhorar o desempenho.<\/p>","protected":false},"author":1,"featured_media":21035,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21042","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server_vm"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"163","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"IRQ Balance","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21035","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/21042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/comments?post=21042"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/21042\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/21035"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=21042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=21042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=21042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}