{"id":19745,"date":"2026-06-06T15:03:33","date_gmt":"2026-06-06T13:03:33","guid":{"rendered":"https:\/\/webhosting.de\/server-irq-affinity-multicore-netzwerkoptimierung-performance\/"},"modified":"2026-06-06T15:03:33","modified_gmt":"2026-06-06T13:03:33","slug":"servidor-irq-afinidade-multicore-rede-otimizacao-desempenho","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/server-irq-affinity-multicore-netzwerkoptimierung-performance\/","title":{"rendered":"Afinidade IRQ do servidor e otimiza\u00e7\u00e3o da rede multi-core para um desempenho m\u00e1ximo"},"content":{"rendered":"<p>Optimizo os caminhos de rede de um servidor <strong>Afinidade IRQ<\/strong> e mapear filas RX\/TX para n\u00facleos para controlar a lat\u00eancia, a taxa de transfer\u00eancia e o jitter p99. Aqueles que usam CPUs com v\u00e1rios n\u00facleos orquestram consistentemente interrup\u00e7\u00f5es, SoftIRQs, NAPI e NUMA de forma que os fluxos permane\u00e7am alinhados com o n\u00facleo, as trocas de contexto sejam reduzidas e o aplicativo responda de forma mensur\u00e1vel mais rapidamente.<\/p>\n\n<h2>Pontos centrais<\/h2>\n<ul>\n  <li><strong>Distribui\u00e7\u00e3o de IRQ<\/strong> determina quais os n\u00facleos que transportam interrup\u00e7\u00f5es de hardware e evita pontos de acesso.<\/li>\n  <li><strong>Proximidade NUMA<\/strong> reduz o acesso remoto e diminui os picos de lat\u00eancia.<\/li>\n  <li><strong>SoftIRQs e NAPI<\/strong> controlar o processamento em lote e reduzir a carga nos n\u00facleos.<\/li>\n  <li><strong>RPS\/RFS<\/strong> mant\u00e9m os fluxos pr\u00f3ximos dos segmentos de consumo.<\/li>\n  <li><strong>Medi\u00e7\u00e3o e fixa\u00e7\u00e3o<\/strong> torna o desempenho mais determin\u00edstico.<\/li>\n<\/ul>\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\/06\/serverraum-optimierung-4761.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Porque \u00e9 que a afinidade de IRQ conta no funcionamento do servidor<\/h2>\n\n<p>As altas taxas de pacotes rapidamente colocam uma press\u00e3o sobre os n\u00facleos individuais se todas as interrup\u00e7\u00f5es ca\u00edrem em algumas CPUs, ent\u00e3o eu distribuo a carga seletivamente para <strong>Pontos de acesso<\/strong> para evitar isso. Atribuo filas RX\/TX aos n\u00facleos apropriados para manter os caminhos de dados curtos e as caches quentes. Isso reduz as lat\u00eancias p95\/p99 porque evito migra\u00e7\u00f5es desnecess\u00e1rias e mantenho as etapas de processamento nos mesmos n\u00facleos. Levo em conta a proximidade f\u00edsica da NIC, dos canais de mem\u00f3ria e dos soquetes da CPU para que o caminho do pacote at\u00e9 o trabalhador da aplica\u00e7\u00e3o permane\u00e7a consistentemente r\u00e1pido. Esta afinidade de n\u00facleos cria uma estabilidade mensur\u00e1vel durante os picos de tr\u00e1fego sem ter de atualizar o hardware imediatamente.<\/p>\n\n<h2>Equil\u00edbrio de IRQ vs. afinidade fixa<\/h2>\n\n<p>O servi\u00e7o standard <strong>equil\u00edbrio do Iraque<\/strong> distribui as interrup\u00e7\u00f5es automaticamente, mas n\u00e3o conhece a l\u00f3gica da minha aplica\u00e7\u00e3o, os alvos NUMA e os or\u00e7amentos de lat\u00eancia. Eu vinculei IRQs de rede cr\u00edticos a n\u00facleos selecionados, enquanto as interrup\u00e7\u00f5es ruidosas ou menos importantes foram movidas para outros n\u00facleos. Esta liga\u00e7\u00e3o harmoniza-se com a fixa\u00e7\u00e3o dos processos da aplica\u00e7\u00e3o para que o pipeline por fluxo permane\u00e7a consistente. Com tr\u00e1fego intenso, evito redistribui\u00e7\u00f5es que geram sobrecarga adicional e enfraquecem o efeito da cache. Se quiser aprofundar o assunto, pode encontrar informa\u00e7\u00f5es pr\u00e1ticas de fundo neste guia: <a href=\"https:\/\/webhosting.de\/pt\/servidor-irq-balancing-otimizacao-do-desempenho-da-rede-centro-de-dados\/\">Equil\u00edbrio de IRQ no centro de dados<\/a>.<\/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\/06\/netzwerkoptimierung_meeting_4827.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Afinidade de CPU, NUMA e o caminho curto de dados<\/h2>\n\n<p>Prefiro colocar os trabalhadores da aplica\u00e7\u00e3o e os IRQs de rede no mesmo <strong>NUMA<\/strong>-para que os acessos \u00e0 mem\u00f3ria permane\u00e7am locais. Se uma placa de rede fica pendurada no n\u00f3 0, eu tamb\u00e9m configuro as filas RX associadas l\u00e1 e vinculo os processos relevantes a esses n\u00facleos. Desta forma, evito os dispendiosos acessos remotos \u00e0 mem\u00f3ria, que t\u00eam um grande impacto na lat\u00eancia a altas taxas de pacotes. Tamb\u00e9m incluo pares de hyper-threading para que as threads irm\u00e3s n\u00e3o interfiram umas com as outras. Esse tri\u00e2ngulo de fixa\u00e7\u00e3o de processos, afinidade de IRQ e topologia NUMA torna os caminhos de rede mais previs\u00edveis e aumenta a taxa de transfer\u00eancia.<\/p>\n\n<h2>Compreens\u00e3o de SoftIRQs, NAPI e conce\u00e7\u00e3o de filas<\/h2>\n\n<p>Ap\u00f3s a interrup\u00e7\u00e3o do hardware, o kernel assume o processamento em <strong>SoftIRQs<\/strong>, frequentemente no mesmo n\u00facleo que recebeu o IRQ. Quando a carga \u00e9 alta, eu distribuo conscientemente a carga do SoftIRQ para aliviar os gargalos sem fragmentar desnecessariamente o caminho dos dados. As placas de rede com v\u00e1rias filas ajudam porque posso atribuir n\u00facleos claramente definidos a cada fila e, assim, obter uma verdadeira paraleliza\u00e7\u00e3o. Eu uso a NAPI para processar pacotes em lotes, de modo que n\u00e3o ocorram tempestades de interrup\u00e7\u00f5es e o tempo de CPU seja utilizado de forma eficiente. Este artigo fornece conhecimentos b\u00e1sicos sobre este caminho: <a href=\"https:\/\/webhosting.de\/pt\/softirq-cpu-hosting-otimizacao-do-debito-da-rede-datacenter\/\">SoftIRQ e taxa de transfer\u00eancia da rede<\/a>.<\/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\/06\/maxperformance-network-optimization-6742.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>RPS\/RFS e localidade do fluxo<\/h2>\n\n<p>Utilizo o RPS para uma distribui\u00e7\u00e3o mais alargada dos pacotes e defino <strong>RFS<\/strong> para que os fluxos acabem nas threads consumidoras. Isso mant\u00e9m os acessos ao cache eficientes e o aplicativo se beneficia de tempos de resposta consistentes. Eu harmonizo a estrat\u00e9gia de hash da NIC, o n\u00famero de filas e os conjuntos de CPU RPS para que nenhuma fila do kernel transborde. A afinidade de fluxo \u00e9 particularmente eficaz para muitas solicita\u00e7\u00f5es curtas, como as geradas por APIs e microsservi\u00e7os. Dessa forma, construo um pipeline no qual cada fluxo toca o mesmo n\u00facleo com a maior frequ\u00eancia poss\u00edvel e evita migra\u00e7\u00f5es desnecess\u00e1rias.<\/p>\n\n<h2>RSS, tabela de indirec\u00e7\u00e3o e XPS: controlo orientado do hashing<\/h2>\n\n<p>Para garantir que a distribui\u00e7\u00e3o comece de forma limpa na NIC, eu ajusto <strong>RSS<\/strong> (Receive Side Scaling) e a tabela de indirec\u00e7\u00e3o para que as filas de RX sejam atribu\u00eddas exatamente aos n\u00facleos que mais tarde transportar\u00e3o as threads da aplica\u00e7\u00e3o. Certifico-me de que o n\u00famero de filas corresponde ao n\u00famero de n\u00facleos utilizados e que as chaves de hash permanecem est\u00e1veis para que os fluxos n\u00e3o se desviem inesperadamente. Se o algoritmo de hash mudar ou se a tabela de indirec\u00e7\u00e3o for substitu\u00edda dinamicamente, isso destruir\u00e1 a localidade do fluxo e promover\u00e1 falhas na cache.<\/p>\n\n<p>No percurso TX, ativo adicionalmente <strong>XPS<\/strong> (Transmit Packet Steering) para que os pacotes de sa\u00edda sejam enviados pelo n\u00facleo que est\u00e1 processando a aplica\u00e7\u00e3o. Isso tamb\u00e9m mant\u00e9m os caches TX perto do trabalhador, e o caminho da fila do soquete para a fila da NIC permanece curto. Eu mantenho os mapeamentos de RX e TX consistentes, documento-os por interface e defino-os em scripts de inicializa\u00e7\u00e3o para que uma reinicializa\u00e7\u00e3o n\u00e3o desfa\u00e7a a arquitetura.<\/p>\n\n<h2>Coalesc\u00eancia de interrup\u00e7\u00f5es: pondera\u00e7\u00e3o da lat\u00eancia em rela\u00e7\u00e3o ao rendimento<\/h2>\n\n<p>Com <strong>Coalesc\u00eancia<\/strong> Eu resumo as interrup\u00e7\u00f5es para reduzir a sobrecarga, mas presto aten\u00e7\u00e3o aos limites de lat\u00eancia da minha aplica\u00e7\u00e3o. Para streaming e VoIP, tenho tend\u00eancia para manter os intervalos curtos, enquanto as transfer\u00eancias em massa toleram bem lotes mais longos. Eu testo passo a passo, me\u00e7o p95\/p99 e verifico quedas, retransmiss\u00f5es e utiliza\u00e7\u00e3o da CPU por n\u00facleo. S\u00f3 ent\u00e3o anoto as configura\u00e7\u00f5es e as documento para cada host e NIC. Este artigo pr\u00e1tico fornece uma vis\u00e3o mais profunda do compromisso: <a href=\"https:\/\/webhosting.de\/pt\/coalescencia-de-interrupcoes-otimizacao-da-rede-serverflux\/\">Explica\u00e7\u00e3o da coalesc\u00eancia de interrup\u00e7\u00f5es<\/a>.<\/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\/06\/tech_office_multi_core_optimierung_4729.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Dosear corretamente as descargas e a agrega\u00e7\u00e3o<\/h2>\n\n<p>Eu fixo <strong>GRO\/LRO<\/strong> para reduzir a sobrecarga da CPU, mas verificar se as minhas cargas de trabalho beneficiam de lotes maiores. As APIs sens\u00edveis \u00e0 lat\u00eancia geralmente respondem melhor quando o GRO \u00e9 moderado e o LRO est\u00e1 desligado, porque grandes super-pacotes podem exacerbar os efeitos de bloqueio de cabe\u00e7a de linha. Para transfer\u00eancias em massa, replica\u00e7\u00e3o ou c\u00f3pias de seguran\u00e7a, utilizo o GRO\/GSO\/TSO de forma mais agressiva, desde que o lado do recetor permane\u00e7a est\u00e1vel e a utiliza\u00e7\u00e3o da CPU diminua.<\/p>\n\n<p><strong>Descargas de checksum<\/strong> e <strong>TSO\/GSO<\/strong> reduzir significativamente a carga na CPU, mas certifico-me de que as caixas interm\u00e9dias, os t\u00faneis ou as incompatibilidades de descarregamento (por exemplo, com determinados encapsulamentos) funcionam corretamente. Se ocorrerem anomalias, reduzo gradualmente as descargas individuais e me\u00e7o os efeitos na taxa de transfer\u00eancia, retransmiss\u00f5es e tempo de CPU. O objetivo \u00e9 um conjunto que permane\u00e7a est\u00e1vel em toda a linha e previs\u00edvel em hor\u00e1rios de pico.<\/p>\n\n<h2>Isolamento da CPU, agendador e estados de energia<\/h2>\n\n<p>Para or\u00e7amentos de lat\u00eancia r\u00edgidos, isolo n\u00facleos para caminhos de rede e trabalhadores de aplica\u00e7\u00f5es. Com <strong>Isolamento da CPU<\/strong> e uma estrat\u00e9gia de manuten\u00e7\u00e3o simples, evito que as tarefas do sistema, Kthreads ou interrup\u00e7\u00f5es do temporizador entrem nos n\u00facleos \u201equentes\u201c. Eu tamb\u00e9m corrijo o <strong>Regulador da CPU<\/strong> para \u201edesempenho\u201c e limitar a profundidade <strong>Estados C<\/strong>, se estes causarem lat\u00eancias de despertar. Mantenho-me atento \u00e0s temperaturas do n\u00facleo, uma vez que o apodrecimento t\u00e9rmico pode arruinar quaisquer retoques finais.<\/p>\n\n<p>A escolha de <strong>Programa\u00e7\u00e3o das aulas<\/strong> influencia a previsibilidade. Eu dou prioridade \u00e0s threads relacionadas \u00e0 rede, mas n\u00e3o as executo de forma agressiva e exclusiva, para que elas n\u00e3o compitam com o ksoftirqd pelo tempo de CPU. Verifico regularmente se o ksoftirqd est\u00e1 a iniciar em n\u00facleos individuais - um sinal claro de que a carga do SoftIRQ \u00e9 demasiado elevada ou est\u00e1 incorretamente distribu\u00edda.<\/p>\n\n<h2>Polling ocupado e caminhos de baixa lat\u00eancia<\/h2>\n\n<p>Quando os microssegundos contam, defino <strong>Sondagem ocupada<\/strong> de uma forma direcionada. As aplica\u00e7\u00f5es podem definir janelas de sondagem para sockets selecionados, de modo a extrair pacotes diretamente dos or\u00e7amentos NAPI sem esperar por interrup\u00e7\u00f5es. Escolho intervalos de sondagem curtos para evitar queimar tempo de CPU e limitar esta t\u00e9cnica a caminhos quentes com tr\u00e1fego constante. Em paralelo, adapto <strong>or\u00e7amentos netdev<\/strong> moderadamente, de modo a que os lotes sejam suficientemente grandes sem que o resto do sistema fique a morrer \u00e0 fome.<\/p>\n\n<h2>Disciplina e ritmo das filas de espera da rede<\/h2>\n\n<p>Configurei o <strong>qdisc<\/strong> por interface para corresponder \u00e0 carga de trabalho. Eu uso disciplinas modernas como fq\/fq_codel para regular o ritmo e o comprimento das filas, a fim de suavizar as explos\u00f5es e evitar o bufferbloat. Em configura\u00e7\u00f5es de filas m\u00faltiplas, eu combino isso com <strong>mqprio<\/strong>, para que as classes de tr\u00e1fego permane\u00e7am consistentemente atribu\u00eddas \u00e0s filas HW corretas. Juntamente com <strong>BQL<\/strong> (Byte Queue Limits) no controlador reduz a lat\u00eancia sob carga total porque a fila n\u00e3o cresce incontrolavelmente.<\/p>\n\n<p>\u00c9 importante interagir com <strong>XPS<\/strong> no caminho TX: Mapeio as filas de envio para os n\u00facleos nos quais os fluxos RX correspondentes tamb\u00e9m aterram. Dessa forma, ambas as dire\u00e7\u00f5es de um fluxo permanecem pr\u00f3ximas \u00e0 CPU e eu obtenho tempos de resposta mais est\u00e1veis com protocolos bidirecionais (por exemplo, HTTP\/2, gRPC).<\/p>\n\n<h2>Fluxo de trabalho pr\u00e1tico no Linux<\/h2>\n\n<p>Come\u00e7o com um registo de carga, verifico a distribui\u00e7\u00e3o da CPU em top\/htop, olho para \/proc\/interrupts e \/proc\/softirqs e leio as estat\u00edsticas ethtool para reconhecer os estrangulamentos e preparar o pr\u00f3ximo <strong>Fluxo de trabalho<\/strong>-passo. Em seguida, determino os IDs de IRQ das filas de NICs relevantes e defino m\u00e1scaras de CPU adequadas que ocupam os n\u00facleos uniformemente e levam em conta o NUMA. Em seguida, eu fixo os trabalhadores da aplica\u00e7\u00e3o via taskset ou systemd-CPUAffinity nos mesmos n\u00facleos que tamb\u00e9m servem as filas associadas. S\u00f3 ativo o RPS\/RFS quando ele refor\u00e7a a localidade do fluxo e mantenho a configura\u00e7\u00e3o consistente por interface. Por fim, me\u00e7o novamente a taxa de transfer\u00eancia, a lat\u00eancia e o jitter antes de implementar as altera\u00e7\u00f5es de maneira uniforme em v\u00e1rios hosts.<\/p>\n\n<h2>Medi\u00e7\u00e3o, evitar p95\/p99 e regress\u00f5es<\/h2>\n\n<p>N\u00e3o me baseio em intui\u00e7\u00f5es, mas me\u00e7o lat\u00eancias, taxas de erro e utiliza\u00e7\u00e3o dos n\u00facleos antes e depois de cada ronda de afina\u00e7\u00e3o, para que <strong>p99<\/strong> permanece est\u00e1vel. Tamb\u00e9m controlo as altera\u00e7\u00f5es de contexto, as taxas de migra\u00e7\u00e3o e a carga por tipo de SoftIRQ para identificar efeitos secund\u00e1rios ocultos numa fase inicial. Mantenho os testes reproduz\u00edveis, utilizo os mesmos conjuntos de dados e vers\u00f5es fixas para que os resultados permane\u00e7am compar\u00e1veis. Descubro as regress\u00f5es com verifica\u00e7\u00f5es cruzadas em condi\u00e7\u00f5es de pico e de inatividade, bem como com execu\u00e7\u00f5es de longa dura\u00e7\u00e3o. S\u00f3 quando as m\u00e9tricas, os registos e os tra\u00e7os da aplica\u00e7\u00e3o coincidem \u00e9 que declaro a configura\u00e7\u00e3o como o novo estado de base.<\/p>\n\n<h2>Virtualiza\u00e7\u00e3o, contentores e SR-IOV<\/h2>\n\n<p>Em ambientes virtualizados, asseguro-me de que <strong>vCPUs<\/strong>, A mem\u00f3ria e as vNICs da VM est\u00e3o localizadas no mesmo n\u00f3 NUMA em que a NIC f\u00edsica associada termina. Sempre que poss\u00edvel, eu uso <strong>SR-IOV<\/strong>, para que o caminho de dados seja curto e as IRQs possam ser vinculadas diretamente aos n\u00facleos convidados. Eu conecto as vCPUs das VMs cr\u00edticas aos n\u00facleos dedicados do host e certifico-me de que as IRQs do host e as IRQs do convidado n\u00e3o se sobreponham. Em configura\u00e7\u00f5es de cont\u00eaineres, eu defino <strong>cpusets<\/strong> e classes de QoS \u201egarantidas\u201c para que os contentores de trabalho e os seus IRQs de rede recebam tempo de CPU de forma previs\u00edvel.<\/p>\n\n<p>Verifico se o irqbalance deve ter a lideran\u00e7a no convidado ou no anfitri\u00e3o - caso contr\u00e1rio, o duplo \u201eautom\u00e1tico\u201c produz uma desfocagem. Com o virtio, defino v\u00e1rias filas e mapeio-as de forma limpa para vCPUs para permitir o trabalho paralelo. Se o vhost-net utiliza n\u00facleos individuais do host, eu redistribuo os backends e mantenho os threads do vhost NUMA pr\u00f3ximos \u00e0 NIC f\u00edsica.<\/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\/06\/servernetzwerkoptmierung-9473.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Resolu\u00e7\u00e3o de problemas: reconhecer padr\u00f5es rapidamente<\/h2>\n\n<ul>\n  <li><strong>N\u00facleos saturados, ksoftirqd ativo:<\/strong> Aproximar as filas de RX, verificar o n\u00famero de filas, ajustar o RPS\/RFS ou aumentar ligeiramente a coalesc\u00eancia.<\/li>\n  <li><strong>Tremula\u00e7\u00e3o do p99:<\/strong> Verificar o desvio NUMA, verificar C-States\/Governor, ajustar as descargas e os tamanhos GRO passo a passo.<\/li>\n  <li><strong>Muitas retransmiss\u00f5es\/quedas:<\/strong> Verificar os tamanhos dos an\u00e9is RX\/TX, qdisc e BQL, verificar a consist\u00eancia da tabela de indirectos e do XPS.<\/li>\n  <li><strong>Fluxos distribu\u00eddos de forma desigual:<\/strong> Equilibrar o hash RSS e a tabela de indirec\u00e7\u00f5es, considerar a fixa\u00e7\u00e3o de fluxos quentes, manter a semente do hash est\u00e1vel.<\/li>\n  <li><strong>Problema apenas com a VM:<\/strong> Colocar os backends do vhost\/virtio perto do NUMA, avaliar o SR-IOV, separar as IRQs entre o host e o convidado.<\/li>\n<\/ul>\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\/06\/entwicklerschreibtisch_4312.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Incluir aplica\u00e7\u00f5es e bases de dados<\/h2>\n\n<p>Um caminho de rede limpo \u00e9 de pouca utilidade se os servidores de aplica\u00e7\u00f5es ou as bases de dados n\u00e3o estiverem a funcionar em paralelo, raz\u00e3o pela qual configurei o <strong>Trabalhador<\/strong>-N\u00famero de threads, pools de threads e limites de conex\u00e3o para os n\u00facleos dispon\u00edveis. Atribuo os trabalhadores do NGINX ou do HAProxy aos n\u00facleos adequados para que correspondam \u00e0s filas de RX. Dimensiono o PHP-FPM, o Node.js, o Java ou o Go para que favore\u00e7am o dom\u00ednio NUMA local e utilizem v\u00e1rias inst\u00e2ncias, se necess\u00e1rio. Eu integro caches como Redis ou Memcached perto da CPU e presto aten\u00e7\u00e3o aos seus pr\u00f3prios par\u00e2metros de rede e thread. Somente a intera\u00e7\u00e3o entre afinidade de IRQ, fixa\u00e7\u00e3o de processos e escalonamento de aplicativos fornece o aumento percet\u00edvel na lat\u00eancia e na taxa de transfer\u00eancia.<\/p>\n\n<h2>Cen\u00e1rios de alojamento com grandes benef\u00edcios<\/h2>\n\n<p>Invisto principalmente no deep tuning quando as APIs geram muitos pedidos curtos ou quando <strong>Tempo real<\/strong>-As comunica\u00e7\u00f5es, como VoIP e chats, exigem valores de jitter baixos. As configura\u00e7\u00f5es de com\u00e9rcio eletr\u00f3nico com picos de carga beneficiam porque os fluxos de checkout s\u00e3o sens\u00edveis \u00e0 lat\u00eancia. Os anfitri\u00f5es multi-tenant com elevada densidade beneficiam porque os n\u00facleos dedicados por fila reduzem os efeitos de vizinhan\u00e7a. Os servi\u00e7os de streaming tamb\u00e9m podem obter um maior d\u00e9bito por euro sem a aquisi\u00e7\u00e3o imediata de novo hardware. Os custos continuam a ser calcul\u00e1veis, desde que as altera\u00e7\u00f5es sejam mensur\u00e1veis e implementadas com exatid\u00e3o.<\/p>\n\n<h2>Tabela de refer\u00eancia r\u00e1pida: N\u00facleos, filas de espera, ferramentas<\/h2>\n\n<p>Eu uso o seguinte <strong>Tabela<\/strong> como um lembrete quando eu configurar novos hosts ou recalibrar configura\u00e7\u00f5es existentes. Ele mostra alvos t\u00edpicos, medidas apropriadas, ferramentas comuns do Linux e o efeito pretendido na lat\u00eancia e na taxa de transfer\u00eancia. N\u00e3o o utilizo de forma dogm\u00e1tica, mas como ponto de partida para uma s\u00e9rie de medi\u00e7\u00f5es com tr\u00e1fego real. Se a arquitetura da placa de rede ou a topologia NUMA variar, adapto a sele\u00e7\u00e3o do n\u00facleo. Continua a ser importante manter a documenta\u00e7\u00e3o para cada anfitri\u00e3o e manter as altera\u00e7\u00f5es rastre\u00e1veis.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Objetivo<\/th>\n      <th>Medida<\/th>\n      <th>Ferramenta\/localiza\u00e7\u00e3o do Linux<\/th>\n      <th>Efeito esperado<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Distribuir a carga de IRQ<\/td>\n      <td>Ligar pistas aos n\u00facleos<\/td>\n      <td>\/proc\/irq\/*\/smp_affinity<\/td>\n      <td>Menos hotspots, lat\u00eancia mais constante<\/td>\n    <\/tr>\n    <tr>\n      <td>Aumentar a localidade do fluxo<\/td>\n      <td>Definir conjuntos de CPU RPS\/RFS<\/td>\n      <td>\/sys\/class\/net\/*\/queues\/*\/rps_cpus<\/td>\n      <td>Menos migra\u00e7\u00f5es, melhores caches<\/td>\n    <\/tr>\n    <tr>\n      <td>Controlar o processamento de lotes<\/td>\n      <td>Afinar a NAPI\/coalesc\u00eancia<\/td>\n      <td>ethtool -C \/ driver defaults<\/td>\n      <td>Menor sobrecarga, jitter controlado<\/td>\n    <\/tr>\n    <tr>\n      <td>Emparelhar a aplica\u00e7\u00e3o e o IRQ<\/td>\n      <td>Trabalhador com pinos<\/td>\n      <td>conjunto de tarefas, systemd CPUAffinity<\/td>\n      <td>Caminho mais curto, menor p99<\/td>\n    <\/tr>\n    <tr>\n      <td>Evitar NUMA<\/td>\n      <td>Co-localizar dispositivos e n\u00facleos<\/td>\n      <td>numactl, lscpu, lspci -vv<\/td>\n      <td>Menos acesso remoto, mais rendimento<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Melhores pr\u00e1ticas que funcionam a longo prazo<\/h2>\n\n<p>Apenas altero uma alavanca de controlo por cada ronda de testes, documento as m\u00e9tricas e guardo os resultados. <strong>Documenta\u00e7\u00e3o<\/strong> no reposit\u00f3rio do host. Mantenho as configura\u00e7\u00f5es consistentes, descrevendo claramente os mapeamentos de fila para n\u00facleo e usando scripts para replica\u00e7\u00e3o. Monitorizo os registos de quedas, retransmiss\u00f5es e tempos limite e correlaciono-os com as m\u00e9tricas do kernel. Incluo o hipervisor e o n\u00edvel de armazenamento na an\u00e1lise para que n\u00e3o subsistam estrangulamentos obscuros. Tenho revers\u00f5es prontas para o caso de os testes mostrarem efeitos negativos ou as cargas de trabalho mudarem.<\/p>\n\n<h2>Brevemente resumido<\/h2>\n\n<p>Consigo obter o m\u00e1ximo desempenho da rede utilizando interrup\u00e7\u00f5es, <strong>Tacos<\/strong> e trabalhadores e, assim, manter est\u00e1vel o caminho de dados por fluxo. O IRQ Affinity distribui a carga de hardware de forma sensata, enquanto os SoftIRQs, NAPI e RPS\/RFS tornam o processamento eficiente. A proximidade NUMA protege contra desvios de mem\u00f3ria evit\u00e1veis e reduz a instabilidade. O ajuste passo a passo com medi\u00e7\u00f5es reproduz\u00edveis evita configura\u00e7\u00f5es incorrectas e mostra um progresso real. Se pensar nestes blocos de constru\u00e7\u00e3o em conjunto, pode utilizar com confian\u00e7a as capacidades dos modernos servidores multi-core para servi\u00e7os cr\u00edticos em termos de lat\u00eancia.<\/p>","protected":false},"excerpt":{"rendered":"<p>Descubra como o Server IRQ Affinity e a otimiza\u00e7\u00e3o da rede multi-core aceleram o processamento de pacotes e tiram o m\u00e1ximo partido da rede multicore no alojamento.<\/p>","protected":false},"author":1,"featured_media":19738,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-19745","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":"105","_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 Affinity","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":"19738","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/19745","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=19745"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/19745\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/19738"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=19745"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=19745"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=19745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}