FERRAMENTAS LINUX: A Meta propõe uma fila de trabalho compartilhada para as CFS do Linux - um pequeno ganho de desempenho

terça-feira, 13 de junho de 2023

A Meta propõe uma fila de trabalho compartilhada para as CFS do Linux - um pequeno ganho de desempenho

 

Os engenheiros da Meta propuseram um recurso chamado "swqueue", uma fila de trabalho compartilhada para o agendador CFS do kernel Linux, que pode fornecer uma pequena melhoria no desempenho em termos de taxa de transferência e latência, especialmente em sistemas AMD com vários CCXs.

Hoje, foi postado um "pedido de comentários" sobre esse recurso swqueue CFS no qual os engenheiros da Meta estão trabalhando. No caso deles, eles se dedicaram a desenvolver o swqueue para aprimorar os servidores AMD EPYC que executam processos de servidor da web HHVM para o Facebook.


Algumas das principais conclusões do patch RFC são as seguintes:

Observamos que as CPUs ainda estavam ociosas mesmo quando o host estava sobrecarregado. Em resposta, desenvolvemos o recurso "wakequeue compartilhado" (swqueue) proposto neste conjunto de patches. A ideia por trás do swqueue é simples: ele permite que o agendador seja mais eficiente, colocando uma tarefa ativável em uma fila FIFO por LLC que pode ser retirada por outro núcleo na fila FIFO do LLC, antes de ser parada.

Com essa simples alteração, conseguimos uma melhoria de 1 a 1,6% na taxa de transferência, além de uma pequena e consistente melhoria nas latências p95 e p99 no HHVM. Essas melhorias de desempenho foram adicionadas às vitórias mencionadas acima nos botões debugfs.

...

A melhoria de aproximadamente 1 a 1,6% na taxa de transferência do HHVM também é visível quando se utiliza agendadores de conservação de trabalho (até mesmo os mais simples, como o FIFO global).

Em hosts com um ou vários CCXs, isso pode melhorar significativamente o desempenho. Além dos ganhos de desempenho observados em nossas próprias cargas de trabalho web, também notamos melhorias em cargas de trabalho comuns, como compilação de kernel, ao usar o swqueue compartilhado.

...

Nesta forma, o swqueue parece proporcionar uma pequena, mas perceptível, vitória para cargas de trabalho que dependem do processamento de front-end espalhado por vários CCXs. O motivo parece ser bastante direto: o swqueue incentiva a eficiência do trabalho dentro de um CCX, permitindo que uma CPU extraia O(1) tarefas executáveis de uma fila por LLC. Como mencionado acima, ele complementa o SIS_NODE, que busca por núcleos ociosos no caminho de ativação.

Embora o swqueue nessa forma incentive a eficiência do trabalho, é importante ressaltar que não é garantido, uma vez que não implementamos nenhum tipo de roubo de trabalho entre os swqueues. No futuro, podemos aumentar ainda mais a utilização da CPU, permitindo o roubo de trabalho entre swqueues, provavelmente entre CCXs no mesmo nó do NUMA.

O conjunto de patches do swqueue possui pouco mais de 200 linhas de código novo, e os patches RFC agora estão disponíveis para revisão na lista de discussão do kernel.




Fonte

Até a próxima !!

Nenhum comentário:

Postar um comentário