Uma das funcionalidades mais úteis do sistema de arquivos Ext4, a desfragmentação online, está recebendo uma reformulação completa que promete ganhos de performance massivos. Um novo conjunto de patches reescreve a lógica de movimentação de dados, tornando o processo muito mais eficiente, especialmente em hardware moderno com SSDs rápidos e ao lidar com arquivos grandes.
A abordagem antiga era como mover uma biblioteca inteira movendo um único livro de cada vez — era funcional, mas extremamente lento e ineficiente. A nova abordagem é como usar um carrinho de biblioteca para mover prateleiras inteiras (os extents) de uma vez. Além disso, o novo método é compatível com “carrinhos” maiores (os large folios), aproveitando as otimizações modernas de gerenciamento de memória do kernel para acelerar ainda mais o processo.
De páginas a extents: Uma mudança de paradigma

A principal mudança técnica por trás dessa revolução é que o processo não opera mais em blocos fixos do tamanho de uma página de memória (geralmente 4KB). Em vez disso, a nova função mext_move_extent()
opera na granularidade de extents, que são grupos contíguos de blocos de dados. Isso reduz drasticamente o número de operações repetitivas necessárias durante o processo de desfragmentação.
Zhang Yi, engenheiro da Huawei responsável pelos patches, explicou que “a desfragmentação online do Ext4 atualmente é implementada principalmente através da operação de movimentação de extents no kernel. Esta operação funciona na granularidade de PAGE_SIZE, executando iterativamente operações de troca de extents e movimentação de dados, o que é bastante ineficiente”.
A otimização também adiciona suporte a large folios, permitindo que o kernel manipule blocos de memória muito maiores de uma só vez, o que é ideal para o hardware atual. Esse suporte representa um avanço significativo, já que os large folios são uma capacidade necessária para que um sistema de arquivos Linux suporte completamente tamanhos de bloco maiores — blocos maiores que o tamanho usual de página.
Preparando o terreno para o Iomap
Além dos ganhos imediatos de performance, este trabalho serve como um passo preparatório crucial para a migração do Ext4 para a infraestrutura iomap. O iomap é considerado a interface que novos sistemas de arquivos devem usar e será a única maneira para sistemas de arquivos suportarem tamanhos de bloco maiores que o tamanho da página.
Os patches desacoplam o buffer_head
do processo principal de movimentação de extents, restringindo seu uso apenas às funções auxiliares mext_folio_mkwrite()
e mext_folio_mkuptodate()
. O estilo de codificação do processo de movimentação de extents agora se alinha com a infraestrutura iomap, estabelecendo uma base sólida para suportar desfragmentação online uma vez que a infraestrutura iomap seja implementada.
Resultados de performance impressionantes
Os testes de performance mostram a magnitude da melhoria. Em cenários de desfragmentação de extents não escritos com blocos de 128KB, a taxa de transferência saltou de 1.064 MiB/s para 17,8 GiB/s — um aumento de mais de 17 vezes. Para blocos de 32KB, o ganho foi ainda mais dramático, passando de 1.037 MiB/s para 6.529 MiB/s.
Os benchmarks foram realizados usando o ioengine e4defrag do fio em um ambiente com CPU Intel Xeon Gold 6240, 400GB de memória do sistema e um dispositivo SSD NVMe. Os resultados completos mostram:
Extents não escritos (U):
- 4k: de 877 MiB/s para 963 MiB/s
- 32k: de 1.037 MiB/s para 6.529 MiB/s
- 128k: de 1.064 MiB/s para 17,8 GiB/s
Extents escritos (M):
- 4k: de 77,2 MiB/s para 76,2 MiB/s
- 32k: de 78,2 MiB/s para 128 MiB/s
- 128k: de 79,5 MiB/s para 352 MiB/s
Impacto prático para usuários
Essa otimização representa uma mudança fundamental na eficiência da desfragmentação online do Ext4. Para usuários com arquivos grandes, especialmente em sistemas com SSDs rápidos, os tempos de desfragmentação podem ser reduzidos de horas para minutos em muitos cenários.
A desfragmentação online já é uma característica distintiva do Ext4, permitindo que o sistema de arquivos seja otimizado sem necessidade de desmontagem. Com essas melhorias, o processo se torna ainda mais prático para uso em servidores de produção e workstations que precisam manter alta disponibilidade.
Os 13 patches que compõem esta otimização estão atualmente em análise pela comunidade de desenvolvedores do kernel Linux. A série não apenas melhora a performance, mas também corrige alguns problemas menores relacionados à validação e adiciona novos pontos de rastreamento para melhor monitoramento do processo de movimentação de extents.