{"id":21103,"date":"2026-08-28T11:49:48","date_gmt":"2026-08-28T09:49:48","guid":{"rendered":"https:\/\/webhosting.de\/numa-balancing-deaktivieren-oder-aktiv-lassen-linux-performance-optimal\/"},"modified":"2026-08-28T11:49:48","modified_gmt":"2026-08-28T09:49:48","slug":"desativar-o-numa-balancing-ou-mante-lo-ativado-para-um-desempenho-ideal-do-linux","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/numa-balancing-deaktivieren-oder-aktiv-lassen-linux-performance-optimal\/","title":{"rendered":"Equil\u00edbrio NUMA no Linux: desativar ou deixar ativado?"},"content":{"rendered":"<p>O equil\u00edbrio NUMA no Linux determina se o <strong>Kernel<\/strong> Se os acessos \u00e0 mem\u00f3ria s\u00e3o localizados automaticamente ou se sou eu pr\u00f3prio a controlar a localiza\u00e7\u00e3o de forma espec\u00edfica. Neste guia, mostro quando devo manter o \u00abnuma balancing\u00bb ativo e quando devo desativ\u00e1-lo para <strong>Lat\u00eancia<\/strong>- Desative a seguran\u00e7a.<\/p>\n\n<h2>Pontos centrais<\/h2>\n\n<ul>\n  <li><strong>Autom\u00e1tico<\/strong> ajuda em cargas de trabalho mistas sem ajuste NUMA.<\/li>\n  <li><strong>Desativar<\/strong> em casos de pinning, pol\u00edticas est\u00e1ticas ou lat\u00eancia elevada.<\/li>\n  <li><strong>Despesas gerais<\/strong> resulta de an\u00e1lises, falhas e migra\u00e7\u00f5es.<\/li>\n  <li><strong>Configura\u00e7\u00e3o<\/strong> controlar atrav\u00e9s do Sysctl ou de par\u00e2metros de arranque.<\/li>\n  <li><strong>Ensaios<\/strong> e medir em vez de adivinhar, e s\u00f3 depois decidir.<\/li>\n<\/ul>\n\n<h2>NUMA explicada de forma sucinta: lat\u00eancias e localidade<\/h2>\n\n<p>Nos sistemas NUMA, o hardware organiza a mem\u00f3ria em v\u00e1rios n\u00f3s, sendo que cada um dos <strong>CPUs<\/strong> est\u00e3o geograficamente pr\u00f3ximos. Os acessos locais demoram menos tempo do que os distantes, o que percebo imediatamente em <strong>Lat\u00eancia<\/strong> e sinto a limita\u00e7\u00e3o da largura de banda. Se um processo estiver a ser executado num n\u00f3, mas os dados estiverem noutro, perco microsegundos valiosos por cada acesso. \u00c9 precisamente aqui que o kernel entra em a\u00e7\u00e3o e otimiza a <strong>Local<\/strong> em termos de p\u00e1ginas. Quem compreender a ideia de base percebe rapidamente que a proximidade entre os n\u00facleos de processamento e os dados \u00e9 o caminho direto para uma <strong>Desempenho<\/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-numa-balancing-2345.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Como funciona o equil\u00edbrio autom\u00e1tico NUMA<\/h2>\n\n<p>O kernel observa a partir de que n\u00facleos um processo acede \u00e0s p\u00e1ginas e executa de forma espec\u00edfica <strong>Dica<\/strong>-Faults. Desta forma, o sistema identifica qual o n\u00f3 que recebe mais acessos e, em seguida, transfere as p\u00e1ginas adequadas para esse n\u00f3. Estas migra\u00e7\u00f5es reduzem os acessos remotos e aumentam o tr\u00e1fego local <strong>Taxa de acerto<\/strong>. Vejo esse efeito especialmente em cargas de trabalho din\u00e2micas, nas quais os threads migram e a mem\u00f3ria se desloca. Quem quiser aprofundar o assunto pode explorar as rela\u00e7\u00f5es entre a proximidade da CPU e da mem\u00f3ria atrav\u00e9s de <a href=\"https:\/\/webhosting.de\/pt\/servidor-numa-localidade-cpu-memoria-afinidade-otimizacao-nucleo\/\">Afinidade de CPU\/mem\u00f3ria<\/a> compreender na pr\u00e1tica.<\/p>\n\n<h2>Quando manter ativo: cargas de trabalho t\u00edpicas<\/h2>\n\n<p>Deixo a fun\u00e7\u00e3o ativa quando as aplica\u00e7\u00f5es n\u00e3o possuem uma l\u00f3gica NUMA pr\u00f3pria e os processos frequentemente <strong>mudan\u00e7a<\/strong>. Os candidatos mais comuns s\u00e3o servidores de aplica\u00e7\u00f5es, bases de dados com carga vari\u00e1vel e hosts com muitos <strong>Container<\/strong>. Nestas configura\u00e7\u00f5es, o sistema autom\u00e1tico aproxima as p\u00e1ginas e os t\u00f3picos, sem que eu tenha de os fixar manualmente. Especialmente em servidores com v\u00e1rios sockets, a percentagem de acessos locais aumenta sensivelmente. Para os administradores com servi\u00e7os heterog\u00e9neos, isto proporciona uma boa <strong>Compromisso<\/strong> em termos de tempo e esfor\u00e7o.<\/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\/numa_balancing_linux_5843.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Quando desativar: crit\u00e9rios claros<\/h2>\n\n<p>Desligo o modo autom\u00e1tico assim que percebo que estou a remar de forma consciente ou a remar com precis\u00e3o <strong>Pol\u00edticas<\/strong> defina. Se utilizar o numactl, os cgroups ou o MPOL_BIND\/MPOL_PREFERRED, j\u00e1 existe uma decis\u00e3o definitiva sobre os percursos de mem\u00f3ria. Nesse caso, os \u00abhint-faults\u00bb e as migra\u00e7\u00f5es geram um desperd\u00edcio desnecess\u00e1rio <strong>Despesas gerais<\/strong>. O mesmo se aplica a cen\u00e1rios em tempo real ou de HFT, em que cada microsegundo conta e a previsibilidade \u00e9 uma prioridade. Quem se aprofundar na escolha das regras de coloca\u00e7\u00e3o beneficia de uma an\u00e1lise das op\u00e7\u00f5es adequadas <a href=\"https:\/\/webhosting.de\/pt\/politicas-de-memoria-numa-otimizacao-de-servidores-de-bases-de-dados-servidores\/\">Pol\u00edticas de mem\u00f3ria<\/a>.<\/p>\n\n<h2>Compreender e medir os custos indiretos<\/h2>\n\n<p>O equil\u00edbrio autom\u00e1tico implica trabalho: an\u00e1lises, <strong>Falhas<\/strong> e as migra\u00e7\u00f5es de p\u00e1ginas consomem tempo de CPU. Isso quase n\u00e3o se nota quando os acessos remotos diminuem significativamente, mas dificilmente compensa quando o layout j\u00e1 est\u00e1 armazenado localmente. Por isso, verifico sempre o impacto real com o numastat, o perf e m\u00e9tricas significativas <strong>Refer\u00eancias<\/strong>. O que \u00e9 interessante \u00e9 a evolu\u00e7\u00e3o ao longo dos minutos, n\u00e3o apenas um pico breve. S\u00f3 quando os valores medidos indicarem de forma consistente que os acessos locais est\u00e3o a aumentar e as lat\u00eancias a diminuir \u00e9 que mantenho esse modo.<\/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\/numa-balancing-decision-linux-4539.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Configura\u00e7\u00e3o: Sysctl e par\u00e2metros de arranque<\/h2>\n\n<p>Verifico o estado atrav\u00e9s de \/proc ou Sysctl e, se necess\u00e1rio, altero-o imediatamente, sem um <strong>Reiniciar<\/strong>. Para testes, bastam comandos simples como os que se seguem, que executo na consola. A longo prazo, defino o valor num ficheiro sysctl, para que se mantenha ap\u00f3s um rein\u00edcio. Quem quiser definir isto j\u00e1 durante o arranque, pode utilizar o par\u00e2metro do kernel numa_balancing=enable ou <strong>desativar<\/strong>. Registo todas as altera\u00e7\u00f5es e anoto em que fase do volume de trabalho as realizei.<\/p>\n\n<pre><code>cat \/proc\/sys\/kernel\/numa_balancing\necho 0 &gt; \/proc\/sys\/kernel\/numa_balancing\nsysctl -w kernel.numa_balancing=1\n# \/etc\/sysctl.d\/90-numa.conf\n# kernel.numa_balancing = 0\n<\/code><\/pre>\n\n<h2>Cen\u00e1rios de contentores e virtualiza\u00e7\u00e3o<\/h2>\n\n<p>Em hosts com muitas m\u00e1quinas virtuais e contentores, a automatiza\u00e7\u00e3o <strong>Localiza\u00e7\u00e3o<\/strong> muitas vezes revelam os seus pontos fortes. Os processos iniciam-se e terminam, os Cgroups redistribuem a carga e o kernel mant\u00e9m a mem\u00f3ria mais pr\u00f3xima dos n\u00facleos ativos. Observo isso sobretudo em grandes servidores multi-socket com v\u00e1rios <strong>N\u00f3s<\/strong>. Nos casos especiais em que \u00e9 necess\u00e1rio fixar rigorosamente inst\u00e2ncias individuais, fa\u00e7o uma distin\u00e7\u00e3o clara e desativo a fun\u00e7\u00e3o autom\u00e1tica de forma espec\u00edfica nesses casos. Para uma classifica\u00e7\u00e3o mais aprofundada, vale a pena dar uma vista de olhos a exemplos pr\u00e1ticos <a href=\"https:\/\/webhosting.de\/pt\/numa-balanceamento-servidor-memoria-otimizacao-hardware-numaflux\/\">Otimiza\u00e7\u00e3o NUMA<\/a> em modo anfitri\u00e3o.<\/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\/numa_balancing_linux_5823.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Tabela de decis\u00e3o para a pr\u00e1tica<\/h2>\n\n<p>A s\u00edntese que se segue resume cen\u00e1rios t\u00edpicos, o impacto esperado e a minha posi\u00e7\u00e3o clara <strong>Recomenda\u00e7\u00e3o<\/strong>. Utilizo-as como ponto de partida, mas nunca as substituo por valores medidos no sistema real. Cada ambiente apresenta as suas particularidades, e s\u00f3 tomo decis\u00f5es ap\u00f3s obter resultados reproduz\u00edveis <strong>Resultados<\/strong> com certeza. Quem procede de forma sistem\u00e1tica poupa tempo mais tarde na dete\u00e7\u00e3o de erros e no ajuste. Pequenos testes antes de uma implementa\u00e7\u00e3o compensam quase sempre em <strong>Constan\u00e7a<\/strong> e previsibilidade.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Cen\u00e1rio<\/th>\n      <th>Efeito t\u00edpico<\/th>\n      <th>A minha recomenda\u00e7\u00e3o<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Cargas de trabalho padr\u00e3o sem otimiza\u00e7\u00e3o NUMA<\/td>\n      <td>Mais acessos locais, menos acessos remotos <strong>Leituras<\/strong><\/td>\n      <td>Deixar ativo<\/td>\n    <\/tr>\n    <tr>\n      <td>Bases de dados com carga vari\u00e1vel<\/td>\n      <td>Localiza\u00e7\u00e3o din\u00e2mica de p\u00e1ginas, moderada <strong>Digitaliza\u00e7\u00f5es<\/strong><\/td>\n      <td>Manter ativo, testar<\/td>\n    <\/tr>\n    <tr>\n      <td>Tempo real estrito ou HFT<\/td>\n      <td>A lat\u00eancia de falha de cache \u00e9 um problema <strong>Jitter<\/strong>-Objetivos<\/td>\n      <td>Desativar, fixar manualmente<\/td>\n    <\/tr>\n    <tr>\n      <td>Fixa\u00e7\u00e3o manual atrav\u00e9s do numactl\/cgroups<\/td>\n      <td>Ve\u00edculo autom\u00e1tico colide com objeto fixo <strong>Pol\u00edticas<\/strong><\/td>\n      <td>Desativar<\/td>\n    <\/tr>\n    <tr>\n      <td>Pol\u00edticas de mem\u00f3ria est\u00e1ticas (MPOL_BIND, etc.)<\/td>\n      <td>As migra\u00e7\u00f5es n\u00e3o trazem nenhum verdadeiro <strong>Vantagem<\/strong><\/td>\n      <td>Desativar<\/td>\n    <\/tr>\n    <tr>\n      <td>Ambiente de teste\/an\u00e1lise<\/td>\n      <td>Boa vis\u00e3o da localidade e <strong>Efeitos<\/strong><\/td>\n      <td>Manter ativo, verificar variantes<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Guia para ensaios e valida\u00e7\u00e3o<\/h2>\n\n<p>Come\u00e7o com o Balancer ativado e registo os dados locais em compara\u00e7\u00e3o com os remotos <strong>Acessos<\/strong> atrav\u00e9s do Numastat. Em seguida, desativo a fun\u00e7\u00e3o e repito as medi\u00e7\u00f5es exatamente da mesma forma. Avalio as diferen\u00e7as n\u00e3o s\u00f3 em termos de valores m\u00e9dios, mas tamb\u00e9m em <strong>Percentis<\/strong>. Os testes de regress\u00e3o com perfis de carga da produ\u00e7\u00e3o fornecem os resultados mais fi\u00e1veis. S\u00f3 ent\u00e3o \u00e9 que tomo a decis\u00e3o definitiva em rela\u00e7\u00e3o ao servidor, \u00e0 m\u00e1quina virtual ou a um determinado <strong>Servi\u00e7o<\/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\/devdesk_linux_numa_bal_7283.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Obst\u00e1culos frequentes e mitos<\/h2>\n\n<p>Um equ\u00edvoco comum \u00e9 pensar que o sistema autom\u00e1tico substitui qualquer <strong>Fixa\u00e7\u00e3o<\/strong>. Isso n\u00e3o \u00e9 verdade, pois os or\u00e7amentos de lat\u00eancia r\u00edgidos mal suportam falhas adicionais. Igualmente errada \u00e9 a suposi\u00e7\u00e3o de que as migra\u00e7\u00f5es s\u00e3o sempre <strong>sem custos<\/strong> acontecer. Especialmente no caso de layouts que, de qualquer forma, s\u00e3o locais, a sobrecarga tem, na maioria das vezes, um impacto mais negativo do que positivo. Quem evita os mitos e faz medi\u00e7\u00f5es precisas toma decis\u00f5es com uma precis\u00e3o significativamente maior <strong>Exatid\u00e3o<\/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-numa-balancing-8192.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Limites da automa\u00e7\u00e3o e intera\u00e7\u00f5es<\/h2>\n\n<p>O AutoNUMA tem um forte impacto nas p\u00e1ginas an\u00f3nimas que um pr\u00f3prio processo aloca. No entanto, nem tudo pode ser migrado de forma sensata. As p\u00e1ginas fixadas (mlock), a mem\u00f3ria DMA\/de dispositivos, o DAX ou as \u00e1reas registadas pelo RDMA permanecem onde est\u00e3o. Tamb\u00e9m as p\u00e1ginas partilhadas (por exemplo, bibliotecas altamente partilhadas ou a cache de p\u00e1ginas) proporcionam apenas benef\u00edcios limitados com a migra\u00e7\u00e3o, uma vez que v\u00e1rios processos competem entre si <strong>Padr\u00e3o de acesso<\/strong> gerar. Al\u00e9m disso, tenho em conta os custos de <strong>P\u00e1ginas enormes transparentes<\/strong> (THP): a sua migra\u00e7\u00e3o \u00e9 mais dispendiosa do que no caso das p\u00e1ginas de 4 KiB e pode causar picos de carga. Quem tem objetivos rigorosos em termos de lat\u00eancia costuma combinar THP=never ou madvise com o balanceamento desativado e o pinning limpo, para evitar surpresas.<\/p>\n\n<p>Outro aspeto \u00e9 a intera\u00e7\u00e3o com o agendador da CPU. O agendador tenta colocar os threads onde se encontram os seus dados \u2013 e o equilibrador deslocar os dados para onde os threads est\u00e3o a ser executados. Ambos complementam-se, mas, em caso de carga inst\u00e1vel, podem causar, temporariamente, <strong>Oscila\u00e7\u00f5es<\/strong> provocar. Na pr\u00e1tica, os intervalos de an\u00e1lise atenuam estes efeitos; quem observar perfis de carga extremamente inst\u00e1veis pode atenuar a situa\u00e7\u00e3o atrav\u00e9s de per\u00edodos de an\u00e1lise mais longos ou de um \u00abthread-pinning\u00bb mais est\u00e1vel.<\/p>\n\n<h2>Ajuste fino dos par\u00e2metros de digitaliza\u00e7\u00e3o<\/h2>\n\n<p>Para al\u00e9m do interruptor global, existem par\u00e2metros do kernel que me permitem ajustar com precis\u00e3o a agressividade do sistema autom\u00e1tico. Os nomes exatos podem variar ligeiramente consoante a vers\u00e3o do kernel, mas o objetivo mant\u00e9m-se o mesmo:<\/p>\n\n<ul>\n  <li>kernel.numa_balancing_scan_delay_ms: Tempo de espera ap\u00f3s o arranque, fork ou exec, at\u00e9 que a primeira verifica\u00e7\u00e3o comece.<\/li>\n  <li>kernel.numa_balancing_scan_period_min_ms \/ _max_ms: Limites m\u00ednimo e m\u00e1ximo da frequ\u00eancia de varredura por intervalo de endere\u00e7os de processo.<\/li>\n  <li>kernel.numa_balancing_rate_limit_mb: Limite m\u00e1ximo por intervalo de tempo para migra\u00e7\u00f5es de p\u00e1ginas, com o objetivo de poupar largura de banda de mem\u00f3ria.<\/li>\n  <li>kernel.numa_balancing_scan_size_mb: Quantidade de mem\u00f3ria que \u00e9 marcada por cada passagem de varredura (se dispon\u00edvel).<\/li>\n<\/ul>\n\n<p>Por precau\u00e7\u00e3o, em configura\u00e7\u00f5es em que a lat\u00eancia \u00e9 cr\u00edtica, aumentei os per\u00edodos m\u00ednimo e m\u00e1ximo e reduzi os limites de taxa, em vez de desligar imediatamente o modo autom\u00e1tico. Isto proporciona frequentemente um bom equil\u00edbrio: menos erros de indica\u00e7\u00e3o, menos migra\u00e7\u00f5es, mas ainda com rea\u00e7\u00e3o suficiente a erros de localiza\u00e7\u00e3o reais.<\/p>\n\n<pre><code>Exemplos # (tempor\u00e1rios, at\u00e9 ao rein\u00edcio)\nsysctl -w kernel.numa_balancing_scan_period_min_ms=60000\nsysctl -w kernel.numa_balancing_scan_period_max_ms=240000\nsysctl -w kernel.numa_balancing_rate_limit_mb=64\n<\/code><\/pre>\n\n<h2>M\u00e9tricas e diagn\u00f3stico aprofundados<\/h2>\n\n<p>Para tomar decis\u00f5es fundamentadas, analiso m\u00e9tricas que revelam diretamente o mecanismo subjacente. Recorro regularmente a tr\u00eas fontes:<\/p>\n\n<ul>\n  <li>numastat: Propor\u00e7\u00e3o de acessos locais\/remotos a n\u00edvel do sistema e por processo.<\/li>\n  <li>\/proc\/\/numa_maps: distribui\u00e7\u00e3o das p\u00e1ginas de mem\u00f3ria de um processo pelos n\u00f3s, incluindo indicadores como \u00abactive\u00bb, \u00abfile\u00bb e \u00abanon\u00bb.<\/li>\n  <li>\/proc\/vmstat: Contadores como numa_hint_faults, numa_hint_faults_local e numa_pages_migrated indicam se o balanceador est\u00e1 a funcionar e se este <strong>Sucesso<\/strong> tem.<\/li>\n<\/ul>\n\n<pre><code>Vis\u00e3o geral do # por processo\nnumastat -p \n\nVis\u00e3o detalhada do #: quais as \u00e1reas e onde se encontram?\ngrep -E 'anon|file' \/proc\/\/numa_maps | head\n\n# Vis\u00e3o ao n\u00edvel do kernel da atividade AutoNUMA\ngrep -E 'numa_(hint_faults|pages_migrated)' \/proc\/vmstat\n<\/code><\/pre>\n\n<p>Nos resultados, procuro identificar tend\u00eancias: a percentagem de acessos locais est\u00e1 a aumentar de forma constante? Ao mesmo tempo, os erros de lat\u00eancia est\u00e3o a diminuir? Nesse caso, significa que o layout est\u00e1 a funcionar bem. Se a percentagem de acessos locais se mantiver est\u00e1vel, apesar de muitas migra\u00e7\u00f5es, tendo a desperdi\u00e7ar ciclos. Para os objetivos de lat\u00eancia, verifico adicionalmente os percentis 95.\u00ba e 99.\u00ba dos tempos de resposta; pequenos ganhos na m\u00e9dia podem ser compensados por <strong>Jitter<\/strong> serem encobridos.<\/p>\n\n<h2>Perfis de carga de trabalho: o que costuma funcionar<\/h2>\n\n<p>A partir da experi\u00eancia pr\u00e1tica, identificaram-se alguns padr\u00f5es que indicam em que situa\u00e7\u00f5es o AutoNUMA costuma ser \u00fatil e em que situa\u00e7\u00f5es n\u00e3o o \u00e9:<\/p>\n\n<ul>\n  <li>Servi\u00e7os JVM e servidores de aplica\u00e7\u00f5es: na maioria das vezes, beneficiam-se, desde que n\u00e3o esteja ativa uma estrat\u00e9gia r\u00edgida de fixa\u00e7\u00e3o de threads nem uma l\u00f3gica NUMA pr\u00f3pria e agressiva. Alguns ambientes de execu\u00e7\u00e3o oferecem op\u00e7\u00f5es NUMA; quando as utilizo de forma rigorosa, reduzo a automa\u00e7\u00e3o ou desativo-a.<\/li>\n  <li>Bases de dados relacionais: em caso de carga vari\u00e1vel com caches mistos, o mecanismo autom\u00e1tico funciona frequentemente bem. No entanto, se configurar o \u00abpinning\u00bb dedicado (Worker-to-Node, buffers partilhados distribu\u00eddos de forma estrita), desativo o equil\u00edbrio para garantir uma reprodutibilidade precisa.<\/li>\n  <li>Armazenamentos em mem\u00f3ria e caches: um conjunto de dados grande e ativo beneficia do armazenamento local. Se a inst\u00e2ncia estiver a funcionar em modo single-threaded ou com fixa\u00e7\u00e3o estrita, evito migra\u00e7\u00f5es desnecess\u00e1rias desativando essa funcionalidade.<\/li>\n  <li>HPC\/MPI e c\u00f3digos cient\u00edficos: Na maioria dos casos, existem regras claras de coloca\u00e7\u00e3o e liga\u00e7\u00e3o (OpenMP\/numactl). Neste contexto, a previsibilidade \u00e9 mais importante do que a automatiza\u00e7\u00e3o \u2013 por isso, desativo o balanceamento NUMA.<\/li>\n<\/ul>\n\n<h2>Virtualiza\u00e7\u00e3o: vNUMA, pinning e migra\u00e7\u00e3o em tempo real<\/h2>\n\n<p>Na intera\u00e7\u00e3o entre anfitri\u00e3o e h\u00f3spede, tenho em conta ambos os n\u00edveis:<\/p>\n\n<ul>\n  <li>Se a topologia vNUMA no convidado corresponder \u00e0 topologia NUMA f\u00edsica do anfitri\u00e3o, o balanceador do convidado poder\u00e1 tomar decis\u00f5es adequadas. Se houver diverg\u00eancias, surgem \u201evizinhan\u00e7as incorretas\u201c, que o AutoNUMA apenas compensa de forma limitada.<\/li>\n  <li>Se eu atribuir vCPUs de forma fixa \u00e0s CPUs do anfitri\u00e3o e vincular a mem\u00f3ria do convidado a n\u00f3s espec\u00edficos, isso constitui uma pol\u00edtica expl\u00edcita \u2013 reduzo ou desativo o AutoNUMA a este n\u00edvel da VM, para evitar migra\u00e7\u00f5es duplicadas.<\/li>\n  <li>Ap\u00f3s as migra\u00e7\u00f5es em produ\u00e7\u00e3o, observo uma fase de estabiliza\u00e7\u00e3o: os erros \u00abHint-Faults\u00bb aumentam at\u00e9 se estabelecer um novo equil\u00edbrio. Durante este per\u00edodo, prevejo margens para <strong>Lat\u00eancia<\/strong>-pontas.<\/li>\n<\/ul>\n\n<p>Em hosts de virtualiza\u00e7\u00e3o com alta densidade, onde as inst\u00e2ncias s\u00e3o iniciadas\/paradas e os Cgroups redistribuem a carga, o funcionamento autom\u00e1tico no host continua frequentemente a ser uma vantagem l\u00edquida. Para m\u00e1quinas virtuais dedicadas sens\u00edveis a \u201evizinhos ruidosos\u201c, isolo os recursos de forma clara e defino as regras de forma est\u00e1tica.<\/p>\n\n<h2>Valores-alvo pragm\u00e1ticos e crit\u00e9rios de aceita\u00e7\u00e3o<\/h2>\n\n<p>Defino antecipadamente o que significa \u201ebom\u201c, para n\u00e3o ficar a fazer ajustes intermin\u00e1veis:<\/p>\n\n<ul>\n  <li>Servi\u00e7os gerais: 70\u201385% acessos locais s\u00e3o frequentemente suficientes, desde que a vari\u00e2ncia se mantenha baixa.<\/li>\n  <li>SLAs de lat\u00eancia: Objetivo &gt;90% local, limites m\u00e1ximos claros para a taxa de falhas ocultas e percentil 99.\u00ba est\u00e1vel.<\/li>\n  <li>Com grande consumo de largura de banda: as migra\u00e7\u00f5es n\u00e3o devem saturar os canais de armazenamento \u2013 ajustar os limites de taxa e os per\u00edodos em conformidade.<\/li>\n<\/ul>\n\n<p>Documento estes limiares e analiso os testes A\/B ao longo de v\u00e1rias fases de carga. S\u00f3 tomo uma decis\u00e3o quando os resultados forem repet\u00edveis.<\/p>\n\n<h2>Lista de verifica\u00e7\u00e3o de resolu\u00e7\u00e3o de problemas<\/h2>\n\n<ul>\n  <li>Picos repentinos de lat\u00eancia: verificar se h\u00e1 correla\u00e7\u00e3o entre as migra\u00e7\u00f5es do THP e os picos no \u00abnuma_hint_faults\u00bb. Medida corretiva: aumentar os per\u00edodos de varredura, definir o THP para \u00abmadvise\/never\u00bb e, se necess\u00e1rio, desativar o \u00abBalance\u00bb.<\/li>\n  <li>Pouco efeito apesar da ativa\u00e7\u00e3o: ser\u00e1 que os threads est\u00e3o fortemente fixados ou existem pol\u00edticas de mem\u00f3ria r\u00edgidas? Nesse caso, o sistema autom\u00e1tico entra em conflito com as configura\u00e7\u00f5es definidas.<\/li>\n  <li>Ritmo de migra\u00e7\u00e3o elevado, mas mesmo assim muitos acessos remotos: verificar e aumentar o limite de taxa; em alternativa, estabilizar a carga de trabalho (fixa\u00e7\u00e3o de threads, manter as caches est\u00e1veis em termos de temperatura).<\/li>\n  <li>Valores de medi\u00e7\u00e3o pouco claros: utilizar a perspetiva por processo com o comando `numastat -p` e `\/proc\/\/numa_maps`, em vez de se basear apenas nos valores globais do sistema.<\/li>\n<\/ul>\n\n<h2>Detalhes frequentemente ignorados<\/h2>\n\n<ul>\n  <li>Cargas de trabalho com grande utiliza\u00e7\u00e3o da cache de p\u00e1ginas: o AutoNUMA tem efeito sobretudo em p\u00e1ginas an\u00f3nimas. Quem trabalha principalmente com restri\u00e7\u00f5es de E\/S n\u00e3o deve esperar milagres com o balanceamento.<\/li>\n  <li>Cgroups e cpusets: o ficheiro cpuset.mems limita os n\u00f3s aos quais um grupo tem acesso. Trata-se de um quadro r\u00edgido, dentro do qual o sistema autom\u00e1tico opera.<\/li>\n  <li>Inser\u00e7\u00e3o a quente de mem\u00f3ria\/desativa\u00e7\u00e3o de n\u00f3s: as topologias din\u00e2micas alteram as dist\u00e2ncias; ap\u00f3s as altera\u00e7\u00f5es, recomenda-se realizar um novo teste e, se necess\u00e1rio, ajustar os par\u00e2metros de varredura.<\/li>\n<\/ul>\n\n<h2>Brevemente resumido<\/h2>\n\n<p>Para cargas de trabalho gerais do servidor, deixo a fun\u00e7\u00e3o autom\u00e1tica ativada, porque, sem interven\u00e7\u00e3o manual, aproxima-se <strong>Dados<\/strong> o que leva \u00e0 ativa\u00e7\u00e3o de n\u00facleos. Em tempo real, HFT, fixa\u00e7\u00e3o manual ou pol\u00edticas fixas, desativo-os para evitar sobrecarga e jitter. Nas fases de teste, trabalho de forma iterativa: medir, decidir, repetir <strong>validar<\/strong>. Mantenho a configura\u00e7\u00e3o simples, documento cada altera\u00e7\u00e3o e verifico o impacto atrav\u00e9s de indicadores fi\u00e1veis. \u00c9 assim que aproveito os pontos fortes do hardware NUMA, sem <strong>Riscos<\/strong> assumir.<\/p>","protected":false},"excerpt":{"rendered":"<p>Descubra como o NUMA Balancing influencia o desempenho do Linux em hardware de servidor moderno e quando deve desativar ou manter ativa esta funcionalidade. Foco: NUMA Balancing.<\/p>","protected":false},"author":1,"featured_media":21096,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21103","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":"161","_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":"numa balancing","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":"21096","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/21103","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=21103"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/21103\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/21096"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=21103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=21103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=21103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}