A virtualização na arquitetura ARM64 está prestes a receber um grande impulso de performance no kernel Linux, com a chegada do suporte para KVM_PRE_FAULT_MEMORY. Essa funcionalidade — já presente no x86 — permite “pré-aquecer” a memória de uma máquina virtual, reduzindo de forma significativa as pausas de execução em cenários críticos como migração ao vivo. Em termos práticos: menos interrupções, mais previsibilidade e migrações mais rápidas entre hosts.
Reduzindo a latência em migrações de VMs
Imagine que você está mudando de casa e, em vez de desembalar caixa por caixa conforme precisa de cada item, alguém já deixa tudo organizado nas prateleiras do novo apartamento. É exatamente essa a ideia aqui. Sem o pre-faulting, a VM “pede” páginas de memória conforme as acessa e o hypervisor vai criando os mapeamentos de segunda etapa — os famosos stage-2 faults — no calor do momento. Cada pedido gera uma microparada.

Com KVM_PRE_FAULT_MEMORY, o hypervisor pode pré-popular as tabelas de memória da VM, preparando os mapeamentos antes do primeiro acesso. O ganho é particularmente alto em post-copy live migration (quando a VM começa a rodar no destino antes de toda a RAM chegar), pois reduz a enxurrada de faltas de página que normalmente aconteceria durante a “quebra-gelos” inicial. A própria evolução recente do ecossistema (como KVM Userfault para viabilizar post-copy em VMs com guest_memfd) sublinha por que reduzir essa latência é tão valioso para operações no mundo real.
Como essa mágica funciona — em termos simples
Do ponto de vista do KVM, o pre-faulting é acionado via um ioctl que pede ao hypervisor para caminhar pelos endereços convidados (GPAs) e instalar os mapeamentos de stage-2 de antemão. O objetivo é só isso: popular a memória. Ele não executa inicializações específicas de tecnologias de segurança (CoCo) — isso fica a cargo de caminhos próprios de cada vendor. Em outras palavras, é uma ferramenta de preparo, não de “configuração secreta”.
O recurso já era exercitado em selftests do KVM (o arquivo pre_fault_memory_test.c
existe há tempos e valida o comportamento do ioctI), o que ajuda a garantir correção e a prevenir regressões à medida que novos backends ou variantes de memória (e.g., hugetlb, THP) entram em jogo. A extensão desses testes para ARM64 é parte essencial do pacote — porque otimização boa é otimização testada.
O que muda no ARM64 e por que isso importa
A novidade é trazer essa capacidade — até então associada ao x86 — para o ARM64 no Linux. Na prática, o hypervisor passa a pré-popular as tabelas de segunda etapa do ARM64 com um caminho especializado para pre-faults, evitando que a VM “tropece” em acessos iniciais e cortando o tempo de aquecimento em cargas com uso intensivo de memória (bancos de dados in-memory, caches como Redis/Memcached, motores de análise, máquinas de build, entre outros). Em migrações post-copy, isso significa menos stutters logo após o switchover.
Para o ecossistema, é um passo claro rumo à paridade de recursos com o x86. A comunidade já vinha polindo o KVM_PRE_FAULT_MEMORY
no lado x86 (há mudanças recentes, por exemplo, para torná-lo mais estrito em ambientes TDX), e agora o ARM64 colhe os frutos ao adotar a mesma estratégia: reduzir faults “best-effort” e estabilizar a experiência de migração em produção.
Quem puxa a fila (e o que isso sinaliza)
A série de patches foi enviada por Jack Thomson (Amazon), um sinal claro de que grandes provedores de nuvem veem ARM64 como plataforma cada vez mais competitiva para virtualização em data centers. Quando empresas desse porte investem em remover tail latencies de migração e ramp-up de memória, a mensagem é simples: mover workloads para ARM64 deve ser tão suave quanto no x86 — e, com essas melhorias, fica mais perto de ser. (A documentação do KVM já descreve o ioctl e seu escopo; a chegada no ARM64 encaixa essa peça no quebra-cabeça de performance.)
E para o seu ambiente, qual o impacto?
Se você opera clusters de virtualização com migração ao vivo frequente (atualizações, balanceamento de carga, economia de energia) ou roda aplicações memory-bound, esse pre-aquecer de páginas tende a encurtar a janela de impacto perceptível pelos usuários. É menos tempo de “aquecimento” após a VM pousar no novo host, menos picos de latência e mais throughput estável — o suficiente para caber dentro de janelas menores de manutenção sem sustos.
Em resumo: KVM no ARM64 dá um salto de performance ao adotar o KVM_PRE_FAULT_MEMORY — uma melhoria pragmática, focada em reduzir stage-2 faults e acelerar migração ao vivo em cenários do mundo real. Quem migra muito (e rápido) agradece.