Enquanto a janela de mesclagem do Linux 6.4 está fechando neste fim de semana, hoje, no último dia completo do período, Jens Axboe está enviando 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 pipes patches, 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 pipes.”
Mas onde as coisas realmente ficam selvagens é a escala do ganho de desempenho/eficiência dele:
“Curioso sobre como grande diferença que isso faz, eu escrevi um pequeno benchmark que simplesmente abre 128 pipes e então faz 256 rodadas de leitura e gravação neles. Isso foi executado 10 vezes, descartando a primeira execução, pois é sempre um pouco mais lento. Antes do patch:
Média: 262,52 ms
Stdev: 2,12 ms
Min: 261,07 ms
Máx 267,91 mse após o patch:
Média: 24,14 ms
Stdev: 9,61 ms
Min: 17,84 ms
Máx.: 43,75 msou cerca de uma melhoria de 10x no desempenho (e eficiência).
Eu executei os patches através dos testes ltp pipe e splice, sem regressões observadas. Olhando para os rastros io_uring, podemos ver que não temos mais rastros io_uring_queue_async_work() após o patch, onde anteriormente tudo era feito via io-wq.”
Ele mais tarde adicionado nessa série de patches:
“Os itens acima o teste foi para um canal vazio quando a leitura é emitida, se o teste for alterado para ter dados quando, então parecerá ainda melhor:
Antes:
Avg: 249,24 ms
Stdev: 0,20 ms
Min: 248,96 ms
Máx: 249,53 msDepois:
Médio: 10,86 ms
Stdev: 0,91 ms
Min: 10,02 ms
Máx: 12,67 msou cerca de uma melhoria de 23x.”
Os patches definidos para mesclagem no Linux 6.4 definem o suporte FMODE_NOWAIT para pipes, mas desativam-no se estiver usando splice/vmsplice no canal. Esta solicitação pull é o que há agora pendente para o suporte do canal FMODE_NOWAIT.