Considerações sobre fixação de processos
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.
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.
A imagem a seguir ilustra um HB60 SKU com 15 domínios NUMA e 60 núcleos.
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.