- Fim das consultas inúteis: o cache de "dentries negativos" permite que o sistema lembre que um arquivo não existe, evitando viagens redundantes ao servidor host durante a busca por cabeçalhos.
- Resolução de links instantânea: novos patches habilitam o cache de links simbólicos (symlinks) no cache de página do linux, eliminando atrasos em builds que dependem de estruturas de pastas complexas.
- Ganhos reais de performance: testes mostram uma redução total de 37% no tempo de compilação, tornando o 9p competitivo com o virtiofs em fluxos de trabalho de desenvolvimento.
- Nova opção de montagem: a introdução do ndentrytimeout dá aos administradores controle granular sobre por quanto tempo as informações de arquivos inexistentes devem permanecer na memória.
- Melhoria para o desenvolvedor: as otimizações focam especialmente no modo cache=loose, o favorito para ambientes de desenvolvimento isolados e montagens de apenas leitura.
Uma série de patches proposta por Remi Pommarel promete resolver um dos gargalos mais frustrantes para desenvolvedores que utilizam máquinas virtuais (VMs) com o sistema de arquivos 9p (Plan 9 Filesystem Protocol): a lentidão extrema em operações de compilação.
O 9p é amplamente utilizado (por exemplo, no QEMU/KVM) para compartilhar pastas do sistema hospedeiro (host) com o sistema convidado (guest). No entanto, quem já tentou compilar um projeto grande dentro de uma VM acessando o código via 9p sabe que a performance pode ser sofrível.
O problema: excesso de viagens de rede
O culpado pela lentidão não é a transferência de dados em si, mas a latência causada por milhares de pequenas operações repetitivas. Durante uma compilação, o compilador (como o GCC) faz duas coisas obsessivamente:
- Procura por arquivos de cabeçalho (.h) em vários diretórios, gerando muitos erros de “arquivo não encontrado” (lookup negativo).
- Lê links simbólicos (symlinks) repetidamente para resolver caminhos.
No 9p padrão (mesmo com a opção cache=loose), cada uma dessas verificações dispara uma viagem de ida e volta (RPC) ao servidor no host. Isso soma minutos de espera em um build complexo.
A solução: cache inteligente
Os novos patches introduzem otimizações específicas para esses cenários:
- Cache de dentries negativos: Agora, quando o sistema descobre que um arquivo não existe, ele memoriza essa informação. Isso evita perguntar ao servidor novamente sobre o mesmo arquivo inexistente. Uma nova opção de montagem,
ndentrytimeout(oundentrytmo), permite definir por quanto tempo essa informação é lembrada. - Cache de symlinks: O resultado da leitura de links simbólicos passa a ser armazenado no cache de página do Linux. Assim, acessos subsequentes ao mesmo link são resolvidos instantaneamente na memória da VM, sem consultar o host.
Resultados impressionantes
Nos testes realizados pelo autor, compilando o hostapd, o tempo de build caiu de 2m18s para 1m26s — uma melhoria de 37%. Outro desenvolvedor, Christian Schoenebeck, reportou ganhos médios de 40%, chegando a 60% em alguns casos.
Com essas mudanças, o 9p se torna competitivo com o virtiofs, a alternativa moderna (mas às vezes mais complexa de configurar) para compartilhamento de arquivos em virtualização.
Status e disponibilidade
Os patches estão na versão 2 (v2) e receberam feedback positivo e testes da comunidade. A expectativa é que sejam integrados em uma versão futura do kernel Linux (possivelmente após a 6.20), trazendo alívio imediato para desenvolvedores que dependem de ambientes virtualizados leves.
