{"id":21347,"date":"2026-09-13T08:35:03","date_gmt":"2026-09-13T06:35:03","guid":{"rendered":"https:\/\/webhosting.de\/linux-softirq-auslastung-analysieren-performance-tuning-datacenter\/"},"modified":"2026-09-13T08:35:03","modified_gmt":"2026-09-13T06:35:03","slug":"analise-da-utilizacao-do-softirq-no-linux-otimizacao-do-desempenho-centro-de-dados","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/linux-softirq-auslastung-analysieren-performance-tuning-datacenter\/","title":{"rendered":"Analisar e otimizar a utiliza\u00e7\u00e3o do SoftIRQ no Linux"},"content":{"rendered":"<p>Vou mostrar, passo a passo, como eu <strong>SoftIRQ do Linux<\/strong>-Medir a utiliza\u00e7\u00e3o dos recursos, identificar os pontos de estrangulamento e recuperar o controlo com apenas algumas altera\u00e7\u00f5es no kernel. Ao faz\u00ea-lo, dou prioridade a efeitos mensur\u00e1veis: tempos de resposta mais curtos <strong>Lat\u00eancias<\/strong>, n\u00facleos de CPU equilibrados e processamento est\u00e1vel de pacotes sob elevada carga de rede.<\/p>\n\n<h2>Pontos centrais<\/h2>\n<ul>\n  <li><strong>Pontos de medi\u00e7\u00e3o<\/strong> compreender: \/proc\/softirqs, softnet_stat, interrupts<\/li>\n  <li><strong>Sintomas<\/strong> detetar: carga do ksoftirqd, perdas de pacotes, picos de lat\u00eancia<\/li>\n  <li><strong>Afina\u00e7\u00e3o<\/strong> controlar: netdev_budget e netdev_budget_usecs<\/li>\n  <li><strong>Distribui\u00e7\u00e3o<\/strong> salvar: afinidade de IRQ, RSS, mapeamento de filas<\/li>\n  <li><strong>Monitoriza\u00e7\u00e3o<\/strong> executar: mpstat, perf, Tracing<\/li>\n<\/ul>\n\n<h2>Vis\u00e3o geral dos SoftIRQs: como funciona o kernel<\/h2>\n<p>Ap\u00f3s uma interrup\u00e7\u00e3o de hardware, o kernel transfere parte do trabalho para as chamadas <strong>SoftIRQs<\/strong>, para que os caminhos cr\u00edticos fiquem rapidamente livres e o processamento continue a ser previs\u00edvel. Especialmente no caminho de rede, os manipuladores NAPI recolhem pacotes dos an\u00e9is das placas de rede, iniciam o processamento do protocolo e transferem os dados para o <strong>Pilha de rede<\/strong>. Se o volume de eventos aumentar, os threads por CPU, como o ksoftirqd\/cpuN, entram em a\u00e7\u00e3o e assumem a tarefa de sondagem e o processamento posterior. Esta dissocia\u00e7\u00e3o melhora o rendimento global, mas, em caso de sobrecarga, pode resultar em tempos de execu\u00e7\u00e3o prolongados dos SoftIRQ em cada <strong>N\u00facleos<\/strong> causar. Por isso, verifico atempadamente se os caminhos NET_RX e NET_TX est\u00e3o a dominar e se o ksoftirqd est\u00e1 a consumir visivelmente tempo de CPU. Desta forma, consigo identificar quando os SoftIRQs se tornam um gargalo e outras <strong>Otimiza\u00e7\u00f5es<\/strong> s\u00e3o necess\u00e1rias.<\/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\/09\/linux-analyse-optimierung-5893.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Identificar sintomas t\u00edpicos de uma elevada carga de SoftIRQ<\/h2>\n<p>A primeira coisa que noto quando h\u00e1 uma carga elevada de SoftIRQ \u00e9 um n\u00edvel constantemente elevado de <strong>CPU do kernel<\/strong> e processos ksoftirqd que se mant\u00eam em picos durante muitos segundos. Paralelamente, aumentam as lat\u00eancias na rede e nas E\/S em bloco, o que se traduz em handshakes TLS lentos ou em <strong>APIs<\/strong> afirmou. \u00c9 frequente que se verifiquem perdas de pacotes, enquanto os an\u00e9is da placa de rede ficam sobrecarregados e os atrasos aumentam. Quando as interrup\u00e7\u00f5es est\u00e3o mal distribu\u00eddas, a CPU 0 \u00e9 frequentemente a mais afetada, porque muitas linhas de IRQ, juntamente com o trabalho subsequente, s\u00e3o canalizadas para uma <strong>N\u00facleo<\/strong> acontece. Esta liga\u00e7\u00e3o a um \u00fanico n\u00facleo aumenta os tempos de espera pelos servi\u00e7os e reduz o d\u00e9bito efetivo. Por isso, estou a verificar se este padr\u00e3o \u00e9 sistem\u00e1tico ou se ocorre apenas <strong>Picos<\/strong> conduz.<\/p>\n\n<h2>Pontos de medi\u00e7\u00e3o principais: interpretar corretamente o \/proc e as ferramentas<\/h2>\n<p>Vou come\u00e7ar pelo \/proc\/softirqs, porque a\u00ed consigo ver, por CPU e por tipo, qual \u00e9 a intensidade aproximada de <strong>NET_RX<\/strong>, NET_TX, TIMER ou BLOCK aumentem. Em \/proc\/net\/softnet_stat, verifico as linhas, prestando aten\u00e7\u00e3o aos campos que indicam or\u00e7amentos n\u00e3o cumpridos ou pacotes descartados, o que, em caso de aumento constante, indica claramente que <strong>Ciclos de sondagem<\/strong> sugere. O \/proc\/interrupts revela, assim, se as interrup\u00e7\u00f5es de hardware s\u00e3o distribu\u00eddas de forma desigual pelas CPUs e quais s\u00e3o as IRQs mais intensas. Ferramentas como o mpstat, o top ou o htop ajudam-me a identificar o ksoftirqd\/cpuN e a distribuir as <strong>Tempos de Softirq<\/strong> avaliar por n\u00facleo. Se necess\u00e1rio, o perf fornece pontos cr\u00edticos na pilha, para que eu possa identificar os manipuladores e os percursos dos controladores que consomem mais tempo. A tabela seguinte resume os principais pontos de medi\u00e7\u00e3o, indicadores e t\u00edpicos <strong>Ac\u00e7\u00f5es<\/strong> juntos.<\/p>\n<table>\n  <thead>\n    <tr>\n      <th>Ponto de medi\u00e7\u00e3o<\/th>\n      <th>Principais dom\u00ednios\/indicadores<\/th>\n      <th>Interpreta\u00e7\u00e3o<\/th>\n      <th>A\u00e7\u00e3o<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>\/proc\/softirqs<\/td>\n      <td>NET_RX, NET_TX, BLOCK por <strong>CPU<\/strong><\/td>\n      <td>\u00c9 vis\u00edvel uma distribui\u00e7\u00e3o irregular da carga<\/td>\n      <td>Ajustar a afinidade de IRQ, ativar o RSS<\/td>\n    <\/tr>\n    <tr>\n      <td>\/proc\/net\/softnet_stat<\/td>\n      <td>Contador de or\u00e7amento\/quedas, terceiro <strong>Coluna<\/strong><\/td>\n      <td>Or\u00e7amentos insuficientes, as encomendas ficam por entregar<\/td>\n      <td>Aumentar netdev_budget\/usecs, verificar o RPS<\/td>\n    <\/tr>\n    <tr>\n      <td>\/proc\/interrup\u00e7\u00f5es<\/td>\n      <td>Linhas IRQ pro <strong>CPU<\/strong>, Mapeamento de filas<\/td>\n      <td>Demasiadas IRQs em poucos n\u00facleos<\/td>\n      <td>Verificar o irqbalance, definir o smp_affinity<\/td>\n    <\/tr>\n    <tr>\n      <td>mpstat \/ perf<\/td>\n      <td>%soft, pontos de acesso, <strong>Pilhas<\/strong><\/td>\n      <td>Os manipuladores e n\u00facleos dominantes s\u00e3o vis\u00edveis<\/td>\n      <td>Dar prioridade ao ajuste dos controladores e da pilha<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Causas e padr\u00f5es de carga elevada<\/h2>\n<p>Os picos surgem frequentemente devido a valores muito elevados <strong>Rendimento<\/strong>, muitas liga\u00e7\u00f5es paralelas ou rajadas UDP que dominam o NET_RX. Por vezes, as predefini\u00e7\u00f5es dos controladores prev\u00eaem pequenos lotes, o que gera um n\u00famero excessivo de interrup\u00e7\u00f5es e sobrecarrega o ksoftirqd, enquanto o GRO\/LRO fica sem ser utilizado <strong>restos<\/strong>. Afinidades desfavor\u00e1veis concentram o trabalho na CPU 0, embora haja v\u00e1rias filas dispon\u00edveis e o RSS pudesse facilitar a distribui\u00e7\u00e3o. Nas m\u00e1quinas virtuais, as vNICs sobrecarregam o kernel do anfitri\u00e3o, o que aumenta os tempos de SoftIRQ no anfitri\u00e3o em detrimento dos convidados <strong>aumenta<\/strong>. As sobreposi\u00e7\u00f5es de contentores adicionam pacotes \u00e0 pilha, o que faz com que fluxos simples se transformem subitamente em percursos mais complexos. S\u00f3 a combina\u00e7\u00e3o entre distribui\u00e7\u00e3o, or\u00e7amento e <strong>Loteamento<\/strong> d\u00e1-nos uma vis\u00e3o completa.<\/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\/09\/linux_softirq_meeting_8593.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Monitoriza\u00e7\u00e3o espec\u00edfica: tornar vis\u00edveis os SoftIRQs<\/h2>\n<p>Para garantir um acompanhamento eficaz, leio regularmente <strong>\/proc<\/strong>-Seleciono as interfaces e associo-as a m\u00e9tricas do anfitri\u00e3o, como a carga e as lat\u00eancias de agendamento. Estabele\u00e7o uma correla\u00e7\u00e3o entre os aumentos de NET_RX e os contadores de pacotes perdidos, para determinar se apenas o d\u00e9bito est\u00e1 a aumentar ou se h\u00e1 pacotes a perderem-se no percurso <strong>ficar<\/strong>. O `mpstat` fornece-me as percentagens de tempo por CPU para os SoftIRQs, enquanto o `top`\/`htop` mostram os threads `ksoftirqd\/cpuN` que se destacam. Com o `perf record`\/`perf top`, isolo os percursos dispendiosos, por exemplo, offloads de checksum, fus\u00e3o GRO ou <strong>qdisc<\/strong>-Trabalho. Os tra\u00e7os baseados em eBPF ou ftrace mostram o in\u00edcio e o fim dos handlers, o que me permite avaliar os tempos de execu\u00e7\u00e3o dos handlers e os efeitos do agendamento. Desta forma, obt\u00e9m-se uma vis\u00e3o clara da situa\u00e7\u00e3o a partir de m\u00e9tricas, cronogramas e <strong>Pontos de acesso<\/strong>.<\/p>\n\n<h2>Ajuste com netdev_budget e netdev_budget_usecs<\/h2>\n<p>Se o caminho NAPI for demasiado curto, vou aument\u00e1-lo gradualmente <strong>net.core.netdev_budget<\/strong> e net.core.netdev_budget_usecs, para processar mais pacotes por ciclo de sondagem. Para isso, observo a terceira coluna em \/proc\/net\/softnet_stat; se o aumento diminuir, significa que as altera\u00e7\u00f5es est\u00e3o a surtir efeito e as lat\u00eancias s\u00e3o <strong>mais curto<\/strong>. Aumento os valores de forma moderada, por exemplo, de 300 para 600 pacotes e de 2000 para 4000 microssegundos, e verifico se as outras tarefas mant\u00eam tempo de CPU suficiente. Um excesso bloqueia o agendador, raz\u00e3o pela qual controlo de perto os picos de carga, as mudan\u00e7as de contexto e o comprimento das filas de execu\u00e7\u00e3o <strong>acompanha<\/strong>. Al\u00e9m disso, vale a pena verificar os valores de RPS\/RFS, GRO\/LRO e MTU, para utilizar de forma otimizada o agrupamento de pacotes e os tamanhos dos pacotes. Para reduzir as enxurradas de interrup\u00e7\u00f5es, tenho em conta <a href=\"https:\/\/webhosting.de\/pt\/coalescencia-de-interrupcoes-otimizacao-da-rede-serverflux\/\">Coalesc\u00eancia de interrup\u00e7\u00f5es<\/a> e ajuste os mesmos detalhes com os controladores NIC, caso essa op\u00e7\u00e3o esteja dispon\u00edvel <strong>\u00e9<\/strong>.<\/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\/09\/linux-softirq-analyse-optimierung-4738.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Otimizar a distribui\u00e7\u00e3o de interrup\u00e7\u00f5es e a afinidade de IRQ<\/h2>\n<p>Para evitar gargalos num \u00fanico n\u00facleo, distribuo as IRQs por v\u00e1rios <strong>CPUs<\/strong>, seja atrav\u00e9s do irqbalance ou com m\u00e1scaras manuais do smp_affinity. Para tal, baseio-me nas filas das placas de rede existentes e ativo o RSS, para que o hardware distribua os fluxos de entrada de forma uniforme e cada n\u00facleo tenha uma carga de trabalho mais leve <strong>Lotes<\/strong> recebe. Tenho o cuidado de n\u00e3o misturar IRQs de controlo com percursos de dados ativos, para preservar a localidade da cache e a previsibilidade. As afinidades definidas corretamente reduzem as lat\u00eancias e minimizam as perdas, uma vez que o processamento posterior das SoftIRQs j\u00e1 n\u00e3o fica retido num n\u00facleo <strong>restos<\/strong>. Os controladores apresentam frequentemente as atribui\u00e7\u00f5es de filas \u00e0 CPU no sysfs; \u00e9 a\u00ed que verifico se cada fila tem um n\u00facleo adequado e se n\u00e3o surgem assimetrias. Para uma an\u00e1lise mais aprofundada, baseio-me em guias como <a href=\"https:\/\/webhosting.de\/pt\/servidor-irq-afinidade-multicore-rede-otimizacao-desempenho\/\">Afinidade IRQ<\/a>, para ter tamb\u00e9m em conta os aspetos NUMA e o efeito da cache <strong>ter em conta<\/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\/09\/linux_softirq_optimierung_2793.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Guia pr\u00e1tico: Dos sintomas \u00e0 solu\u00e7\u00e3o<\/h2>\n<p>Para come\u00e7ar, verifico os sintomas: ksoftirqd\/cpuN no top, percentagens de SoftIRQ por n\u00facleo em <strong>mpstat<\/strong> e picos de NET_RX que chamam a aten\u00e7\u00e3o. Em seguida, recolho dados concretos de \/proc\/softirqs, \/proc\/net\/softnet_stat e \/proc\/interrupts, para identificar percursos dominantes e distribui\u00e7\u00f5es desequilibradas. Em seguida, aplico pequenos ajustes, come\u00e7ando pelos or\u00e7amentos do netdev, seguidos da afinidade de IRQ e do RSS, sempre com um acompanhamento minucioso <strong>Controlo<\/strong>. Se continuarem a ocorrer quedas, verifico as defini\u00e7\u00f5es dos controladores, as op\u00e7\u00f5es de coalesc\u00eancia, os offloads e o comportamento do GRO\/LRO. Em hosts de m\u00e1quinas virtuais ou contentores, avalio adicionalmente a forma como as vNICs interagem com a pilha do host f\u00edsico e onde a <strong>Pontos de acesso<\/strong> realmente se verificam. Avalio cada altera\u00e7\u00e3o atrav\u00e9s de s\u00e9ries temporais, at\u00e9 que as m\u00e9tricas e as lat\u00eancias se estabilizem num bom n\u00edvel <strong>terra<\/strong>.<\/p>\n\n<h2>Melhores pr\u00e1ticas para um desempenho sustent\u00e1vel<\/h2>\n<p>Vou implementar uma monitoriza\u00e7\u00e3o regular dos contadores SoftIRQ, pois s\u00f3 valores constantes <strong>Transpar\u00eancia<\/strong> evita reca\u00eddas em gargalos. As vers\u00f5es atuais do kernel compensam, porque o NAPI e o Stack continuam a ser aperfei\u00e7oados internamente, criando assim reservas para situa\u00e7\u00f5es dif\u00edceis <strong>Cargas<\/strong> criar. \u00c9 essencial garantir uma distribui\u00e7\u00e3o equilibrada por v\u00e1rios n\u00facleos, assim como or\u00e7amentos adequados que processem um n\u00famero suficiente de pacotes sem sobrecarregar o agendador. Para perfis de alojamento com muito tr\u00e1fego HTTPS e API, vale a pena dar uma vista de olhos a <a href=\"https:\/\/webhosting.de\/pt\/softirq-cpu-hosting-otimizacao-do-debito-da-rede-datacenter\/\">SoftIRQ na hospedagem<\/a>, pois \u00e9 a\u00ed que se verifica o quanto a escolha de NICs, filas e ajustes melhora a qualidade do servi\u00e7o. No planeamento da capacidade, tenho em conta os n\u00facleos da CPU, as funcionalidades das NICs, a mem\u00f3ria e as zonas NUMA, para garantir que existem reservas antes de <strong>Dicas<\/strong> chegarem. Desta forma, a plataforma mant\u00e9m-se robusta e reage de forma adequada a picos sazonais ou impulsionados por campanhas <strong>horas de ponta<\/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\/09\/linux_softirq_analyse_4839.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>softnet_stat em pormenor: o que os n\u00fameros realmente significam<\/h2>\n<p>Para aprofundar os meus conhecimentos de forma espec\u00edfica, leio <strong>\/proc\/net\/softnet_stat<\/strong> ao longo do processo e interpreto, em particular, as primeiras colunas. Os campos iniciais contam os pacotes processados e rejeitados por CPU, os <strong>terceira coluna<\/strong> indica press\u00e3o de tempo (resumindo: or\u00e7amento\/prazo insuficiente, o NAPI tem de ser interrompido). Se as quedas ou a press\u00e3o de tempo crescerem linearmente com a carga, os or\u00e7amentos ou a coalesc\u00eancia s\u00e3o as primeiras medidas a tomar. Por outro lado, se observar picos sem um aumento sustentado, os picos de tr\u00e1fego apenas concentram o trabalho a curto prazo \u2014 nesse caso, o processamento em lote (GRO) costuma ser mais eficaz do que grandes or\u00e7amentos. Os kernels mais recentes ampliam as estat\u00edsticas com campos para RPS\/RFS e limites de fluxo; se estes aumentarem, distribuo de forma mais consciente atrav\u00e9s do RPS ou reduzo o RFS, caso as suas consultas se tornem mais dispendiosas do que os seus benef\u00edcios. Correlaciono sempre os contadores com <strong>\/proc\/softirqs<\/strong>: Se o NET_RX aumentar em n\u00facleos individuais juntamente com a press\u00e3o de tempo no softnet_stat, concentro-me primeiro na distribui\u00e7\u00e3o (IRQ\/RSS) e s\u00f3 numa segunda fase em or\u00e7amentos maiores.<\/p>\n\n<h2>RPS\/RFS e XPS: controlo do direcionamento de software e do ajuste das filas<\/h2>\n<p>Se o RSS de hardware n\u00e3o existir ou for insuficiente, defino <strong>RPS<\/strong> (Receive Packet Steering), para distribuir a carga de rece\u00e7\u00e3o por v\u00e1rios n\u00facleos. Atrav\u00e9s do rps_cpus, atribuo \u00e0s filas de rece\u00e7\u00e3o os n\u00facleos que correspondem aos trabalhadores ativos e, na medida do poss\u00edvel, <strong>Perto de NUMA<\/strong> est\u00e3o. Em muitos fluxos, eu acrescento <strong>RFS<\/strong> (Receive Flow Steering), para que os pacotes recebidos cheguem ao local onde os sockets correspondentes s\u00e3o processados \u2013 o que \u00e9 ben\u00e9fico para a localidade da cache, desde que as tabelas de fluxo n\u00e3o se tornem um estrangulamento. Do lado do remetente, ajuda <strong>XPS<\/strong> (Transmit Packet Steering), a escolha da fila de transmiss\u00e3o (TX) de forma a adapt\u00e1-la \u00e0 liga\u00e7\u00e3o da aplica\u00e7\u00e3o \u00e0 CPU. O objetivo \u00e9 que um fluxo passe de forma consistente pela mesma fila de rece\u00e7\u00e3o\/transmiss\u00e3o (RX\/TX) e pelo mesmo n\u00facleo, o que reduz as lat\u00eancias e <strong>GRO<\/strong>- Os lotes ficam maiores. Testo sempre as distribui\u00e7\u00f5es de forma gradual: primeiro ativo o RPS em algumas filas, avalio o impacto (perdas, %soft, lat\u00eancias) e, depois, adiciono o RFS\/XPS. Se os n\u00facleos ficarem sobrecarregados devido ao RPS ou se a taxa de acertos L3 se deteriorar, reduzo novamente as m\u00e1scaras da CPU ou associo as filas mais estreitamente aos n\u00facleos dos servi\u00e7os em quest\u00e3o.<\/p>\n\n<h2>NUMA, isolamento da CPU e intera\u00e7\u00f5es com o agendador<\/h2>\n<p>Mesmo os melhores or\u00e7amentos e distribui\u00e7\u00f5es servem de pouco se os acessos \u00e0 mem\u00f3ria percorrerem longos caminhos NUMA. Tenho o cuidado de garantir que as interrup\u00e7\u00f5es da NIC, o processamento posterior do NAPI e os processos solicitantes ocorram, na medida do poss\u00edvel, dentro da mesma <strong>Dom\u00ednio NUMA<\/strong> permanecem. Em configura\u00e7\u00f5es com n\u00facleos dedicados em tempo real ou de baixa lat\u00eancia, isolo-os atrav\u00e9s de pol\u00edticas de CPU e de Cgroup e evito deliberadamente que o SoftIRQ l\u00e1 seja executado. <strong>ksoftirqd<\/strong> n\u00e3o deve ser direcionado para n\u00facleos isolados, caso contr\u00e1rio os pacotes acumulam-se sem que se perceba. Por outro lado, os n\u00facleos isolados n\u00e3o podem ficar totalmente sem atendimento de IRQ quando terminam percursos de dados \u2013 uma clara afinidade e <strong>Servi\u00e7o de limpeza<\/strong>- A estrat\u00e9gia \u00e9 obrigat\u00f3ria. Para cargas de trabalho com SLOs rigorosos, evito prioridades SCHED_FIFO\/RR excessivamente agressivas, que poderiam suplantar a execu\u00e7\u00e3o NAPI. Acompanho os comprimentos das filas de execu\u00e7\u00e3o, os despertares e as taxas de preemp\u00e7\u00e3o: se os tempos de SoftIRQ aumentarem \u00e0 medida que a interatividade da aplica\u00e7\u00e3o cresce, ajusto a granularidade e as afinidades, em vez de aumentar os or\u00e7amentos de forma generalizada.<\/p>\n\n<h2>qdisc, offloads e Busy-Poll: equilibrar a lat\u00eancia e o d\u00e9bito<\/h2>\n<p>No caminho de sa\u00edda, cada um custa <strong>qdisc<\/strong>-Tempo de CPU por opera\u00e7\u00e3o. Escolho a disciplina adequada ao perfil: o fq_codel ajuda a combater o \u00abpuffer bloat\u00bb e suaviza os picos de tr\u00e1fego, enquanto <em>mq<\/em>-variantes de placas de rede com m\u00faltiplas filas (Multi-Queue-NICs). No caso de um d\u00e9bito de dados puro em liga\u00e7\u00f5es est\u00e1veis, um qdisc mais leve pode minimizar os picos de lat\u00eancia. Na entrada, vale a pena ajustar com precis\u00e3o <strong>GRO\/TSO\/GSO<\/strong>: Os lotes maiores reduzem a taxa de SoftIRQ, mas, em casos extremos, aumentam o tempo de perman\u00eancia dos pacotes na pilha. Verifico se os intervalos de limpeza do GRO ou as descargas de hardware resultam em agregados demasiado grandes, o que prejudica a aplica\u00e7\u00e3o. Para percursos em que a lat\u00eancia \u00e9 extremamente cr\u00edtica, defino <strong>busy_poll<\/strong> e utilizo o busy_read com modera\u00e7\u00e3o para extrair ativamente pacotes do controlador \u2013 mas apenas com um acompanhamento rigoroso, para que outras tarefas n\u00e3o fiquem sem recursos. Da mesma forma, configuro <strong>Coalesc\u00eancia de interrup\u00e7\u00f5es<\/strong> em rela\u00e7\u00e3o aos picos de tr\u00e1fego: aumentar o tempo de espera em mais alguns microsegundos ajuda a melhorar o d\u00e9bito, mas um aumento excessivo atrasa os ACKs e prolonga os processos de estabelecimento de liga\u00e7\u00e3o. \u00c9 importante avaliar cada altera\u00e7\u00e3o separadamente: picos simulados, picos reais de produ\u00e7\u00e3o e per\u00edodos de inatividade apresentam frequentemente perfis de lat\u00eancia diferentes.<\/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\/09\/linux-softirq-analyse-1934.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Lista de verifica\u00e7\u00e3o de diagn\u00f3stico e revers\u00e3o segura<\/h2>\n<p>Trabalho as altera\u00e7\u00f5es de forma sistem\u00e1tica, seguindo uma breve lista de verifica\u00e7\u00e3o: 1) Comprovar os sintomas (ksoftirqd, %soft, Drops). 2) Verificar a distribui\u00e7\u00e3o (\/proc\/interrupts, Queue-&gt;CPU, estado RSS\/RPS). 3) Ajustar os or\u00e7amentos, verificar o efeito em <strong>softnet_stat<\/strong> observar (a press\u00e3o de tempo diminui, os drops estagnam). 4) Ajustar com precis\u00e3o os offloads\/coalescing, analisar o qdisc. 5) Verificar novamente as liga\u00e7\u00f5es NUMA\/CPU e os cgroups. Cada passo termina com uma melhoria clara nas m\u00e9tricas ou com o <strong>Revers\u00e3o<\/strong> at\u00e9 ao \u00faltimo estado satisfat\u00f3rio. Registo os valores-alvo e os valores reais (lat\u00eancia P95\/P99, %soft por n\u00facleo, taxas de desist\u00eancia, mudan\u00e7as de contexto), para que as itera\u00e7\u00f5es posteriores n\u00e3o sejam feitas \u00e0s cegas. Se v\u00e1rios pequenos ganhos n\u00e3o resultarem em al\u00edvio, interrompo o processo e procuro causas estruturais (estrangulamentos nas filas, blocos de aplica\u00e7\u00f5es, influ\u00eancias do armazenamento). Esta disciplina evita correla\u00e7\u00f5es erradas e protege contra espirais de otimiza\u00e7\u00e3o que, embora aumentem os n\u00fameros de rendimento, prejudicam a interatividade e a estabilidade.<\/p>\n\n<h2>Separar claramente os casos-limite e os perfis de carga de trabalho<\/h2>\n<p>Fa\u00e7o uma distin\u00e7\u00e3o deliberada entre transfer\u00eancia em massa, APIs sens\u00edveis \u00e0 lat\u00eancia e tr\u00e1fego intermitente <strong>UDP<\/strong>-Tr\u00e1fego. No caso de dados em massa, recorro ao processamento em lotes e \u00e0 coalesc\u00eancia mais cedo, desde que n\u00e3o haja perda de pacotes. No tr\u00e1fego de API, dou prioridade a uma distribui\u00e7\u00e3o uniforme, lotes limitados e lat\u00eancias E2E est\u00e1veis, mesmo que a taxa de transfer\u00eancia m\u00e1xima diminua ligeiramente em termos nominais. Combato os picos de UDP preferencialmente atrav\u00e9s do alargamento das filas e das afinidades \u2014 caso contr\u00e1rio, or\u00e7amentos demasiado elevados apenas aumentam o bloqueio de cabe\u00e7a de fila. Se um ambiente utilizar muitos saltos de contentores ou de overlay, prevejo trabalho adicional na pilha e distribuo a carga de SoftIRQ de forma mais ampla. Al\u00e9m disso, avalio separadamente as sobrecargas do firewall e do Conntrack: quando as tabelas atingem os seus limites, a carga de SoftIRQ aumenta inevitavelmente, independentemente da qualidade da distribui\u00e7\u00e3o de IRQ. S\u00f3 quando os caminhos por perfil forem consistentemente enxutos \u00e9 que vale a pena o ajuste fino dos \u00faltimos por cento.<\/p>\n\n<h2>SoftIRQs em ambientes de nuvem e de contentores<\/h2>\n<p>Em cen\u00e1rios virtualizados, a carga \u00e9 redistribu\u00edda atrav\u00e9s de vSwitches, redes overlay e pilhas de host, raz\u00e3o pela qual analiso tanto o sistema convidado como o host-<strong>M\u00e9tricas<\/strong> Analisa. Tempos elevados de SoftIRQ no anfitri\u00e3o travam imediatamente os contentores e as m\u00e1quinas virtuais, mesmo que os sistemas convidados pare\u00e7am estar a funcionar normalmente <strong>trabalho<\/strong>. Por isso, verifico o offload e a coalesc\u00eancia na placa de rede f\u00edsica, enquanto o RPS\/RFS no anfitri\u00e3o distribui melhor o caminho do software. Para cargas de trabalho em contentores, verifico se os limites do cgroup para a CPU e o processamento de IRQ est\u00e3o definidos de forma adequada, para que os servi\u00e7os importantes n\u00e3o fiquem em <strong>Filas de espera<\/strong> ficar sem recursos. As vNICs compat\u00edveis com m\u00faltiplas filas e com RSS melhoram o paralelismo, desde que as afinidades e os mapeamentos de filas estejam corretos. Com esta abordagem, mantenho os percursos de dados curtos e estabilizo <strong>Lat\u00eancias<\/strong> e um desempenho seguro e reprodut\u00edvel.<\/p>\n\n<h2>Resumo: Dominar com seguran\u00e7a a an\u00e1lise do SoftIRQ<\/h2>\n<p>Quem analisa a carga do SoftIRQ de forma rigorosa utiliza pontos de medi\u00e7\u00e3o claros, analisa as distribui\u00e7\u00f5es e define n\u00edveis graduais <strong>Passos<\/strong>. Come\u00e7o por \/proc\/softirqs e softnet_stat, cruzo os dados com o ksoftirqd e o mpstat e, a partir da\u00ed, determino a ordem das minhas <strong>Medidas<\/strong>. Primeiro, ajusto o netdev_budget e o netdev_budget_usecs; depois, otimizo a afinidade de IRQ, o RSS e as op\u00e7\u00f5es de agrupamento, como o GRO e os offloads. Cada altera\u00e7\u00e3o \u00e9 m\u00ednima, \u00e9 avaliada e s\u00f3 \u00e9 mantida se tiver um efeito positivo, at\u00e9 que as perdas de pacotes desapare\u00e7am e <strong>Lat\u00eancias<\/strong> diminuir. Esta disciplina evita efeitos colaterais, mant\u00e9m a interatividade na CPU e garante o funcionamento dos servi\u00e7os mesmo em picos de tr\u00e1fego <strong>reativo<\/strong>. Assim, o desempenho do Linux mant\u00e9m-se transparente, robusto e personaliz\u00e1vel, sem que pontos cr\u00edticos ocultos afetem a <strong>Estabilidade<\/strong> colocar em risco.<\/p>","protected":false},"excerpt":{"rendered":"<p>Descubra como analisar e otimizar sistematicamente a utiliza\u00e7\u00e3o do SoftIRQ no Linux, para aumentar o desempenho dos seus servidores Linux atrav\u00e9s de um ajuste espec\u00edfico do netdev e de uma melhor distribui\u00e7\u00e3o das interrup\u00e7\u00f5es.<\/p>","protected":false},"author":1,"featured_media":21340,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21347","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":"96","_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":"Linux SoftIRQ","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":"21340","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/21347","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=21347"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/21347\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/21340"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=21347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=21347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=21347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}