Com apenas cerca de 5 minutos de codificação, um desenvolvedor conseguiu gerar um aumento de mais de 6% no desempenho de E/S do Linux. O criador do IO_uring e mantenedor do subsistema de bloco Linux, Jens Axboe, passou cerca de cinco minutos trabalhando em dois patches para implementar o cache para consulta de tempo do lado do problema na camada de bloco e pode render 6% ou mais de melhor desempenho de E/S.
Axboe compartilhou sobre sua mais recente e interessante otimização de desempenho de E/S do Linux:
“Algo que tenho em mente há anos e finalmente consegui hoje. O que é meio triste, já que foi literalmente um trabalho de 5 minutos, rendendo uma melhoria de mais de 6%. Provavelmente seria ainda maior em uma configuração de kernel estilo distribuição em grande escala.”
Cerca de 5 minutos de codificação geram um aumento de mais de 6% no desempenho de E/S do Linux
Axboe explicou que normalmente desativa iostats durante o teste devido à sobrecarga de desempenho do tempo de consulta por padrão. Mas ao fornecer algum cache básico para a consulta de tempo do lado do problema, ele está vendo um aumento de cerca de 6% no IOPS e para um kernel de fornecedor de distribuição Linux mais inchado, os ganhos são provavelmente mais significativos.
Ele detalhou na série de patches RFC:
Nenhum dos chamadores realmente precisa de granularidade nsec. Aproveite isso armazenando em cache a hora atual no plugue,com a suposição aqui de que qualquer verificação de tempo será temporalmente próxima o suficiente para que a ligeira perda de precisão não importe.Se
o plugue do bloco for descarregado,por exemplo, em preempção ou agendamento,então invalidamos o relógio em cache.
…
o que representa uma melhoria de mais de 6% no desempenho. Observando a diferença de desempenho, podemos ver uma enorme redução na sobrecarga de tempo:
10,55% -9,88% [kernel.vmlinux] [k] read_tsc
1,31% -1,22 % [kernel.vmlinux] [k] ktime_get
Observe que, como isso depende de blk_plug para o cache, ele só é aplicável ao lado do problema. Mas é aqui que a maioria das chamadas acontecem de qualquer maneira. Também não vale a pena que o teste acima não habilite nenhum dos itens de CPU de custo mais alto no lado da camada de bloco, como wbt, cgroups, iocost, etc, o que adicionaria tempo adicional de consulta. IOW, os resultados provavelmente pareceriam ainda melhores em comparação com aqueles habilitados, como fariam as distros.”