Modal acelerou o bun install em sandboxes de VM em 12 vezes ao trocar o virtio-fs por um disco de blocos
A Modal lançou sandboxes em VM e conectou a elas o seu sistema de arquivos preguiçoso ImageFS via virtio-fs. A partida a frio continuou rápida, mas o trabalho em si degradou: 100 000 chamadas de chown levaram 9,87 s, contra 1,58 s no host, e o bun install ficou três vezes mais lento. A causa: cada operação de metadados atravessava a fronteira da VM até o host. A solução foi entregar ao convidado uma ext4 própria em um dispositivo de blocos.
Processado por IA de Modal Blog; editado por Hamidun News
Se você constrói sandboxes para agentes, sabe: partida rápida não significa trabalho rápido. O agente instala dependências, roda grep no repositório, altera permissões de milhares de arquivos. Tudo isso esbarra no sistema de arquivos. Os engenheiros da Modal contaram como se queimaram com isso ao lançar as VM Sandboxes e o que fizeram a respeito.
Inicia rápido, trabalha devagar
A Modal tem há tempos o ImageFS, um sistema de arquivos distribuído com carregamento preguiçoso para contêineres. Ele puxa antecipadamente apenas o índice de metadados, e o conteúdo dos arquivos é buscado sob demanda em um cache de vários níveis: memória, CDNs regionais e armazenamento global. Por isso os contêineres iniciam em menos de um segundo. Para escrita, há uma camada OverlayFS por cima.
Com as máquinas virtuais, a lógica é a mesma: a VM tem seu próprio kernel convidado e não há acesso direto ao ImageFS no host. A ponte padrão é o virtio-fs, no qual o daemon virtiofsd no host aplica as requisições do convidado a um diretório compartilhado. Ele foi apontado para o ImageFS, e a partida continuou igual.
Mas, no trabalho, tudo desandou. Um chown recursivo, em vez de quatro segundos, levou mais de um minuto. bun install e pnpm install ficaram cerca de três vezes mais lentos, e o ripgrep foi o que mais caiu. Em um microbenchmark de 100 000 chamadas, o chown levou 9,87 s, contra 2,31 s no gVisor e 1,58 s no ImageFS puro.
Por que um chown vira três viagens
O rastreamento mostrou o essencial. Um chown no kernel convidado se desdobra em três requisições ao host: getxattr para verificar capabilities, getattr para os bits setuid e setattr para a troca do proprietário em si. O daemon faz seis chamadas de sistema, e cada uma delas chega ao ImageFS. Total: cerca de 99 µs por operação, e isso com o virtiofsd já configurado para o cache máximo.
A raiz do problema está na arquitetura. O virtio-fs é um sistema de arquivos compartilhado: para os metadados, é preciso sempre consultar a autoridade do outro lado da fronteira da VM. Embora o host não precise do conteúdo do sistema de arquivos raiz da máquina virtual.
Falando em blocos
Os engenheiros propuseram manter o sistema de arquivos inteiramente dentro do convidado e dar ao host apenas um dispositivo de blocos via virtio-blk. O disco não sabe o que é um arquivo: ele guarda e entrega pedaços de dados. A ext4 do convidado verifica as permissões, limpa bits e registra a alteração no journal por conta própria. Para o host, tudo vai depois, em lote, a cada poucos segundos. Um chown custa cerca de 2,1 µs em vez de 99.
A dificuldade é que o mkfs.ext4 exige que a imagem inteira esteja presente, o que mata o carregamento preguiçoso. Por isso a equipe escreve por conta própria os registros de inode da ext4 a partir dos metadados da imagem e deixa o restante esparso. O daemon ImageFS-blk converte requisições de blocos em leituras de intervalos de arquivos do ImageFS, e os blocos escritos vão para um arquivo esparso e são marcados em um mapa de bits. É um análogo do OverlayFS, só que no nível de blocos. De quebra, desaparece uma dor antiga: a cópia na escrita opera com um bloco, e não com o arquivo inteiro. No pior caso, o OverlayFS copiava gigabytes por causa de alguns bytes.
O resultado e a pegadinha
Os números são estes (virtio-fs, ImageFS, ImageFS-blk):
- bun install: 12,5 s, 3,1 s, 1,07 s;
- ripgrep no repositório do Linux com cache quente: 6,03 s, 3,77 s, 0,18 s;
- SQLite speedtest1: 543 s, 290 s, 43 s;
- pgbench somente leitura: 98 mil, 137 mil, 230 mil TPS;
- pgbench leitura e escrita: 8,3 mil, 11,9 mil, 18,8 mil TPS.
O ImageFS-blk superou até o ImageFS original: os metadados deixaram de passar pelo FUSE. A partida a frio em até um segundo foi mantida.
A abordagem tem um preço. O host deixa de ver os arquivos dentro da VM: ele conhece apenas blocos, e os snapshots são calculados pelo conjunto de blocos alterados. Além disso, com cache frio, o ripgrep no repositório leva 8,53 s no ImageFS-blk contra 4,47 s no ImageFS comum. Nesse caso, o esquema em blocos perde. Todos os números foram obtidos pela própria Modal em seu hardware, sem verificação independente.
O que fazer com isso
Se você constrói micro-VMs para agentes ou CI, não aceite o virtio-fs como sistema de arquivos raiz por padrão. Para uma sandbox isolada, em que o host não lê os arquivos do convidado, um sistema de arquivos compartilhado é um imposto desnecessário sobre cada operação de metadados. Teste não só o cold start, mas também o seu cenário real: instalação de pacotes, busca no código, chown e banco de dados. É justamente aí que aparece a diferença de 10 vezes.
- 12 de nov. de 2026NVIDIA Vera dobra a velocidade do Modal Sandboxes: até 4.281 tarefas por minuto com 150 contêineres
- 12 de nov. de 2026Snorkel executa milhões de simulações de agentes por mês e economiza 20% em sandboxes
- 12 de nov. de 2026Legora executa 2000 execuções paralelas de um agente jurídico em sandboxes da Modal
- 13 de out. de 2026Bloom Security encontra vulnerabilidade na publicação de pacotes, e agentes de IA ampliam o risco
Perguntas frequentes sobre a notícia
O que se sabe sobre Inicia rápido, trabalha devagar?
A Modal tem há tempos o ImageFS, um sistema de arquivos distribuído com carregamento preguiçoso para contêineres. Ele puxa antecipadamente apenas o índice de metadados, e o conteúdo dos arquivos é buscado sob demanda em um cache de vários níveis: memória, CDNs regionais e armazenamento global. Por isso os contêineres iniciam em menos de um segundo. Para escrita, há uma camada OverlayFS por cima.
Por que um chown vira três viagens?
O rastreamento mostrou o essencial. Um chown no kernel convidado se desdobra em três requisições ao host: getxattr para verificar capabilities, getattr para os bits setuid e setattr para a troca do proprietário em si. O daemon faz seis chamadas de sistema, e cada uma delas chega ao ImageFS. Total: cerca de 99 µs por operação, e isso com o virtiofsd já configurado para o cache máximo. A raiz do problema está na arquitetura.
O que se sabe sobre Falando em blocos?
Os engenheiros propuseram manter o sistema de arquivos inteiramente dentro do convidado e dar ao host apenas um dispositivo de blocos via virtio-blk. O disco não sabe o que é um arquivo: ele guarda e entrega pedaços de dados. A ext4 do convidado verifica as permissões, limpa bits e registra a alteração no journal por conta própria. Para o host, tudo vai depois, em lote, a cada poucos segundos. Um chown custa cerca de 2,1 µs em vez de 99.
Test Frontier LLMs & Autonomous Agents in One Workspace
Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.
O essencial da IA — uma vez por semana
Sete histórias que realmente importaram, escolhidas a dedo. Sem ruído nem releases.
Pronto! Verifique seu e-mail para a confirmação.