Desempenho aprimorado

Desempenho otimizado: uncached buffered I/O no Linux

Desempenho otimizado: uncached buffered I/O no Linux

O desenvolvimento do recurso de I/O bufferizado não cacheado (“uncached buffered I/O”) no Linux, liderado pelo especialista em I/O Jens Axboe, está trazendo melhorias significativas. Este trabalho, iniciado em 2019, ganhou novo ânimo recentemente e apresenta um desempenho de leitura e gravação cerca de 65% mais rápido, com menor uso de CPU. Atualmente, o recurso foi adaptado para funcionar nos sistemas de arquivos EXT4, Btrfs e XFS.

Por que uncached buffered I/O?

A ideia por trás do uncached buffered I/O é simples, mas poderosa: melhorar o desempenho eliminando a imprevisibilidade associada ao I/O bufferizado tradicional. Em sistemas modernos, dispositivos NVMe e outros avançados podem encher o cache de páginas em questão de segundos, causando gargalos. Embora o uso de “O_DIRECT” seja uma solução comum, ele apresenta restrições, como sincronização intrínseca e limitações de tamanho e alinhamento de I/O.

Para aqueles que estão menos familiarizados, o termo “I/O bufferizado” refere-se ao uso de uma área temporária na memória (cache) para armazenar dados durante operações de leitura e escrita em discos ou outros dispositivos de armazenamento. Isso é eficiente para muitos casos, mas pode se tornar um problema em dispositivos muito rápidos ou em sistemas com pouca capacidade de gerenciar esses caches de forma dinâmica.

Com o uncached buffered I/O, é possível ler e gravar dados sem cache, mantendo a previsibilidade dos tempos de I/O e reduzindo significativamente a atividade da kswapd (responsável pelo gerenciamento de memória). Essa solução não apenas beneficia sistemas corporativos de larga escala, mas também dispositivos de desktop.

Como funciona?

O uncached buffered I/O utiliza a flag RWF_UNCACHED, que pode ser aplicada em operações de leitura e escrita via as chamadas de sistema pwritev2(2) ou preadv2(2). No contexto do io_uring, basta definir a flag no campo rw_flags. Essa abordagem torna a implementação direta e acessível para aplicações.

Para usuários menos experientes, as chamadas de sistema são como comandos que o software usa para interagir com o sistema operacional. No caso do uncached buffered I/O, você pode pensar nisso como uma forma de dizer ao sistema: “Escreva ou leia os dados diretamente, sem armazená-los no cache.”

Desempenho e vantagens:

  • Melhora de 65% em leitura e escrita comparado ao I/O bufferizado tradicional.
  • Redução no uso de CPU, especialmente eliminando a atividade da kswapd.
  • Previsibilidade no tempo de I/O, essencial para cargas de trabalho críticas.

Imagine, por exemplo, um sistema que precisa processar grandes volumes de dados rapidamente, como bancos de dados ou servidores de vídeo sob demanda. O uso do uncached buffered I/O pode evitar que o cache de memória se encha rapidamente, o que frequentemente leva a lentidão e uso excessivo de CPU para liberar espaço.

Avanços no suporte a sistemas de arquivos

A implementação atual inclui suporte a EXT4, XFS e Btrfs. Essa funcionalidade depende de ajustes nos caminhos genéricos do filemap e iomap, com pequenas modificações para integrar o suporte aos sistemas de arquivos. Para adicionar suporte em outros sistemas de arquivos, bastam ajustes mínimos, geralmente apenas uma linha no código da operação de arquivos.

Se você está se perguntando o que são sistemas de arquivos, eles são estruturas que organizam e armazenam dados em dispositivos de armazenamento. EXT4, XFS e Btrfs são apenas alguns dos muitos tipos usados no Linux, cada um com características específicas para diferentes cenários.

Cenário de testes e próximos passos

Os patches foram amplamente testados com sucesso em ferramentas como xfstests, garantindo confiabilidade e estabilidade. A próxima etapa é a revisão na mailing list para integração no kernel principal.

Para quem não está familiarizado, patches são atualizações ou melhorias no código do software. No caso do Linux, eles são enviados para listas de discussão onde desenvolvedores do mundo todo podem revisar, testar e comentar antes de serem integrados oficialmente.

Conclusão

Com ganhos significativos de desempenho e simplicidade de uso, o uncached buffered I/O representa um marco importante no gerenciamento de I/O no Linux. Seu impacto é claro: maior eficiência e flexibilidade para sistemas de todos os portes. Fique atento à evolução desse recurso, que promete transformar o panorama de armazenamento no Linux.

Se você é iniciante, saiba que essas melhorias podem significar sistemas mais rápidos e responsivos, mesmo que você não precise configurar nada diretamente. Para administradores e desenvolvedores, esse é um avanço que pode simplificar e otimizar muitas operações.

Confira os patches completos e detalhes técnicos aqui.

Acesse a versão completa
Sair da versão mobile