Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A interface da máquina virtual exposta por cada partição inclui uma unidade de gerenciamento de memória (MMU). A MMU virtual exposta pelas partições do hipervisor é geralmente compatível com as MMUs existentes.
A implementação virtual da MMU é específica da arquitetura. Este documento abrange tanto plataformas x64 como ARM64, com secções específicas de cada plataforma claramente assinaladas.
Visão geral da MMU virtual
Os processadores virtuais expõem a memória virtual e um TLB virtual (buffer de tradução look-side), que armazena em cache traduções de endereços virtuais para endereços físicos (convidados). Assim como o TLB em um processador lógico, o TLB virtual é um cache não coerente, e essa não coerência é visível para os convidados. O hipervisor expõe operações para liberar o TLB. Os hóspedes podem usar essas operações para remover entradas potencialmente inconsistentes e tornar as traduções de endereços virtuais previsíveis.
Compatibility
A MMU virtual exposta pelo hipervisor é geralmente compatível com a MMU física encontrada na arquitetura do processador subjacente.
Em plataformas x64
A MMU virtual nas plataformas x64 é geralmente compatível com a MMU física encontrada num processador x64. Existem as seguintes diferenças entre hóspedes e observáveis:
- O CR3. PWT e CR3. Os bits PCD podem não ser suportados em algumas implementações de hipervisor. Em tais implementações, qualquer tentativa do convidado de definir esses sinalizadores por meio de uma instrução MOV para CR3 ou um switch de porta de tarefa será ignorada. Tentativas de definir esses bits programaticamente através de HvSetVpRegisters ou HvCallSwitchVirtualAddressSpace podem resultar em um erro.
- Os bits PWT e PCD dentro de uma entrada de tabela de página folha (por exemplo, um PTE para páginas 4-K e um PDE para páginas grandes) especificam a capacidade de cache da página que está sendo mapeada. Os bits PAT, PWT e PCD dentro de entradas de tabela de página não folha indicam a capacidade de cache da tabela de página seguinte na hierarquia. Algumas implementações de hipervisor podem não suportar esses sinalizadores. Em tais implementações, todos os acessos à tabela de páginas executados pelo hipervisor são feitos usando atributos de cache write-back. Isso afeta, em particular, os bits acessados e sujos gravados nas entradas da tabela de páginas. Se o convidado definir os bits PAT, PWT ou PCD dentro de entradas de tabela de página não folha, uma mensagem de "recurso não suportado" poderá ser gerada quando um processador virtual acessar uma página mapeada por essa tabela de página.
- O bit CR0.CD (cache disable) pode não ser suportado em algumas implementações de hipervisor. Em tais implementações, o bit de CR0.CD deve ser definido como 0. Qualquer tentativa do convidado de definir este sinalizador através de uma instrução MOV para CR0 será ignorada. Tentativas de definir esse bit programaticamente através de HvSetVpRegisters resultarão em um erro.
- O MSR PAT (tipo de endereço de página) é um registo por VP. No entanto, quando todos os processadores virtuais numa partição definem o PAT MSR com o mesmo valor, o novo efeito torna-se um efeito de toda a partição.
- Por razões de segurança e isolamento, a instrução INVD será virtualizada para agir como uma instrução WBINVD, com algumas diferenças. Por motivos de segurança, deve ser utilizado CLFLUSH.
Operações de gerenciamento de TLB herdadas
Cada arquitetura fornece mecanismos nativos para gerir os TLBs do processador. Estes mecanismos são virtualizados pelo hipervisor e afetam apenas o processador virtual local. Para invalidar traduções noutros processadores virtuais, o software deve usar interrupções interprocessadoras específicas da arquitetura ou as hiperchamadas melhoradas de gestão TLB descritas na secção seguinte.
Em plataformas x64
A arquitetura x64 fornece os seguintes mecanismos de gestão do TLB:
- A instrução INVLPG invalida a tradução para uma única página a partir do TLB do processador. Se o endereço virtual especificado foi originalmente mapeado como uma página 4-K, a tradução para esta página é removida do TLB. Se o endereço virtual especificado foi originalmente mapeado como uma "página grande" (2 MB ou 4 MB, dependendo do modo MMU), a tradução para toda a página grande é removida do TLB. A instrução INVLPG libera traduções globais e não globais. As traduções globais são definidas como aquelas que têm o bit "global" definido dentro da entrada da tabela de páginas.
- Os interruptores de instruções e tarefas de MOV para CR3 que modificam o CR3 invalidam traduções para todas as páginas não globais dentro do TLB do processador.
- Uma instrução de MOV para CR4 que modifica o CR4. PGE (global page enable), o CR4. PSE (extensões de tamanho de página), ou CR4. O bit PAE (extensões de endereço de página) invalida todas as traduções (globais e não globais) dentro do TLB do processador.
Observe que todas essas operações de invalidação afetam apenas um processador. Para invalidar traduções noutros processadores, o software deve usar um mecanismo de "TLB shoot-down" baseado em software (tipicamente implementado através de interrupções entre processos).
Nas plataformas ARM64
A arquitetura ARM64 fornece mecanismos de gestão do TLB através das instruções TLBI (TLB Invalidate). Por favor, consulte o manual de arquitetura do ARM para mais detalhes.
Nota: Instruções de manutenção da cache set/way (como DC ISW, DC CSW, DC CISW) não são suportadas em ambientes virtualizados e são tratadas como no-ops.
Aprimoramentos do TLB virtual
Para além de suportar os mecanismos legados de gestão do TLB descritos anteriormente, nas plataformas x64 o hipervisor também suporta um conjunto de melhorias que permitem a um convidado gerir o TLB virtual de forma mais eficiente. Essas operações aprimoradas podem ser usadas de forma intercambiável com operações de gerenciamento de TLB legadas.
O hipervisor suporta as seguintes hiperchamadas para invalidar TLBs:
| Hiperchamada | Description |
|---|---|
| HvCallFlushVirtualAddressSpace | Invalida todas as entradas TLB virtuais que pertencem a um espaço de endereço especificado. |
| HvCallFlushVirtualAddressSpaceEx | Semelhante ao HvCallFlushVirtualAddressSpace, usa um conjunto de VP esparso como entrada. |
| HvCallFlushVirtualAddressList | Invalida uma parte do espaço de endereçamento especificado. |
| HvCallFlushVirtualAddressListEx | Semelhante a HvCallFlushVirtualAddressList, usa um conjunto de VP esparso como entrada. |
Em alguns sistemas (aqueles com suporte de virtualização suficiente em hardware), as instruções de gerenciamento de TLB herdadas podem ser mais rápidas para invalidação de TLB local ou remoto (entre processadores). Os hóspedes interessados no desempenho ideal devem usar o 0x40000004 folha CPUID para determinar quais comportamentos implementar usando hiperchamadas:
- UseHypercallForAddressSpaceSwitch: Se esse sinalizador estiver definido, o chamador deve assumir que é mais rápido usar HvCallSwitchVirtualAddressSpace para alternar entre espaços de endereço. Se esse sinalizador estiver claro, uma instrução MOV para CR3 é recomendada.
- UseHypercallForLocalFlush: Se esse sinalizador estiver definido, o chamador deve assumir que é mais rápido usar hiperchamadas (em oposição a INVLPG ou MOV para CR3) para liberar uma ou mais páginas do TLB virtual.
- UseHypercallForRemoteFlushAndLocalFlushEntire: Se esse sinalizador estiver definido, o chamador deve assumir que é mais rápido usar hiperchamadas (em vez de usar interrupções entre processadores geradas por convidados) para liberar uma ou mais páginas do TLB virtual.
Nas plataformas ARM64, os visitantes devem geralmente utilizar mecanismos arquitetónicos para a gestão do TLB.
Visão geral do controle de cache de memória
O hipervisor suporta configurações de cacheability definidas pelo convidado para páginas mapeadas dentro do espaço GVA do convidado. Para obter uma descrição detalhada das configurações de cacheability disponíveis e seus significados, consulte a documentação da Intel ou AMD.
Quando um processador virtual acessa uma página através de seu espaço GVA, o hipervisor honra os bits do atributo de cache (PAT, PWT e PCD) dentro da entrada da tabela de página de convidado usada para mapear a página. Estes três bits são utilizados como um índice no registo PAT (tipo de endereço de página) da partição para procurar a definição final de cacheability para a página.
As páginas acessadas diretamente através do espaço GPA (por exemplo, quando a paginação está desativada porque CR0.PG está limpa) usam uma capacidade de cache definida pelos MTRRs. Se a implementação do hipervisor não suportar MTRRs virtuais, a capacidade de cache do WB será assumida.
Misturando tipos de cache entre uma partição e o hipervisor
Os hóspedes devem estar cientes de que algumas páginas dentro de seu espaço GPA podem ser acessadas pelo hipervisor. A lista que se segue, embora não seja exaustiva, apresenta vários exemplos:
- Páginas que contêm parâmetros de entrada ou saída para hiperchamadas
- Todas as páginas de sobreposição, incluindo a página de hiperchamada, as páginas SIEF e SIM SynIC e as páginas de estatísticas
- Páginas de assistência de VP e outras páginas de interface de hipervisores
O hipervisor realiza sempre acedos a parâmetros de hiperchamada e páginas sobrepostas usando Write-Back atributos cacheáveis:
- Em plataformas x64: tipo de cache WB (Write-Back) via PAT
- Nas plataformas ARM64: Memória normal com atributos de escrita interna e externa, alocação de leitura Write-Allocate
O hipervisor sempre executa acessos a parâmetros de hiperchamada e páginas de sobreposição usando a configuração de cacheabilidade do WB.