Do bare metal à nuvem: KVM ARM64 SME leva a potência do Arm para dentro da VM

Escrito por
Emanuel Negromonte
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre...

O patch set que habilita SME no KVM ARM64 muda o jogo: streaming mode, ZA/ZN e controle de VL dentro da VM. Entenda o impacto para IA e HPC na nuvem Arm.

Se você acompanha o ecossistema Arm no servidor, já ouviu falar do SME — Scalable Matrix Extension. Pense nele como o “turbocompressor” do Armv9 para operações de matriz: mais throughput, menor latência, e um caminho direto para acelerar IA e HPC. Agora, o que mudou? Um patchset massivo acaba de aterrissar propondo suporte a SME em máquinas virtuais do KVM no ARM64. É um divisor de águas: não adianta ter hardware parrudo se a virtualização não expõe esses recursos de forma correta e performática. Com SME chegando ao KVM, os provedores de nuvem Arm podem, finalmente, prometer aceleração de IA/HPC dentro de VMs — não só no bare metal.

Antes de mergulhar no KVM, vamos alinhar o que é o SME. Em termos simples: SME adiciona um novo estado arquitetural (o registrador matricial ZA), um “modo de streaming” para vetores (controlado por PSTATE.SM) e, no SME2, um registrador de LUT chamado ZT0. Ele também introduz um comprimento de vetor independente do SVE, o que já dá uma pista de onde começam as dores de cabeça para virtualização. Em SME, você pode ter plataformas com SME sem SVE, e as listas de comprimentos suportados por SVE e SME não precisam coincidir (um detalhe nada trivial). E, quando o “streaming mode” está ativo, os registros Z/P (do universo SVE) passam a usar o VL de SME, que pode ser diferente do VL de SVE.

Por que isso importa para nuvem e data centers?

UozKaGw5 data center 2
Do bare metal à nuvem: KVM ARM64 SME leva a potência do Arm para dentro da VM 3

Treinar e servir modelos de IA ou rodar kernels de HPC em nuvem depende de throughput consistente — e, em 2025, isso significa acesso a instruções e estados arquiteturais avançados dentro da VM. Sem KVM portar SME, quem compra instâncias Arm com SME no host, mas precisa de isolamento via VMs, ficaria “preso” a fallback genérico (mais lento) ou teria que desmontar boa parte do modelo operacional. Habilitar SME no KVM destrava cenários multi-tenant onde cada VM pode usar ZA/streaming mode e, quando presente, ZT0, com salvamento/restauração de estado corretos, traps bem definidas e um ABI de usuários (VMM) previsível. Em termos de oferta de produto: isso habilita “VMs com aceleração de matriz” no cardápio de uma cloud Arm moderna.

O “pulo do gato” técnico: dois comprimentos de vetor e um novo modo

Se SVE já exigiu um malabarismo no ABI por causa de VL configurável em tempo de execução, SME sobe a barra: há um segundo VL (o de SME), e o famoso streaming mode faz os registros Z/P “trocarem de pele” para usar esse VL alternativo. Traduzindo: o VMM precisa:

  • Configurar, expor e “finalizar” o conjunto de VLs disponíveis tanto para SVE quanto para SME.
  • Sincronizar estado de ZA/FFR/ZT0 e dos bits de controle (SVCR.SM e SVCR.ZA) em momentos exatos (load/save de contexto), respeitando o que a arquitetura manda — inclusive o detalhe de que FFR no streaming mode pode ser opcional (depende de FA64).
  • Lidar com sistemas sem SVE mas com SME, onde o acesso a vetores fora do streaming mode muda de figura.

O patchset resolve essa dança propondo uma “finalização única” de vetores no KVM — renomeada para KVM_ARM_VCPU_VEC — que vale para SVE e SME ao mesmo tempo. Isso evita estados “meio finalizados” (SVE finalizado e SME não, ou vice-versa) que complicariam o acesso a registros e a definição de VL. O VMM negocia os VLs via “pseudoregistros” (um para SVE, outro para SME) e só depois faz a finalização. É um desenho que privilegia clareza e consistência do ABI de KVM.

ZA, ZT0, FA64, TPIDR2_EL0… e as arestas do contexto

O pacote traz várias minúcias que mostram maturidade da implementação:

  • ZA e ZT0 ficam acessíveis a user space (QEMU, por exemplo) com semântica que espelha a arquitetura: habilitar acesso zera o conteúdo (como no hardware), e leituras retornam zero quando desabilitados no SVCR.
  • FA64 (parte de SME que habilita o conjunto “full FP/SVE” no streaming mode, incluindo FFR) é tratado como sub-feature controlável via ID registers — crucial para refletir o que o host permite expor ao guest.
  • TPIDR2_EL0, um novo registrador de thread ligado a SME, é integrado ao contexto do convidado (salvo/restaurado com os outros TPIDRs), já pensando em otimizações como “lazy save” de ZA no espaço de usuário.
  • Há também controles de traps mais granulares (além dos undef traps), necessários para emular registros “presentes mas com restrições” (ex.: prioridades de SME em plataformas sem esse suporte).

Como tudo isso se traduz para o loop de execução? Em alto nível: ao entrar/sair do guest, o KVM precisa programar o VL “certo” (SVE ou SME, dependendo de PSTATE.SM), saber quando salvar FFR (que pode não existir no streaming mode sem FA64), e zerar/mascarar o que for exigido quando SVCR.ZA muda. O patchset também documenta cuidadosamente quais registros ficam visíveis para o convidado conforme as features habilitadas, e como os ID registers (como ID_AA64PFR1_EL1 e ID_AA64SMFR0_EL1) devem refletir o mundo oferecido à VM — inclusive o caso de SME sem SVE.

E o ecossistema? Compiladores, ACLE e bibliotecas

Outro motivo para se animar: o lado de software de alto nível já vem se movendo para SME (intrínsecos/ACLE, toolchains, kernels numéricos). Com o KVM expondo SME a VMs, bibliotecas aceleradas (BLAS, kernels de convolução, atalho para attention kernels, etc.) podem rodar “como se fosse bare metal” — só que isoladas e com mobilidade de nuvem. Isso reduz a fricção para ofertar instâncias Arm com aceleração de IA que sejam realmente plug-and-play para workloads modernos.

O que ainda merece atenção

  • Compatibilidade e migração: o patchset permite granularidade na exposição de sub-features (ex.: FA64, SME2/ZT0) via ID registers, mas migrações entre hosts assimétricos (VLs diferentes, SME sem SVE, etc.) ainda exigem política e orquestração cuidadosas do lado do VMM/cloud.
  • pKVM / protegido: há caminhos mais restritivos (por exemplo, hosts que evitam executar com ZA/streaming mode habilitados) para reduzir custo de memória/complexidade — bom para segurança/simplicidade, mas com impacto funcional. Avaliar o trade-off no seu cenário é essencial.

Em uma frase: por que isso é grande?

Porque fecha o circuito: hardware Armv9 com SME + toolchains/libraries já maduras + KVM expondo tudo isso para VMs = IA/HPC com isolamento e elasticidade, sem pedir licença para soluções proprietárias. Para os operadores de nuvem, vira argumento comercial (“instâncias Arm com aceleração de matriz em VM”) e técnico (melhor utilization do host, portabilidade de workloads). Para times de plataforma, significa um ABI do KVM coeso — com uma única finalização de vetores e regras claras para SVCR, ZA, ZT0 e companhia.

O suporte a “KVM ARM64 SME” ainda está em revisão pública — a série [PATCH v8 00/29] KVM: arm64: Implement support for SME, enviada por Mark Brown em 2 de setembro de 2025, removeu o rótulo de RFC e parece madura, mas ainda não foi mesclada. Como a v7 foi rebaseada sobre o v6.17-rc1 e o v6.16 saiu em 27 de julho de 2025, o cenário mais realista é pousar no ciclo do Linux 6.18 (ou posterior), isto é, depois que o 6.17 for lançado e abrir a próxima janela de mesclagem. Em resumo: espere algo a partir do Linux 6.18, sujeito ao ritmo de revisão no KVM/arm64.

TL;DR técnico (para colar na review do seu VMM)

  • SME = ZA + streaming mode + VL independente + (no SME2) ZT0; pode existir sem SVE.
  • KVM unifica a finalização de vetores em KVM_ARM_VCPU_VEC; SVE/SME compartilham o “commit” do VL.
  • Pseudoregistros expõem conjuntos de VL (um para SVE, outro para SME) para user space.
  • FFR no streaming mode depende de FA64; traps e save/restore respeitam isso.
  • TPIDR2_EL0 entra no contexto; ID registers controlam exposição de sub-features (FA64, SME2).
  • Objetivo: KVM ARM64 SME pronto para rodar IA/HPC de verdade em VMs Arm.
Compartilhe este artigo