Compartir a través de


Detección de características e interfaces

En esta sección se describe cómo el software invitado detecta la presencia de un hipervisor y consulta sus funcionalidades, características e información de versión mediante mecanismos de detección específicos de la arquitectura.

Detección de características e interfaces (x64)

El software invitado interactúa con el hipervisor a través de una variedad de mecanismos. Muchos de estos reflejan los mecanismos tradicionales utilizados por el software para interactuar con el procesador subyacente. Por lo tanto, estos mecanismos son específicos de la arquitectura. En la arquitectura x64, se usan los siguientes mecanismos:

  • Instrucción CPUID: se usa para la información estática de características y versiones.
  • MSR (registros específicos del modelo): se usa para los valores de estado y control.
  • Registros asignados a memoria: se usa para los valores de estado y control.
  • Interrupciones del procesador: se usa para eventos asincrónicos, notificaciones y mensajes.

Además de estas interfaces específicas de la arquitectura, el hipervisor proporciona una interfaz de procedimientos sencilla implementada con hiperllamadas.

Detección de hipervisores

Antes de usar cualquier interfaz de hipervisor, el software debe determinar primero si se ejecuta dentro de un entorno virtualizado. En plataformas x64 que se ajustan a esta especificación, esto se realiza ejecutando la instrucción CPUID con un valor de entrada (EAX) de 1. Tras la ejecución, el código debe comprobar el bit 31 del registro ECX (el "hipervisor presente bit"). Si se establece este bit, hay un hipervisor presente. En un entorno no virtualizado, el bit estará claro.

CPUID.01h.ECX:31 // if set, virtualization present

Si se establece el "bit presente del hipervisor", se pueden consultar hojas adicionales de CPUID para obtener más información sobre el hipervisor conforme y sus funcionalidades. Se garantiza que dos hojas de este tipo están disponibles: 0x40000000 y 0x40000001. Las hojas numeradas posteriormente también pueden estar disponibles.

Hojas de CPUID del hipervisor estándar

Cuando se consulta la hoja en 0x40000000 , el hipervisor devolverá información que proporciona el número de hoja de CPUID máximo del hipervisor y una firma de identificador de proveedor.

Register Información proporcionada
EAX Valor de entrada máximo para la información de CPUID del hipervisor
EBX Firma de identificador de proveedor de hipervisor
ECX Firma de identificador de proveedor de hipervisor
EDX Firma de identificador de proveedor de hipervisor

Si se consulta la hoja en 0x40000001 , devolverá un valor que representa una identificación de la interfaz de hipervisor neutral del proveedor. Esto determina la semántica de las hojas de a través 0x4000002de 0x400000FF .

Register Información proporcionada
EAX Firma de interfaz de hipervisor.
EBX Reservado
ECX Reservado
EDX Reservado

Estas dos hojas permiten al invitado consultar el identificador del proveedor del hipervisor e interfaz de forma independiente. El identificador del proveedor solo se proporciona con fines informativos y de diagnóstico. Se recomienda que el software solo base las decisiones de compatibilidad en la firma de interfaz notificadas a través de la hoja 0x40000001.

Hojas de CPUID del hipervisor de Microsoft

En los hipervisores que se ajustan a la interfaz CPUID del hipervisor de Microsoft, los 0x40000000 registros hoja y 0x40000001 tendrán los valores siguientes.

Intervalo hoja de CPUID del hipervisor: 0x40000000

EAX determina la hoja de CPUID máxima del hipervisor. EBX-EDX contienen la firma del identificador de proveedor del hipervisor. La firma del identificador de proveedor solo debe usarse con fines de informes y diagnóstico.

Register Información proporcionada
EAX Valor de entrada máximo para la información de CPUID del hipervisor. En hipervisores de Microsoft, será al menos 0x40000005.
EBX 0x7263694D: "Micr"
ECX 0x666F736F: "osof"
EDX 0x76482074: "t Hv"

Identificación de la interfaz neutral del proveedor del hipervisor: 0x40000001

EAX contiene la firma de identificación de la interfaz del hipervisor. Esto determina la semántica de las hojas de a través 0x40000002de 0x400000FF .

Register Información proporcionada
EAX 0x31237648: "Hv#1"
EBX Reservado
ECX Reservado
EDX Reservado

Los hipervisores que se ajustan a la interfaz "Hv#1" también proporcionan al menos las hojas siguientes.

Identidad del sistema de hipervisor: 0x40000002

Register bits Información proporcionada
EAX Número de compilación
EBX 31-16 Versión Principal
15-0 Versión Menor

Identificación de características de hipervisor: 0x40000003

EAX y EBX indican qué características están disponibles para la partición en función de los privilegios de partición actuales.

Register bits Información proporcionada
EAX Corresponde a bits 31-0 de HV_PARTITION_PRIVILEGE_MASK
EBX Corresponde a bits de 63 a 32 de HV_PARTITION_PRIVILEGE_MASK
ECX 4-0 Reservado
5 Mperf invariable está disponible
6 La pila de sombras del supervisor está disponible
7 La PMU arquitectónica está disponible
8 La interceptación de captura de excepciones está disponible
31-9 Reservado
EDX 0 En desuso (anteriormente indicado la disponibilidad de la instrucción MWAIT)
1 La compatibilidad con la depuración de invitados está disponible
2 La compatibilidad con el Monitor de rendimiento está disponible
3 La compatibilidad con eventos de creación de particiones dinámicas de CPU física está disponible
4 La compatibilidad con el paso del bloque de parámetros de entrada de hiperllamada a través de registros XMM está disponible.
5 La compatibilidad con un estado de inactividad de invitado virtual está disponible
6 La compatibilidad con el estado de suspensión del hipervisor está disponible
7 La compatibilidad con la consulta de distancias NUMA está disponible
8 La compatibilidad con la determinación de frecuencias del temporizador está disponible
9 La compatibilidad con la inserción de comprobaciones de máquinas sintéticas está disponible
10 La compatibilidad con MSR de bloqueo de invitado está disponible
11 La compatibilidad con MSR de depuración está disponible
12 La compatibilidad con NPIEP está disponible
13 DisableHypervisorAvailable
14 ExtendedGvaRangesForFlushVirtualAddressListAvailable
15 La compatibilidad con la devolución de la salida de hiperllamada a través de registros XMM está disponible
16 Reservado
17 SintPollingModeAvailable
18 HypercallMsrLockAvailable
19 Uso de temporizadores sintéticos directos
20 Compatibilidad con el registro pat disponible para VSM
Veintiuno Compatibilidad con el registro de bndcfgs disponible para VSM
22 Reservado
23 Compatibilidad con temporizadores sintéticos sin inhalar disponibles
25-24 Reservado
26 Característica de último registro de rama (LBR) de Intel compatible
31-27 Reservado

Recomendaciones de implementación: 0x40000004

Indica los comportamientos que el hipervisor recomienda que el sistema operativo implemente para obtener un rendimiento óptimo.

Register bits Información proporcionada
EAX 0 Se recomienda usar hypercall para conmutadores de espacio de direcciones en lugar de MOV a instrucción CR3.
1 Se recomienda usar hypercall para vaciados de TLB locales en lugar de instrucciones INVLPG o MOV a CR3.
2 Se recomienda usar hypercall para vaciados de TLB remotos en lugar de interrupciones entre procesadores.
3 Se recomienda usar MSR para acceder a los registros de APIC EOI, ICR y TPR en lugar de sus homólogos asignados a memoria.
4 Se recomienda usar el MSR proporcionado por el hipervisor para iniciar un RESET del sistema.
5 Se recomienda usar el tiempo relajado para esta partición. Si se usa, la máquina virtual debe deshabilitar los tiempos de espera del guardián que dependen de la entrega oportuna de interrupciones externas.
6 Se recomienda usar la reasignación de DMA.
7 Se recomienda usar la reasignación de interrupciones.
8 Reservado.
9 Se recomienda dejar de usar AutoEOI.
10 Se recomienda usar hypercall syntheticClusterIpi.
11 Se recomienda usar la interfaz ExProcessorMasks más reciente.
12 Indica que el hipervisor está anidado dentro de una partición de Hyper-V.
13 Se recomienda usar INT para llamadas del sistema MBEC.
14 Se recomienda un hipervisor anidado mediante la interfaz vmCS habilitada. También indica que las iluminaciones anidadas adicionales pueden estar disponibles (consulte 0x4000000A hoja).
15 UseSyncedTimeline: indica que la partición debe consumir el sesgo QueryPerformanceCounter proporcionado por la partición raíz.
16 Reservado
17 UseDirectLocalFlushEntire: indica que el invitado debe alternar CR4. PGE para vaciar todo el TLB, ya que esto es más eficaz que hacer una hiperllamada.
18 NoNonArchitecturalCoreSharing: indica que no es posible compartir núcleos. Esto se puede usar como una optimización para evitar la sobrecarga de rendimiento de STIBP.
31-19 Reservado
EBX Número recomendado de intentos de reintentar un error de bloqueo por subproceso antes de notificar al hipervisor sobre los errores. 0xFFFFFFFF indica que nunca se notifica.
ECX 6-0 ImplementedPhysicalAddressBits: informa del ancho de dirección física (MAXPHYADDR) notificado por los procesadores físicos del sistema. Si todos los bits contienen 0, no se admite la característica. Tenga en cuenta que el valor notificado es el número real de bits de dirección física y no la posición de bits utilizada para representar ese número.
31-7 Reservado
EDX Reservado

Límites de implementación del hipervisor: 0x40000005

Describe los límites de escala admitidos en la implementación actual del hipervisor. Si algún valor es cero, el hipervisor no expone la información correspondiente; de lo contrario, tienen estos significados.

Register Información proporcionada
EAX Número máximo de procesadores virtuales admitidos
EBX Número máximo de procesadores lógicos admitidos
ECX El número máximo de vectores de interrupción físicos disponibles para la reasignación de interrupciones.
EDX Reservado

Características de hardware de implementación: 0x40000006

Indica qué características específicas del hardware se han detectado y están actualmente en uso por el hipervisor.

Register bits Información proporcionada
EAX 0 La compatibilidad con la asistencia de superposición de APIC se detecta y está en uso.
1 Se detecta y usa la compatibilidad con mapas de bits de MSR.
2 Se detecta y usa compatibilidad con contadores de rendimiento arquitectónicos.
3 La compatibilidad con la traducción de direcciones de segundo nivel se detecta y está en uso.
4 La compatibilidad con la reasignación de DMA se detecta y se usa.
5 Se detecta la compatibilidad con la reasignación de interrupciones y en uso.
6 Indica que hay una limpieza de patrulla de memoria en el hardware.
7 La protección contra DMA está en uso.
8 Se solicita HPET.
9 Los temporizadores sintéticos son volátiles.
13-10 Nivel de hipervisor del invitado actual: "0" si no está anidado.
14 Modo de destino físico necesario.
15 Use VMFUNC para el modificador de mapa de alias.
16 La compatibilidad con la creación de ceros de memoria de hardware está presente.
17 La compatibilidad con invitado no restringido está presente.
18 La compatibilidad con la asignación de recursos (RDT-A, PQOS-A) está presente.
19 La compatibilidad con la supervisión de recursos (RDT-M, PQOS-M) está presente.
20 La compatibilidad con la PMU virtual invitada está presente.
Veintiuno La compatibilidad con LBR virtual invitado está presente.
22 La compatibilidad con IPT virtual invitado está presente.
23 La compatibilidad con la emulación de APIC está presente.
veinticuatro El hipervisor detecta y usa la tabla WDAT ACPI.
31-25 Reservado
EBX Reservado
ECX Reservado
EDX Reservado

Identificación de características de hipervisor anidadas: 0x40000009

Describe las características expuestas a la partición por el hipervisor al ejecutar anidadas. EAX describe el acceso a las MSR virtuales. EDX describe el acceso a las hiperllamadas.

Register bits Información proporcionada
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 SintPollingModeAvailable
31-18 Reservado

Características de virtualización anidada del hipervisor: 0x4000000A

Indica qué optimizaciones de virtualización anidadas están disponibles para un hipervisor anidado.

Register bits Información proporcionada
EAX 7-0 Versión habilitada de VMCS (baja)
15-8 Versión habilitada de VMCS (alta)
16 Reservado
17 Indica compatibilidad con hiperllamadas de vaciado virtual directo.
18 Indica compatibilidad con las hiperllamadas HvCallFlushGuestPhysicalAddressSpace y HvCallFlushGuestPhysicalAddressList (en plataformas x64).
19 Indica la compatibilidad con el uso de un mapa de bits de MSR optimizado.
20 Indica la compatibilidad con la combinación de excepciones de virtualización en la clase de excepción de error de página.
Veintiuno Indica la compatibilidad con el valor distinto de cero del campo 0x00002802 (GuestIa32DebugCtl) en VMCS.
22 Indica compatibilidad con el TLB optimizado en plataformas AMD. Los vaciados de ASID no afectan a las entradas de TLB derivadas del TPS. Las hiperllamadas deben usarse para invalidar las entradas TLB de HYPER-AND. También indica compatibilidad con las hiperllamadas HvCallFlushGuestPhysicalAddressSpace y HvCallFlushGuestPhysicalAddressList.
31-21 Reservado
EBX 0 Indica la compatibilidad con los campos GuestPerfGlobalCtrl y HostPerfGlobalCtrl en vmCS habilitadas.
31-1 Reservado
ECX Reservado
EDX Reservado

Versionamiento

La información de la versión del hipervisor está codificada en hoja 0x40000002. Se proporcionan dos números de versión: la versión principal y la versión del servicio.

La versión principal incluye un número de versión principal y secundaria y un número de compilación. Estos corresponden a los números de versión de Microsoft Windows. La versión del servicio describe los cambios realizados en la versión principal.

Se recomienda encarecidamente que los clientes comprueben las características del hipervisor mediante el uso de hojas 0x40000003 de CPUID en 0x40000005 lugar de comparar con intervalos de versiones.

Detección de características e interfaz (ARM64)

En la arquitectura ARM64, se usan los siguientes mecanismos para la detección de características e interfaces:

  • Consultas HvRegister a través de HvCallGetVpRegisters : se usa para la información estática de características y versiones.
  • Registros asignados a memoria: se usa para los valores de estado y control.

Además de estas interfaces específicas de la arquitectura, el hipervisor proporciona una interfaz de procedimientos sencilla implementada con hiperllamadas.

Detección de hipervisores

Antes de usar la mayoría de las interfaces del hipervisor, el software debe determinar primero si se ejecuta dentro de un entorno virtualizado.

En ARM64, el software invitado puede detectar el hipervisor mediante la interfaz estándar SMCCC (Convención de llamada de SMC). La detección se realiza mediante la instrucción HVC o SMC con el identificador 0xC600FF0 de función en X0 (esto corresponde a una llamada de hipervisor específica del proveedor de 64 bits, VENDOR_HYP_FUNCTION_CODE_UID). La llamada sigue las convenciones SMCCC, incluida una imm16 de 0. El hipervisor de Microsoft devuelve los siguientes valores que representan GUID 4d32ba58-cd24-4764-8eef-6c7516597024:

Register Importancia
X0 0x4d32ba58
X1 0xcd244764
X2 0x8eef6c75
X3 0x16597024

Una vez detectado un hipervisor, el software invitado puede consultar las funcionalidades del hipervisor mediante registros sintéticos mediante el hiperllamada HvCallGetVpRegisters . Se pueden consultar varios registros de claves antes de establecer el registro del identificador del sistema operativo invitado, lo que permite la detección temprana de las características del hipervisor durante el arranque.

Registros de características del hipervisor

Las plataformas ARM64 consultan información del hipervisor a través de registros sintéticos en lugar de instrucciones de CPUID. Estos registros proporcionan información equivalente a sus homólogos de CPUID x64 y se accede a ellos a través de HvCallGetVpRegisters. Todos los registros de características devuelven valores de 128 bits.

Identidad del sistema del hipervisor: HvRegisterHypervisorVersion

Devuelve la información de versión codificada en un valor de 128 bits. El diseño es idéntico al 0x40000002 hoja de CPUID x64, con valores de registro x64 empaquetados en el resultado de 128 bits (EAX en bits 31-0, EBX en bits 63-32, ECX en bits 95-64, EDX en bits 127-96).

Identificación de características del hipervisor: HvRegisterPrivilegesAndFeaturesInfo

Equivalente a 0x40000003 hoja de CPUID x64. Indica qué características están disponibles para la partición en función de los privilegios de partición actuales. Devuelve un valor de 128 bits con estos campos:

bits Información proporcionada
31-0 Corresponde a bits 31-0 de HV_PARTITION_PRIVILEGE_MASK
63-32 Corresponde a bits de 63 a 32 de HV_PARTITION_PRIVILEGE_MASK
64 La compatibilidad con la depuración de invitados está disponible.
65 La compatibilidad con el Monitor de rendimiento está disponible.
66 La compatibilidad con eventos de creación de particiones dinámicas de CPU física está disponible.
67 La compatibilidad con un estado de inactividad de invitado virtual está disponible.
68 La compatibilidad con el estado de suspensión del hipervisor está disponible.
69 La compatibilidad con la consulta de distancias NUMA está disponible.
70 La compatibilidad con la determinación de frecuencias del temporizador está disponible.
71 La compatibilidad con la inserción de comprobaciones de máquinas sintéticas está disponible.
72 La compatibilidad con los registros de bloqueos de invitado está disponible.
73 Reservado.
74 DisableHypervisorAvailable.
75 Reservado.
76 SintPollingModeAvailable.
77 Use temporizadores sintéticos directos.
127-78 Reservado.

Recomendaciones de implementación: HvRegisterFeaturesInfo

Equivalente a 0x40000004 hoja de CPUID x64. Indica los comportamientos que el hipervisor recomienda que el sistema operativo implemente para obtener un rendimiento óptimo. Devuelve un valor de 128 bits.

bits Información proporcionada
0 UseHvRegisterForReset: en ARM64, siempre es false (las particiones deben usar PSCI SYSTEM_RESET en su lugar).
1 Se recomienda usar el tiempo relajado para esta partición. Si se usa, la máquina virtual debe deshabilitar los tiempos de espera del guardián que dependen de la entrega oportuna de interrupciones externas.
2 Se recomienda usar hypercall syntheticClusterIpi. En ARM64, esto es false para la partición raíz (que debe usar ICC_SGI1R_EL1 directamente) y true para las particiones invitadas.
3 Se recomienda usar la interfaz ExProcessorMasks más reciente.
4 Indica que el hipervisor está anidado dentro de una partición de Hyper-V.
5 Indica que la partición debe consumir el sesgo QueryPerformanceCounter proporcionado por la partición raíz.
20-6 Reservado
Veintiuno UseHypercallForMmioAccess
22 UseGpaPinningHypercall
23 WakeVps
25-24 Reservado
26 MapPartitionEventLogBuffer
31-27 Reservado
63-32 Número recomendado de intentos de reintentar un error de bloqueo por subproceso antes de notificar al hipervisor sobre los errores. 0xFFFFFFFF indica que nunca se notifica.
127-64 Reservado

Límites de implementación del hipervisor: HvRegisterImplementationLimitsInfo

Describe los límites de escala admitidos en la implementación actual del hipervisor. Si algún valor es cero, el hipervisor no expone la información correspondiente. Devuelve un valor de 128 bits con un diseño idéntico al 0x40000005 hoja de CPUID x64, con valores de registro x64 empaquetados en el resultado de 128 bits (EAX en bits 31-0, EBX en bits 63-32, ECX en bits 95-64, EDX en bits 127-96).

Características de hardware de implementación: HvRegisterHardwareFeaturesInfo

Equivalente a 0x40000006 hoja de CPUID x64. Indica qué características específicas del hardware se han detectado y están actualmente en uso por el hipervisor. Devuelve un valor de 128 bits.

bits Información proporcionada
0 Se detecta y usa compatibilidad con contadores de rendimiento arquitectónicos.
1 La compatibilidad con la traducción de direcciones de segundo nivel se detecta y está en uso.
2 La compatibilidad con la reasignación de DMA se detecta y se usa.
3 Se detecta la compatibilidad con la reasignación de interrupciones y en uso.
4 Indica que hay una limpieza de patrulla de memoria en el hardware.
5 La protección contra DMA está en uso.
6 Los temporizadores sintéticos son volátiles.
127-7 Reservado

Versionamiento

La información de la versión del hipervisor está codificada en HvRegisterHypervisorVersion. El formato coincide con el equivalente x64.