Pular para o conteúdo principal

Desempenho

Onde foi medido​

Todos os números desta página foram medidos no macOS 27, Apple Silicon (M1 Pro), em 19 e 20/10/2026. O Linux ainda não foi medido; não assuma que os valores se repetem com KVM.

Boot​

MedidaValor
boot até a 1ª resposta do guest Python, root ext4 read-only, 30 bootsp50 260 ms, p95 266 ms
efeito da RAM configurada (256 a 2048 MiB) no bootnenhum

"Resposta" é a primeira resposta do guest ao job sh true que a espera de prontidão manda a cada 1 ms. É o momento em que a VM pode receber um job real.

Execução de um job​

CaminhoValor
CLI, job Python, boot frio~240 ms no total, dos quais 31–38 ms de execução
API, pool cheio, uma stack com imagem26–43 ms de requisição HTTP completa
API, 15 stacks, todos os pools cheios49–175 ms

A diferença entre CLI e API é o boot, que o pool tira do caminho da requisição. Com o pool vazio, a API cai no mesmo boot frio da CLI.

Por stack, pela CLI com boot frio:

StackExecuçãoTotal (com boot)
python31–44 ms~240 ms
nodejs128–148 ms353–371 ms
go247 ms com o cache de build aquecido (3,4 s sem ele)510 ms
java522 ms739 ms
c71–72 ms282 ms
sh2 ms199 ms

Máquinas​

MedidaValor
machine start até o guest responder (python)204–244 ms
start de máquina com rede190 ms
disco de 10 GiB recém-criado, espaço no host6,4 MB
cp de 50 MB para a máquina / da máquina620 ms (~84 MB/s) / 594 ms (~88 MB/s)
nome bloqueado pela política até o erro no guest< 1 s

Memória​

MedidaValor
footprint de uma VM parada44 MB
RSS da mesma VM172 MB, incluindo páginas limpas compartilhadas

A memória da libkrun é elástica: o host paga só as páginas que o guest toca. O teto de RAM por linguagem no catálogo limita o abuso, mas não é reservado.

Build de imagem e pack​

MedidaValor
build da imagem Python~8–10 s
pull + achatamento das camadas (python)2,7 s
warmup do Python (compileall)~1 s
build da imagem Go35 s, dos quais 28 s de mkfs.ext4
pack da imagem python134 MiB → payload de 31 MiB
pack de uma máquina python com pacote instalado, arquivo único46 MiB

O build é custo único por chave de cache; um segundo build com as mesmas entradas sai do cache. O tempo de cada stack está no Relatório de testes.

GPU​

llama-bench com Qwen2.5 0.5B: processar o prompt saiu a 893–1.365 tokens/s na GPU (Venus) contra 193–264 na CPU. Detalhes e a leitura dos números em GPU.

O que o desempenho deve ao desenho​

  • Root em disco ext4 read-only, não virtiofs: virtiofs não foi mais rápido e não confina o guest aos diretórios compartilhados.
  • Warmup gravado na imagem: o .pyc da stdlib do Python e o cache de build do Go já vêm prontos; para Go, a cópia para o tmpfs acontece no boot, antes de a VM entrar no pool.
  • Pool com VM de uso único: o boot acontece em background, no máximo 2 simultâneos por linguagem.
  • Disco de máquina clonado: clonefile no APFS; o disco novo não copia os 10 GiB.

Medições pendentes​

  • desempenho no Linux (x86_64 e aarch64, KVM);
  • máquinas com GPU em modelo maior que 0,5B.