O Linux 7.5 promete FAT32 até 4,06x mais rápido com escritas síncronas em lote. Entenda o patch de Matheus Alves de Almeida, o impacto real e quando chega ao kernel.
O FAT32 é um daqueles sistemas de arquivos que parecem teimosos: décadas de idade, limitações conhecidas, mas onipresente em pendrives, cartões SD, câmeras, dispositivos embarcados e partições de inicialização UEFI.
A compatibilidade sempre foi sua maior virtude — e, durante muito tempo, também seu preço em desempenho, especialmente em cenários de montagem síncrona, onde o kernel precisa garantir que cada alteração chegue fisicamente ao armazenamento antes de considerar a operação concluída.
A boa notícia é que o kernel Linux não parou de olhar para ele. Depois de uma melhoria expressiva já presente no Linux 7.4 — que chegou a acelerar a pré-alocação de arquivos em até 265x —, uma nova série de patches promete atacar um gargalo ainda mais específico: a sincronização das cópias da tabela de alocação de arquivos (FAT) em montagens síncronas.
O resultado demonstrado chega a 4,06x de ganho em um dos cenários mais exigentes.
O problema: buffer por buffer, uma espera após a outra
O driver FAT do Linux mantém, por segurança, múltiplas cópias da tabela FAT. Sempre que uma informação de alocação é modificada, o kernel precisa refletir essa mudança nas cópias correspondentes.
Em condições normais de montagem assíncrona, esse processo é razoavelmente eficiente. O problema aparece quando o sistema de arquivos é montado no modo síncrono.
Nesse modo, o Linux tenta assegurar que as modificações cheguem ao meio físico antes de dar a operação como concluída. Até então, a função fat_mirror_bhs() sincronizava os buffers um de cada vez: escrevia um buffer, esperava a conclusão, escrevia o próximo, esperava novamente.
Esse comportamento serializava toda a E/S e impedia que a camada de blocos aproveitasse a capacidade dos dispositivos modernos de processar várias operações agrupadas.
Em outras palavras, o hardware não era necessariamente o vilão. O kernel simplesmente o utilizava de uma forma desnecessariamente serializada.
A solução: agrupar as escritas e melhorar a submissão
O desenvolvedor Matheus Alves de Almeida propôs uma abordagem em dois passos:
1. Agrupar as escritas síncronas no espelho da FAT: em vez de sincronizar buffer por buffer, a função fat_mirror_bhs() passou a reunir vários buffers sujos e usar fat_sync_bhs() para sincronizá-los de uma só vez. Também foi adicionado um helper, fat_brelse_array(), para liberar o conjunto de buffers de forma adequada após a operação.
2. Melhorar a submissão em fat_sync_bhs(): o código passou a utilizar um plug na camada de blocos, permitindo que várias requisições fossem agrupadas antes de serem efetivamente enviadas ao dispositivo. Além disso, a dica REQ_SYNC passou a ser repassada, alinhando a intenção de escrita síncrona com o comportamento esperado pela camada de blocos.
Essas mudanças, embora cirúrgicas, eliminam a serialização artificial que penalizava as montagens síncronas.
Os números: até 4,06x em cenários reais de benchmark
Os testes foram realizados em ambiente QEMU/KVM com um dispositivo virtio-blk configurado com cache=directsync, o que impõe condições particularmente rigorosas de persistência.
Cada resultado representa a média aritmética de 10 amostras, e o cenário avaliado utilizou 16 arquivos e a chamada fallocate() com a flag FALLOC_FL_KEEP_SIZE.
Os ganhos variam conforme o tamanho do arquivo e o tamanho do cluster, mas o pico é expressivo:
Fonte: Dados de benchmark apresentados por Matheus Alves de Almeida na série de patches.
Um detalhe importante: montagens assíncronas não apresentaram mudança perceptível de desempenho nos testes. Ou seja, o ganho é direcionado exatamente ao cenário que mais sofria — as montagens síncronas —, sem introduzir regressões no caso de uso mais comum
Onde esse patch está agora e quando deve chegar
O patch já está no mm-everything, o ramo de testes mantido por Andrew Morton que reúne alterações candidatas ao kernel antes de seguirem para a janela de mesclagem principal.
Considerando o calendário do kernel e o fato de a série já ter passado pelo crivo do mantenedor do FAT, OGAWA Hirofumi — que deu seu Acked-by —, a expectativa é de que a otimização seja integrada ao Linux 7.5, com chegada prevista para o início de 2027.
Vale notar que o Linux 7.4 já recebeu uma otimização anterior do mesmo desenvolvedor, focada no caminho de alocação de clusters.
Naquela ocasião, a mudança evitou uma enxurrada de alocações de um único cluster ao crescer um arquivo com FALLOC_FL_KEEP_SIZE, resultando em ganhos que chegaram a 265x em cenários específicos.
O patch de 4,06x é, portanto, mais um passo em uma sequência de melhorias que devolve competitividade a um sistema de arquivos que continua relevante.
Por que isso importa para além do FAT32
À primeira vista, pode parecer que otimizar o FAT32 é mexer em algo “do passado”. Mas a realidade é que o FAT32 segue sendo a linguagem franca de interoperabilidade entre sistemas operacionais e uma enormidade de dispositivos.
Pendrives, cartões de memória de câmeras, equipamentos industriais, sistemas embarcados e partições de boot UEFI frequentemente dependem dele.
Quando o kernel melhora o desempenho de montagens síncronas no FAT32, o impacto vai além de benchmarks:
Dispositivos removíveis ganham operações de escrita mais previsíveis e rápidas.
Sistemas embarcados e industriais que montam FAT32 de forma síncrona para garantir integridade de dados passam a sofrer menos com o custo de persistência.
Usuários que alternam entre Linux e Windows em pendrives e cartões SD percebem menos lentidão em cópias e pré-alocações.
A lição técnica também é valiosa: agrupar operações de E/S e alinhar as dicas de sincronização com a camada de blocos é uma estratégia poderosa para extrair desempenho de hardware moderno, mesmo em drivers antigos.
O patch não torna o armazenamento físico mais rápido; ele simplesmente para de desperdiçar o paralelismo disponível.
Checklist
Checklist rápido: o que você precisa saber sobre o FAT32 no Linux 7.5
□ O FAT32 está presente em pendrives, cartões SD, câmeras, dispositivos embarcados e partições UEFI.
□ Montagens síncronas exigem que cada alteração chegue ao meio físico antes de a operação ser concluída.
□ O driver FAT mantém múltiplas cópias da tabela de alocação (FAT) por segurança.
□ Antes do patch, fat_mirror_bhs() sincronizava buffer por buffer, serializando a E/S.
□ A otimização agrupa escritas com fat_sync_bhs() e melhora a submissão com plug e REQ_SYNC.
□ O pico demonstrado é de 4,06x em cenário com arquivos de 256 MiB e clusters de 512 B.
□ Montagens assíncronas não apresentaram regressão perceptível.
□ O patch está no mm-everything de Andrew Morton e deve chegar ao Linux 7.5 em 2027.
□ A série recebeu Acked-by de OGAWA Hirofumi, mantenedor do FAT.
□ O Linux 7.4 já havia recebido uma otimização anterior do mesmo autor, com ganhos de até 265x.
Questionário rápido
1. Por que a montagem síncrona do FAT32 era mais lenta antes do patch?
R: Porque o driver sincronizava os buffers do espelho da FAT um de cada vez, serializando a E/S e impedindo que a camada de blocos agrupasse as operações.
2. Qual é o ganho máximo demonstrado nos benchmarks com o novo patch?
R: Até 4,06x em um cenário com 16 arquivos de 256 MiB e clusters de 512 B, em ambiente QEMU/KVM com virtio-blk e cache=directsync.
3. Em qual versão do kernel o patch deve chegar e quem é o mantenedor do FAT que deu suporte à mudança?
R: A expectativa é de que chegue ao Linux 7.5, em 2027. O mantenedor do FAT, OGAWA Hirofumi, deu Acked-by à série.
Conclusão
O FAT32 pode não ser o sistema de arquivos mais moderno do mundo, mas continua sendo uma peça indispensável na infraestrutura de compatibilidade. A otimização de Matheus Alves de Almeida mostra que ainda há espaço para ganhos expressivos com mudanças cirúrgicas e bem fundamentadas.
Ao agrupar escritas síncronas e melhorar a submissão à camada de blocos, o kernel deixa de desperdiçar o paralelismo do hardware e entrega até 4,06x de desempenho em um cenário que realmente importa para quem depende de persistência garantida.
Com o patch já no mm-everything de Andrew Morton e o aval de OGAWA Hirofumi, o Linux 7.5 tem tudo para coroar essa evolução no início de 2027. Enquanto isso, vale acompanhar as melhorias que já chegaram ao 7.4 e entender como elas impactam o seu uso cotidiano — porque, goste ou não, o FAT32 ainda vai aparecer na sua vida.


Nenhum comentário:
Postar um comentário