Os engenheiros da meta propuseram um recurso”swqueue”de fila de trabalho compartilhada para o agendador CFS do kernel do Linux que pode ajudar com uma pequena melhoria no desempenho da taxa de transferência e uma latência ligeiramente melhor, principalmente para sistemas AMD com vários CCXs.

Postado hoje foi um”pedido de comentários”sobre este recurso swqueue CFS no qual os engenheiros da Meta estão trabalhando. No caso deles, eles foram levados a trabalhar em swqueue para aprimorar os servidores AMD EPYC executando processos de servidor da Web HHVM para o Facebook.

Algumas das principais conclusões da carta de apresentação do patch RFC são:

Percebemos que as CPUs ainda estavam ociosas mesmo quando o host estava sobrecarregado. Em resposta, escrevemos o recurso”wakequeue compartilhado”(swqueue) proposto neste conjunto de patches. A ideia por trás do swqueue é simples: ele permite que o agendador seja um trabalho de conservação agressivo, colocando uma tarefa de ativação em uma fila FIFO por LLC que pode ser puxada por outro núcleo na fila LLC FIFO, que pode ser puxada antes de ir parado.

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

A melhoria de ~1 a 1,6% na taxa de transferência HHVM é igualmente visível usando agendadores sched_ext de conservação de trabalho (mesmo os muito simples, como FIFO global).

Em hosts CCX/soquete único e múltiplo , isso pode melhorar consideravelmente o desempenho. Além dos ganhos de desempenho observados em nossas cargas de trabalho web internas, também observamos uma melhoria em cargas de trabalho comuns, como compilação do kernel ao executar wakequeue compartilhado.

swqueue neste formulário parece fornecer uma vitória pequena, mas perceptível para cargas de trabalho vinculadas à CPU de front-end espalhadas por vários CCXs. O motivo parece bastante direto: o swqueue incentiva a conservação do trabalho dentro de um CCX fazendo com que uma CPU faça uma extração O(1) de uma fila por LLC de tarefas executáveis. Conforme mencionado acima, ele é complementar ao SIS_NODE, que busca por núcleos ociosos no caminho de ativação.

Embora o swqueue neste formato encoraje a conservação do trabalho, é claro que não o garante, uma vez que não implementamos nenhum tipo de roubo de trabalho entre os swqueues. No futuro, poderíamos aumentar ainda mais a utilização da CPU, permitindo roubo de trabalho entre swqueues, provavelmente entre CCXs no mesmo nó NUMA.

O conjunto de patches swqueue tem pouco mais de 200 linhas de novos code e os patches RFC estão agora disponíveis para revisão na lista de discussão do kernel.

Categories: IT Info