Codificação de 5 minutos gera aumento de mais de 6% no desempenho de E/S do Linux

Processadores: Suporte ao AMD P-State Preferred Core. Ajuste para Intel Meteor Lake para ajudar com o desempenho e eficiência energética. Continuação dos preparativos para o Intel X86S. O Intel FRED foi fundido para entrega flexível de eventos de retorno. Otimizações KVM para plataformas Intel e AMD. Tempos de inicialização mais rápidos para sistemas grandes com muita RAM e fazendo uso de páginas HugeTLB. Novas rotinas de criptografia aceleradas por vetor RISC-V. O LoongArch habilita mais recursos do kernel, como suporte a objtool, desbobinador de pilha ORC, livepatching do kernel e muito mais. Progresso contínuo na computação confidencial da AMD com mais bits SEV-SNP sendo upstreamed. O driver ARM SCMI CPUFreq habilita o boost por padrão. O AMD FRU Memory Poison Manager foi fundido como parte do trabalho contínuo da série MI300. Comportamento aprimorado de limitação de largura de banda de memória no Linux 6.9. Iniciar o IBM POWER11 suportar upstreaming para esses processadores Power de próxima geração. Suporte a ferrugem ARM64. O suporte ao SoC Mobileeye EyeQ5 foi finalmente atualizado. Um novo driver VFIO para o Grace Hopper Superchip da NVIDIA. Novo suporte a SoC Arm. Código de topologia x86 reformulado para melhor suporte à CPU híbrida Intel Core. Habilitação um pouco mais fácil de futuras gerações de CPU AMD Zen. Gráficos: Suporte para fontes de console FB (frame-buffer) maiores para aparecer melhor nos monitores 4K e superiores atuais. O Intel Fastboot agora está habilitado para todas as plataformas. Mais IDs PCI de dispositivo para Intel Arrow Lake e Alder Lake N. Trabalho de habilitação continuado pela AMD para a atualização RDNA3 (RDNA3.5) e IP gráfico RDNA4. O AMD FreeSync Video foi desativado. Melhorias contínuas para o novo driver DRM Intel Xe (experimental). Muitas outras melhorias de driver gráfico de código aberto. Armazenamento/Sistemas de Arquivos: Descartando o driver NTFS antigo. Melhoria no tratamento de arquivos/pastas sem diferenciação de maiúsculas e minúsculas. Otimizações de desempenho para Btrfs. O DM VDO foi upstream para este Virtual Data Optimizer que há muito está fora da árvore. Descarte mais eficiente e pipelining de diário aprimorado para Bcachefs. O modo de passagem FUSE finalmente chegou ao kernel principal. Mais melhorias de reparo on-line para XFS. Suporte aprimorado para Macs antigos com Firewire para uso em virtualização. Suporte aprimorado a dispositivos de bloco zoneado para F2FS. Identificadores de arquivo duráveis para KMSBD, o servidor SMB no kernel. Desempenho exFAT muito mais rápido ao ativar a opção de montagem “dirsync”. IO_uring agora suporta NAPP truncado e por anel. Hardware Geral: Muitas melhorias de rede. Melhorias para laptops AMD e Intel, como melhor desempenho de laptop HP para modelos selecionados devido a um TDP mais alto. Enumeração de desempenho de memória nativa e injeção de erros para CXL. Suporte para Snakebyte Gamepads. Novos drivers de monitoramento de hardware para produtos de resfriamento líquido NZXT e ASUS AIO CPU. Suporta mais dispositivos Samsung Bluetooth HID. Removendo mais código para a extinta plataforma Intel Carillo Ranch. Atualizações de Soundwire para Intel e AMD. Segurança Linux: A Microsoft agora semeia melhor o RNG para VMs Hyper-V. Um controle de tempo de compilação para autorizar ou não dispositivos USB conectados. Mais reforço da segurança. Uma alteração para satisfazer a Microsoft para a assinatura do carregador de calço EFI x86. Gerenciamento mais fácil das opções de mitigação de segurança. Outras mudanças no Linux: Uma correção para muitas mensagens de depuração que retardam alguns sistemas AMD. Alterações significativas nas filas de trabalho. Limpeza contínua do código de impressão em prearation para consoles atômicos. Melhorias no driver de fala do Linux. Melhorias contínuas no alocador SLUB. Reduzindo a sobrecarga de CR3 escreve. Um grande retrabalho para o código de temporizadores da CPU. Atualizando para o toolchain Rust 1.76.
tux

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

Codificação de 5 minutos gera 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.”