Considerações sobre fixação de processos

Concluído

Por que fixar processos e threads?

Sempre fixe processos a núcleos específicos para ajudar a alcançar o desempenho máximo e obter desempenho mais consistente a cada execução.

Fixação de processo:

  • Maximiza a largura de banda da memória colocando ou fixando processos em locais que usam e distribuem todos os canais de memória igualmente entre os núcleos.

  • Melhora o desempenho de ponto flutuante garantindo que cada processo esteja em seu próprio núcleo. Isso elimina a possibilidade de dois processos caírem no mesmo núcleo.

  • Coloca os processos que se comunicam em nós de domínio NUMA (acesso não uniforme à memória) para otimizar a movimentação de dados entre eles. Isso garante que os processos tenham menor latência e largura de banda mais alta.

  • Reduz a sobrecarga do sistema operacional e oferece resultados mais consistentes porque o sistema operacional não pode mover processos para núcleos ou domínios NUMA diferentes.

Onde fixar processos e threads?

Para determinar onde fixar processos e threads, primeiro é necessário compreender a topologia de processador e de memória e, especificamente, o número e o local dos domínios NUMA.

O utilitário lstopo-no-graphics (do RPM hwloc) e o MLC (Memory Latency Checker) da Intel são ferramentas úteis para determinar a topologia de memória e processador. Por exemplo: quantos domínios NUMA a VM tem? Quais núcleos são membros de cada domínio NUMA? Qual é a latência e a largura de banda dos processos em cada domínio NUMA quando eles se comunicam entre si?

A imagem a seguir exibe o mapa de latência de domínios NUMA HB120_v2 gerado pelo MLC da Intel. Quanto menor for a latência entre domínios NUMA, mais rápida será a comunicação entre eles. A ilustração mostra claramente que HB120_v2 tem 30 domínios NUMA e quais domínios NUMA estão em qual soquete. Ela também mostra quais domínios NUMA podem ser agrupados para obter a menor latência de comunicação e transferência de dados.

Image that shows the HB120_v2 NUMA domain latency map.

Os processadores Intel têm seis canais de memória, e os processadores AMD EPYC têm oito. Lembre-se de usar todos os canais de memória para maximizar a largura de banda de memória disponível. Faça isso distribuindo os processos paralelos de maneira uniforme entre os domínios do nó NUMA. No caso de aplicativos paralelos híbridos, mantenha o agrupamento de processo/thread nos mesmos domínios NUMA, idealmente compartilhando o mesmo cache L3. Lembre-se de que a contagem total de threads não deve exceder o número total de núcleos.

A imagem a seguir ilustra um SKU HC44 com 2 domínios NUMA e 44 núcleos.

Image that shows the HC44 NUMA domains.

A imagem a seguir ilustra um SKU HB60 com 15 domínios NUMA e 60 núcleos.

Image that shows the HB60 NUMA domains.

Aplicativos limitados pela largura de banda da memória

Se você tiver um aplicativo limitado pela largura de banda de memória, poderá obter um melhor desempenho na VM reduzindo o número de threads e processos paralelos em cada domínio de nó NUMA. Isso pode fornecer mais largura de banda de memória por processo e, possivelmente, reduzir o tempo total do relógio.

Por exemplo, se estiver usando o SKU HB120_v2 com 30 domínios de nó NUMA, você poderá tentar executar 1, 2 e 3 processos e threads por domínio de nó NUMA (por exemplo: 30, 60 e 90 processos e threads por VM). Então você conseguirá ver qual configuração oferece o melhor desempenho.