Considerações sobre fixação de processos

Concluído

Porquê fixar processos e threads?

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

Fixação do processo:

  • Maximiza a largura de banda da memória colocando ou fixando processos em locais que usam todos os canais de memória 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 que dois processos aterrissem no mesmo núcleo.

  • Otimiza a movimentação de dados entre os processos, colocando processos que se comunicam em nós de domínio NUMA (Non-Uniform Memory Access). Isso garante que eles tenham a menor latência e a maior largura de banda.

  • 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 você fixa processos e threads?

Para determinar onde fixar processos e threads, você precisa entender a topologia do processador e da 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 Intel Memory Latency Checker (MLC) são ferramentas úteis para determinar a topologia do processador e da memória. 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 largura de banda para processos em cada domínio NUMA à medida que se comunicam entre si?

A imagem a seguir exibe o HB120_v2 mapa de latência de domínio NUMA gerado pelo Intel MLC. Quanto menor a latência entre domínios NUMA, mais rápida é 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. Ele também mostra quais domínios NUMA podem ser agrupados para alcançar a menor transferência de dados e latência de comunicação.

Imagem que mostra o HB120_v2 mapa de latência de domínio NUMA.

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

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

Imagem que mostra os domínios NUMA HC44.

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

Imagem que mostra os domínios NUMA do HB60.

Aplicações ligadas à largura de banda da memória

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

Por exemplo, se você estiver usando HB120_v2 SKU com 30 domínios de nó NUMA, 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). Em seguida, você pode ver qual configuração oferece o melhor desempenho.