Turbinando o 9p: patches melhoram em 40% a compilação em máquinas virtuais linux

Turbinando o 9p: patches melhoram em 40% a compilação em máquinas virtuais linux

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:

  1. Procura por arquivos de cabeçalho (.h) em vários diretórios, gerando muitos erros de “arquivo não encontrado” (lookup negativo).
  2. 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:

  1. 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 (ou ndentrytmo), permite definir por quanto tempo essa informação é lembrada.
  2. 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.