FERRAMENTAS LINUX: O suporte ao Pipe FMODE_NOWAIT foi enviado para o Kernel Linux 6.4 como uma melhoria de desempenho de 10 a 23x

segunda-feira, 8 de maio de 2023

O suporte ao Pipe FMODE_NOWAIT foi enviado para o Kernel Linux 6.4 como uma melhoria de desempenho de 10 a 23x

 


Enquanto a janela de mesclagem do Kernel Linux 6.4 ficou fechada no fim de semana, no dia 06, o último dia completo do período, Jens Axboe enviou o suporte ao pipe FMODE_NOWAIT como o que ele descreveu como uma grande melhoria de desempenho e eficiência.


Com uma encarnação anterior do suporte FMODE_NOWAIT para os patches de pipes , Axboe explicou:

"Uma coisa que sempre foi um pouco mais lenta do que eu gostaria com io_uring é lidar com pipes. Eles não suportam IOCB_NOWAIT e, portanto, precisamos puntá-los para io-wq para manipulação. Esta série adiciona suporte para FMODE_NOWAIT para os pipes ."

Mas onde as coisas realmente ficam loucas é a escala do ganho de desempenho/eficiência disso:

"Curioso para saber a diferença que isso faz, escrevi um pequeno benchmark que simplesmente abre 128 canais e depois faz 256 rodadas de leitura e gravação para eles. Isso foi executado 10 vezes, descartando a primeira execução, pois é sempre um pouco mais lento. Antes do patch:


Avg: 262,52 msec

Stdev: 2,12 msec

Min: 261,07 msec

Max 267,91 msec


e após o patch:


Avg: 24,14 msec

Stdev: 9,61 msec

Min: 17,84 msec

Max: 43,75 msec


ou cerca de uma melhoria de 10x no desempenho (e eficiência ). 
Corri os patches através do ltp pipe e testes de emenda, sem regressões observadas. Observando os rastreamentos io_uring, podemos ver que não temos mais nenhum rastreamento io_uring_queue_async_work() após o patch, onde anteriormente tudo era feito via io-wq."


Mais tarde, ele acrescentou nessa série de patches:

"O teste acima foi para um tubo vazio quando a leitura é emitida, se o teste for alterado para ter dados quando, então parecerá ainda melhor:


Antes:


Avg: 249,24 msec

Stdev: 0,20 msec

Min: 248,96 msec

Max: 249,53 msec


Após:


Avg: 10,86 mseg

Stdev: 0,91 mseg

Min: 10,02 mseg

Max: 12,67 mseg


ou cerca de uma melhoria de 23x."


Os patches definidos para mesclagem no Linux 6.4 definem o suporte FMODE_NOWAIT para pipes, mas o desativam se estiver usando splice/vmsplice no pipe. Este pull request é o que está pendente agora para o suporte do canal FMODE_NOWAIT.







Fonte

Até a próxima !!

Nenhum comentário:

Postar um comentário