FERRAMENTAS LINUX: Com algumas linhas de código, a ótima otimização de desempenho da AMD para o Kernel Linux 5.20

terça-feira, 14 de junho de 2022

Com algumas linhas de código, a ótima otimização de desempenho da AMD para o Kernel Linux 5.20

 

Confira !!

Um patch da AMD para ajustar ainda mais o agendador do kernel Linux em torno do desbalanceamento NUMA foi colocado na fila e programado para introdução no Linux 5.20. Para algumas cargas de trabalho, esse ajuste do agendador pode ajudar significativamente em sistemas baseados em AMD Zen e até mesmo em servidores Intel Xeon tem a possibilidade de ajudar também.

A mudança de AMD para o escalonador justo está considerando a afinidade da CPU ao permitir o desequilíbrio NUMA dentro da função find_idlest_group().

O engenheiro da AMD K Prateek Nayak explicou:

No caso de sistemas contendo várias LLCs por soquete, como os sistemas AMD Zen, os usuários desejam distribuir aplicativos com demanda de largura de banda em várias LLCs. O fluxo é uma dessas cargas de trabalho representativas em que o melhor desempenho é obtido limitando um encadeamento de fluxo por LLC. Para garantir isso, sabe-se que os usuários fixam as tarefas em um subconjunto específico de CPUs que consiste em uma CPU por LLC enquanto executam essas tarefas que consomem muita largura de banda.

...

Idealmente, preferimos que cada thread de fluxo seja executado em uma CPU diferente da lista de CPUs permitidas. No entanto, a heurística atual em find_idlest_group() não permite isso durante o posicionamento inicial.

[Exemplo de comportamento]

Uma vez que os primeiros quatro threads são distribuídos entre as CPUs permitidas do soquete um, o restante dos passos começa a se acumular nessas mesmas CPUs quando claramente há CPUs no segundo soquete que podem ser usadas.

Após o acúmulo inicial em um pequeno número de CPUs, embora o balanceador de carga eventualmente entre em ação, demora um pouco para chegar a {4}{4} e até mesmo {4}{4} não é estável, pois observamos um monte de ping pong entre {4}{4} para {5}{3} e vice-versa antes que um estado estável seja alcançado muito mais tarde (1 thread de fluxo por CPU permitida) e não seja necessária mais migração.

Podemos detectar esse empilhamento e evitá-lo verificando se o número de CPUs permitidas no grupo local é menor que o número de tarefas em execução no grupo local e usar essa informação para espalhar a 5ª tarefa no próximo soquete (afinal, o objetivo neste caminho lento é encontrar o grupo mais ocioso e a CPU mais ociosa durante o posicionamento inicial!).

Para o caso de teste de benchmark de memória Stream, este patch foi capaz de aumentar o desempenho em mais de 40%:

Este patch em cima do código atual do kernel Linux beneficiou o Stream em 36~44% como um exemplo de caso de teste comum.


Enquanto uma otimização liderada pela AMD para beneficiar seus processadores baseados em Zen com vários caches de último nível por soquete, essa mudança no agendador do Linux também pode beneficiar as CPUs da Intel também em casos de servidores com vários soquetes. Para o Stream em um servidor "Ice Lake" escalável Intel Xeon, o desempenho do Stream teve uma melhoria de 54 a 82% em relação ao desempenho atual do Linux.

Nada mal com este patch do kernel sendo apenas algumas linhas de código!

A partir desta manhã, o patch foi enfileirado em sched/core , tornando-o material para ser enviado para a janela de mesclagem do Linux 5.20 no final deste verão, a menos que surjam problemas com esse código que anteriormente residia na lista de discussão do kernel.












Até a próxima !!


Nenhum comentário:

Postar um comentário