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.
Esta secção descreve como o software convidado deteta a presença de um hipervisor e consulta as suas capacidades, funcionalidades e informações de versão utilizando mecanismos de descoberta específicos da arquitetura.
Descoberta de Funcionalidades e Interfaces (x64)
O software convidado interage com o hipervisor através de uma variedade de mecanismos. Muitos deles espelham os mecanismos tradicionais usados pelo software para interagir com o processador subjacente. Como tal, estes mecanismos são específicos da arquitetura. Na arquitetura x64, os seguintes mecanismos são usados:
- Instrução CPUID – Usada para recursos estáticos e informações de versão.
- MSRs (registros específicos do modelo) – Usados para valores de status e controle.
- Registros mapeados pela memória – Usados para valores de status e controle.
- Interrupções do processador – Usado para eventos assíncronos, notificações e mensagens.
Além dessas interfaces específicas de arquitetura, o hipervisor fornece uma interface processual simples implementada com hiperchamadas.
Descoberta de hipervisor
Antes de usar qualquer interface de hipervisor, o software deve primeiro determinar se está sendo executado em um ambiente virtualizado. Em plataformas x64 que estão em conformidade com esta especificação, isso é feito executando a instrução CPUID com um valor de entrada (EAX) de 1. Após a execução, o código deve verificar o bit 31 do registro ECX (o "bit presente do hipervisor"). Se esse bit estiver definido, um hipervisor estará presente. Em um ambiente não virtualizado, o bit será claro.
CPUID.01h.ECX:31 // if set, virtualization present
Se o "bit presente do hipervisor" estiver definido, folhas CPUID adicionais podem ser consultadas para obter mais informações sobre o hipervisor em conformidade e seus recursos. Duas dessas folhas estão garantidamente disponíveis: 0x40000000 e 0x40000001. Folhas numeradas posteriormente também podem estar disponíveis.
Folhas CPUID padrão do hipervisor
Quando a folha em 0x40000000 é consultada, o hipervisor retornará informações que fornecem o número máximo de folha CPUID do hipervisor e uma assinatura de ID de fornecedor.
| Register | Informações Prestadas |
|---|---|
| EAX | O valor máximo de entrada para informações CPUID do hipervisor |
| EBX | Assinatura de ID do fornecedor do hipervisor |
| ECX | Assinatura de ID do fornecedor do hipervisor |
| EDX | Assinatura de ID do fornecedor do hipervisor |
Se a folha em 0x40000001 for consultada, ela retornará um valor que representa uma identificação de interface de hipervisor neutra do fornecedor. Isso determina a semântica das folhas de através 0x4000002do 0x400000FF .
| Register | Informações Prestadas |
|---|---|
| EAX | Assinatura da interface do hipervisor. |
| EBX | Reservado |
| ECX | Reservado |
| EDX | Reservado |
Essas duas folhas permitem que o convidado consulte o ID do fornecedor do hipervisor e a interface de forma independente. O ID do fornecedor é fornecido apenas para fins informativos e de diagnóstico. Recomenda-se que o software baseie apenas as decisões de compatibilidade na assinatura da interface relatada através do leaf 0x40000001.
Folhas de CPUID do Microsoft Hypervisor
Em hipervisores em conformidade com a interface CPUID do hipervisor da Microsoft, os 0x40000000 registradores e 0x40000001 folha terão os seguintes valores.
Intervalo de folhas CPUID do hipervisor - 0x40000000
O EAX determina a folha CPUID máxima do hipervisor. EBX-EDX contêm a assinatura de ID do fornecedor do hipervisor. A assinatura de ID do fornecedor deve ser usada apenas para fins de relatório e diagnóstico.
| Register | Informações Prestadas |
|---|---|
| EAX | O valor máximo de entrada para informações CPUID do hipervisor. Nos hipervisores da Microsoft, isso será pelo menos 0x40000005. |
| EBX | 0x7263694D—"Micr" |
| ECX | 0x666F736F—"Osof" |
| EDX | 0x76482074—"t Hv" |
Identificação da interface neutra do fornecedor do hipervisor - 0x40000001
O EAX contém a assinatura de identificação da interface do hipervisor. Isso determina a semântica das folhas de através 0x40000002do 0x400000FF .
| Register | Informações Prestadas |
|---|---|
| EAX | 0x31237648—"Hv#1" |
| EBX | Reservado |
| ECX | Reservado |
| EDX | Reservado |
Os hipervisores em conformidade com a interface "Hv#1" também fornecem pelo menos as seguintes folhas.
Identidade do sistema do hipervisor - 0x40000002
| Register | Bits | Informações Prestadas |
|---|---|---|
| EAX | Número de compilação | |
| EBX | 31-16 | Versão principal |
| 15-0 | Versão Menor |
Identificação de recursos do hipervisor - 0x40000003
EAX e EBX indicam quais recursos estão disponíveis para a partição com base nos privilégios de partição atuais.
| Register | Bits | Informações Prestadas |
|---|---|---|
| EAX | Corresponde aos bits 31-0 de HV_PARTITION_PRIVILEGE_MASK | |
| EBX | Corresponde aos bits 63-32 de HV_PARTITION_PRIVILEGE_MASK | |
| ECX | 4-0 | Reservado |
| 5 | Invariant Mperf está disponível | |
| 6 | A pilha de sombras do supervisor está disponível | |
| 7 | PMU arquitetônica está disponível | |
| 8 | A intercetação de trap de exceção está disponível | |
| 31-9 | Reservado | |
| EDX | 0 | Preterido (disponibilidade previamente indicada da instrução MWAIT) |
| 1 | O suporte à depuração de convidados está disponível | |
| 2 | O suporte ao Monitor de Desempenho está disponível | |
| 3 | Está disponível suporte para eventos de particionamento dinâmico da CPU física | |
| 4 | Está disponível suporte para passar o bloco de parâmetros de entrada hypercall através de registos XMM | |
| 5 | O suporte para um estado ocioso de convidado virtual está disponível | |
| 6 | Está disponível suporte para o estado de suspensão do hipervisor | |
| 7 | Suporte para consultar distâncias NUMA está disponível | |
| 8 | Está disponível suporte para determinar as frequências do temporizador | |
| 9 | Suporte para injetar verificações de máquinas sintéticas está disponível | |
| 10 | Suporte para MSRs de falha de convidado está disponível | |
| 11 | Suporte para MSRs de depuração está disponível | |
| 12 | Suporte para NPIEP está disponível | |
| 13 | DisableHypervisorAvailable | |
| 14 | ExtendedGvaRangesForFlushVirtualAddressListAvailable | |
| 15 | Está disponível suporte para a devolução de saída de hiperchamada através de registos XMM | |
| 16 | Reservado | |
| 17 | SintPollingModeDisponível | |
| 18 | HypercallMsrLockDisponível | |
| 19 | Use temporizadores sintéticos diretos | |
| 20 | Suporte para registo PAT disponível para VSM | |
| 21 | Suporte para registro bndcfgs disponível para VSM | |
| 22 | Reservado | |
| 23 | Suporte para temporizador sintético não interrompido disponível | |
| 25-24 | Reservado | |
| 26 | Recurso LBR (Last Branch Record) da Intel suportado | |
| 31-27 | Reservado |
Recomendações de implementação - 0x40000004
Indica quais comportamentos o hipervisor recomenda que o sistema operacional implemente para um desempenho ideal.
| Register | Bits | Informações Prestadas |
|---|---|---|
| EAX | 0 | Recomende o uso de hypercall para comutadores de espaço de endereçamento em vez da instrução MOV para CR3. |
| 1 | Recomende o uso de hypercall para flushes TLB locais em vez de instruções INVLPG ou MOV para CR3. | |
| 2 | Recomende o uso de hypercall para liberações TLB remotas em vez de interrupções entre processadores. | |
| 3 | Recomende o uso de MSRs para acessar registros APIC EOI, ICR e TPR em vez de suas contrapartes mapeadas pela memória. | |
| 4 | Recomende o uso do MSR fornecido pelo hipervisor para iniciar uma redefinição do sistema. | |
| 5 | Recomendo o uso de tempo relaxado para esta partição. Se usada, a VM deve desativar todos os tempos limite de vigilância que dependem da entrega oportuna de interrupções externas. | |
| 6 | Recomende o uso do remapeamento DMA. | |
| 7 | Recomende o uso do remapeamento de interrupção. | |
| 8 | Reservado. | |
| 9 | Recomende a substituição do AutoEOI. | |
| 10 | Recomende o uso da hiperchamada SyntheticClusterIpi. | |
| 11 | Recomende o uso da interface ExProcessorMasks mais recente. | |
| 12 | Indica que o hipervisor está aninhado em uma partição Hyper-V. | |
| 13 | Recomende o uso de INT para chamadas de sistema MBEC. | |
| 14 | Recomende um hipervisor aninhado usando a interface VMCS habilitada. Também indica que iluminações aninhadas adicionais podem estar disponíveis (ver folha 0x4000000A). | |
| 15 | UseSyncedTimeline – Indica que a partição deve consumir o viés QueryPerformanceCounter fornecido pela partição raiz. | |
| 16 | Reservado | |
| 17 | UseDirectLocalFlushEntire – Indica que o convidado deve alternar CR4. PGE para liberar todo o TLB, pois isso é mais eficiente do que fazer uma hiperchamada. | |
| 18 | NoNonArchitecturalCoreSharing - indica que o compartilhamento de núcleo não é possível. Isso pode ser usado como uma otimização para evitar a sobrecarga de desempenho do STIBP. | |
| 31-19 | Reservado | |
| EBX | Número recomendado de tentativas de repetir uma falha de spinlock antes de notificar o hipervisor sobre as falhas. 0xFFFFFFFF indica nunca notificar. | |
| ECX | 6-0 | ImplementedPhysicalAddressBits – Relata a largura do endereço físico (MAXPHYADDR) relatada pelos processadores físicos do sistema. Se todos os bits contiverem 0, o recurso não será suportado. Observe que o valor relatado é o número real de bits de endereço físico, e não a posição de bit usada para representar esse número. |
| 31-7 | Reservado | |
| EDX | Reservado |
Limites de implementação do hipervisor - 0x40000005
Descreve os limites de escala suportados na implementação atual do hipervisor. Se qualquer valor for zero, o hipervisor não expõe as informações correspondentes; caso contrário, eles têm esses significados.
| Register | Informações Prestadas |
|---|---|
| EAX | O número máximo de processadores virtuais suportados |
| EBX | O número máximo de processadores lógicos suportados |
| ECX | O número máximo de vetores de interrupção física disponíveis para remapeamento de interrupção. |
| EDX | Reservado |
Recursos de hardware de implementação - 0x40000006
Indica quais recursos específicos de hardware foram detetados e estão atualmente em uso pelo hipervisor.
| Register | Bits | Informações Prestadas |
|---|---|---|
| EAX | 0 | O suporte para assistência de sobreposição APIC é detetado e está em uso. |
| 1 | O suporte para bitmaps MSR é detetado e está em uso. | |
| 2 | O suporte para contadores de desempenho de arquitetura é detetado e está em uso. | |
| 3 | O suporte para conversão de endereços de segundo nível é detetado e está em uso. | |
| 4 | O suporte para remapeamento de DMA é detetado e está em uso. | |
| 5 | O suporte para remapeamento de interrupção é detetado e está em uso. | |
| 6 | Indica que um purificador de patrulha de memória está presente no hardware. | |
| 7 | A proteção DMA está em uso. | |
| 8 | O HPET é solicitado. | |
| 9 | Os temporizadores sintéticos são voláteis. | |
| 13-10 | O nível do hipervisor do convidado atual - '0' se não estiver aninhado. | |
| 14 | Modo de destino físico necessário. | |
| 15 | Use VMFUNC para a opção de mapa de alias. | |
| 16 | O suporte para zeragem de memória de hardware está presente. | |
| 17 | O suporte para Convidado Irrestrito está presente. | |
| 18 | O apoio à alocação de recursos (RDT-A, PQOS-A) está presente. | |
| 19 | O suporte para monitoramento de recursos (RDT-M, PQOS-M) está presente. | |
| 20 | O suporte para PMU virtual convidado está presente. | |
| 21 | O suporte para LBR virtual convidado está presente. | |
| 22 | O suporte para IPT virtual convidado está presente. | |
| 23 | Suporte para emulação APIC está presente. | |
| 24 | A tabela ACPI WDAT é detetada e está em uso pelo hipervisor. | |
| 31-25 | Reservado | |
| EBX | Reservado | |
| ECX | Reservado | |
| EDX | Reservado |
Identificação de recursos do hipervisor aninhado - 0x40000009
Descreve os recursos expostos à partição pelo hipervisor ao executar aninhado. O EAX descreve o acesso a MSRs virtuais. EDX descreve o acesso a hiperchamadas.
| Register | Bits | Informações Prestadas |
|---|---|---|
| EAX | 1-0 | Reservado |
| 2 | AccessSynicRegs | |
| 3 | Reservado | |
| 4 | AccessIntrCtrlRegs | |
| 5 | AccessHypercallMsrs | |
| 6 | AccessVpIndex | |
| 11-7 | Reservado | |
| 12 | AccessReenlightenmentControls | |
| 31-13 | Reservado | |
| EBX | Reservado | |
| ECX | Reservado | |
| EDX | 3-0 | Reservado |
| 4 | XmmRegistersForFastHypercallAvailable | |
| 14-5 | Reservado | |
| 15 | FastHypercallOutputAvailable | |
| 16 | Reservado | |
| 17 | SintPollingModeDisponível | |
| 31-18 | Reservado |
Recursos de virtualização aninhada do hipervisor - 0x4000000A
Indica quais otimizações de virtualização aninhadas estão disponíveis para um hipervisor aninhado.
| Register | Bits | Informações Prestadas |
|---|---|---|
| EAX | 7-0 | Versão iluminada do VMCS (baixa) |
| 15-8 | Versão iluminada do VMCS (alta) | |
| 16 | Reservado | |
| 17 | Indica suporte para hiperchamadas de liberação virtual direta. | |
| 18 | Indica suporte para as hiperchamadas HvCallFlushGuestPhysicalAddressSpace e HvCallFlushGuestPhysicalAddressList (em plataformas x64). | |
| 19 | Indica suporte para o uso de um bitmap MSR habilitado. | |
| 20 | Indica suporte para combinar exceções de virtualização na classe de exceção de falha de página. | |
| 21 | Indica suporte para valor diferente de zero do campo 0x00002802 (GuestIa32DebugCtl) no VMCS. | |
| 22 | Indica suporte para o TLB habilitado em plataformas AMD. Os flushes ASID não afetam as entradas TLB derivadas do NPT. As hiperchamadas devem ser usadas para invalidar entradas NPT TLB. Também indica suporte para as hiperchamadas HvCallFlushGuestPhysicalAddressSpace e HvCallFlushGuestPhysicalAddressList. | |
| 31-21 | Reservado | |
| EBX | 0 | Indica suporte para os campos GuestPerfGlobalCtrl e HostPerfGlobalCtrl no VMCS habilitado. |
| 31-1 | Reservado | |
| ECX | Reservado | |
| EDX | Reservado |
Versioning
As informações da versão do hipervisor são codificadas em leaf 0x40000002. Dois números de versão são fornecidos: a versão principal e a versão de serviço.
A versão principal inclui um número de versão principal e secundária e um número de compilação. Estes correspondem aos números de lançamento do Microsoft Windows. A versão do serviço descreve as alterações feitas na versão principal.
Os clientes são fortemente incentivados a verificar os recursos do hipervisor usando folhas 0x40000003 CPUID em 0x40000005 vez de comparar com intervalos de versões.
Descoberta de Funcionalidades e Interfaces (ARM64)
Na arquitetura ARM64, os seguintes mecanismos são usados para a descoberta de funcionalidades e interfaces:
- Consultas HvRegister via HvCallGetVpRegisters – Usado para informações estáticas sobre funcionalidades e versões.
- Registros mapeados pela memória – Usados para valores de status e controle.
Além dessas interfaces específicas de arquitetura, o hipervisor fornece uma interface processual simples implementada com hiperchamadas.
Descoberta de hipervisor
Antes de usar a maioria das interfaces de hipervisores, o software deve primeiro determinar se está a correr num ambiente virtualizado.
No ARM64, o software convidado pode descobrir o hipervisor usando a interface padrão SMCCC (SMC Calling Convention). A descoberta é realizada usando a instrução HVC ou SMC com o ID 0xC600FF0 da função em X0 (isto corresponde a uma chamada de hipervisor específica de 64 bits de fornecedor, VENDOR_HYP_FUNCTION_CODE_UID). A chamada segue as convenções do SMCCC, incluindo um imm16 de 0. O hipervisor Microsoft devolve os seguintes valores que representam o GUID 4d32ba58-cd24-4764-8eef-6c7516597024:
| Register | Valor |
|---|---|
| X0 | 0x4d32ba58 |
| X1 | 0xcd244764 |
| X2 | 0x8eef6c75 |
| X3 | 0x16597024 |
Uma vez detetado um hipervisor, o software convidado pode consultar as capacidades do hipervisor através de registos sintéticos usando a hiperchamada HvCallGetVpRegisters . Vários registos-chave podem ser consultados antes de o registo do ID do sistema operativo convidado ser definido, permitindo a descoberta precoce das funcionalidades do hipervisor durante o arranque.
Registos de Funcionalidades do Hipervisor
As plataformas ARM64 consultam a informação do hipervisor através de registos sintéticos em vez de instruções CPUID. Estes registos fornecem informação equivalente aos seus equivalentes CPUID x64 e são acedidos através dos registos HvCallGetVp. Todos os registos de funcionalidades devolvem valores de 128 bits.
Hypervisor System Identity - HvRegisterHypervisorVersion
Devolve a informação da versão codificada num valor de 128 bits. A disposição é idêntica à 0x40000002 folha do CPUID x64, com valores de registos x64 agrupados no resultado de 128 bits (EAX nos bits 31-0, EBX nos bits 63-32, ECX nos bits 95-64, EDX nos bits 127-96).
Identificação de Funcionalidades do Hipervisor - HvRegisterPrivilegesAndFeaturesInfo
Equivalente ao CPUID x64 leaf 0x40000003. Indica quais as funcionalidades disponíveis para a partição com base nos privilégios atuais da partição. Devolve um valor de 128 bits com estes campos:
| Bits | Informações Prestadas |
|---|---|
| 31-0 | Corresponde aos bits 31-0 de HV_PARTITION_PRIVILEGE_MASK |
| 63-32 | Corresponde aos bits 63-32 de HV_PARTITION_PRIVILEGE_MASK |
| 64 | Está disponível suporte para depuração de convidados. |
| 65 | Está disponível suporte para Monitor de Desempenho. |
| 66 | Está disponível suporte para eventos físicos de partição dinâmica da CPU. |
| 67 | Está disponível suporte para um estado virtual de guest idle. |
| 68 | Está disponível suporte para o estado de sono do hipervisor. |
| 69 | Está disponível suporte para consultar distâncias NUMA. |
| 70 | Existe suporte para determinar as frequências dos temporizadores. |
| 71 | Está disponível suporte para injeção de verificações de máquinas sintéticas. |
| 72 | Está disponível suporte para registos de falha de convidados. |
| 73 | Reservado. |
| 74 | DisableHypervisorDisponível. |
| 75 | Reservado. |
| 76 | SintPollingModeDisponível. |
| 77 | Usa temporizadores sintéticos diretos. |
| 127-78 | Reservado. |
Recomendações de Implementação - HvRegisterFeaturesInfo
Equivalente a 0x40000004 CPUID x64. Indica quais comportamentos o hipervisor recomenda que o sistema operacional implemente para um desempenho ideal. Devolve um valor de 128 bits.
| Bits | Informações Prestadas |
|---|---|
| 0 | UseHvRegisterForReset - No ARM64, isto é sempre falso (as partições devem usar PSCI SYSTEM_RESET em vez disso). |
| 1 | Recomendo o uso de tempo relaxado para esta partição. Se usada, a VM deve desativar todos os tempos limite de vigilância que dependem da entrega oportuna de interrupções externas. |
| 2 | Recomende o uso da hiperchamada SyntheticClusterIpi. No ARM64, isto é falso para a partição raiz (que deve usar ICC_SGI1R_EL1 diretamente) e é verdade para partições convidadas. |
| 3 | Recomende o uso da interface ExProcessorMasks mais recente. |
| 4 | Indica que o hipervisor está aninhado em uma partição Hyper-V. |
| 5 | Indica que a partição deve consumir o viés QueryPerformanceCounter fornecido pela partição raiz. |
| 20-6 | Reservado |
| 21 | UseHypercallForMmioAccess |
| 22 | UseGpaPinningHypercall |
| 23 | WakeVps |
| 25-24 | Reservado |
| 26 | MapPartitionEventLogBuffer |
| 31-27 | Reservado |
| 63-32 | Número recomendado de tentativas de repetir uma falha de spinlock antes de notificar o hipervisor sobre as falhas. 0xFFFFFFFF indica nunca notificar. |
| 127-64 | Reservado |
Limites de Implementação do Hipervisor - HvRegisterImplementationLimitsInfo
Descreve os limites de escala suportados na implementação atual do hipervisor. Se algum valor for zero, o hipervisor não expõe a informação correspondente. Devolve um valor de 128 bits com uma disposição idêntica à 0x40000005 folha do CPUID x64, com valores de registo x64 embalados no resultado de 128 bits (EAX nos bits 31-0, EBX nos bits 63-32, ECX nos bits 95-64, EDX nos bits 127-96).
Funcionalidades de Hardware de Implementação - HvRegisterHardwareFeaturesInfo
Equivalente ao CPUID x64 leaf 0x40000006. Indica quais recursos específicos de hardware foram detetados e estão atualmente em uso pelo hipervisor. Devolve um valor de 128 bits.
| Bits | Informações Prestadas |
|---|---|
| 0 | O suporte para contadores de desempenho de arquitetura é detetado e está em uso. |
| 1 | O suporte para conversão de endereços de segundo nível é detetado e está em uso. |
| 2 | O suporte para remapeamento de DMA é detetado e está em uso. |
| 3 | O suporte para remapeamento de interrupção é detetado e está em uso. |
| 4 | Indica que um purificador de patrulha de memória está presente no hardware. |
| 5 | A proteção DMA está em uso. |
| 6 | Os temporizadores sintéticos são voláteis. |
| 127-7 | Reservado |
Versioning
A informação da versão do hipervisor está codificada em HvRegisterHypervisorVersion. O formato corresponde ao equivalente ao x64.