Compartir a través de


Detección de características e interfaces

El software invitado interactúa con el hipervisor a través de diversos mecanismos. Muchos de ellos reflejan los mecanismos tradicionales que usa 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 de características y versiones estáticas.
  • MSR (registros específicos del modelo): se usan para los valores de estado y control.
  • Registros asignados a memoria: se usan para los valores de estado y control.
  • Interrupciones del procesador: se usa para eventos, notificaciones y mensajes asincrónicos.

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

Detección de hipervisor

Antes de usar las interfaces de hipervisor, el software debe determinar primero si se ejecuta dentro de un entorno virtualizado. En las plataformas x64 que se ajustan a esta especificación, esto se realiza mediante la ejecución de 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 "bit presente del hipervisor"). Si se establece este bit, hay un hipervisor. 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 de CPUID adicionales para obtener más información sobre el hipervisor compatible y sus funcionalidades. Se garantiza que hay dos hojas de este tipo disponibles: 0x40000000 y 0x40000001. Las hojas numeradas posteriormente también pueden estar disponibles.

Hojas de CPUID del hipervisor estándar

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

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

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

Register Información proporcionada
EAX Firma de la interfaz del hipervisor.
EBX Reservada
ECX Reservada
EDX Reservada

Estas dos hojas permiten al invitado consultar el identificador de proveedor del hipervisor y la 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 notificada a través de hoja 0x40000001.

Hojas de CPUID del hipervisor de Microsoft

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

Intervalo hoja de CPUID del hipervisor: 0x40000000

EAX determina la hoja de CPUID del hipervisor máximo. EBX-EDX contiene 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 los hipervisores de Microsoft, será al menos 0x40000005.
EBX 0x7263694D: "Micr"
ECX 0x666F736F: "osof"
EDX 0x76482074: "t Hv"

Identificación de la interfaz neutra 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 0x40000002 hasta 0x400000FF.

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

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

Identidad del sistema del hipervisor: 0x40000002

Register Bits Información proporcionada
EAX Número de compilación
EBX 31-16 Major Version
15-0 Minor Version

Identificación de características del 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 los bits 31-0 de HV_PARTITION_PRIVILEGE_MASK
EBX Corresponde a los bits 63-32 de HV_PARTITION_PRIVILEGE_MASK
ECX Reservada
EDX 0 En desuso (anteriormente se indicaba la disponibilidad de la instrucción MWAIT)
1 La compatibilidad con la depuración de invitados está disponible
2 Monitor de rendimiento soporte técnico está disponible
3 La compatibilidad con eventos físicos de creación de particiones dinámicas de CPU está disponible
4 La compatibilidad para pasar el bloque de parámetros de entrada de hypercall 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 para determinar las frecuencias del temporizador está disponible
9 La compatibilidad con la inyecció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 los 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 hypercall a través de registros XMM está disponible
16 Reservada
17 SintPollingModeAvailable
18 HypercallMsrLockAvailable
19 Uso de temporizadores sintéticos directos
20 Compatibilidad con el registro PAT disponible para VSM
21 Compatibilidad con el registro bndcfgs disponible para VSM
22 Reservada
23 Compatibilidad con temporizadores sintéticos sin aire disponibles
25-24 Reservada
26 Se admite la característica Last Branch Record (LBR) de Intel
31-27 Reservada

Implementación Recomendaciones implementación: 0x40000004

Indica qué comportamientos recomienda el hipervisor la implementación del sistema operativo para obtener un rendimiento óptimo.

Register Bits Información proporcionada
EAX 0 Se recomienda usar hypercall para los modificadores de espacio de direcciones en lugar de la instrucción MOV a 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 APIC registra 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 RESTABLECIMIENTO del sistema.
5 Se recomienda usar el tiempo de relajación para esta partición. Si se usa, la máquina virtual debe deshabilitar los tiempos de espera de los monitores que se basan en la entrega a tiempo de interrupciones externas.
6 Se recomienda usar la reapping de DMA.
7 Se recomienda usar el remapping de interrupciones.
8 Reservado.
9 Se recomienda desusar AutoEOI.
10 Se recomienda usar la hiperllamada 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 las llamadas del sistema MBEC.
14 Se recomienda un hipervisor anidado mediante la interfaz VMCS ilustrada. También indica que pueden estar disponibles otras iluminacións anidadas (consulte el artículo 0x4000000A).
15 UseSyncedTimeline: indica que la partición debe consumir el sesgo QueryPerformanceCounter proporcionado por la partición raíz.
16 Reservada
17 UseDirectLocalFlushEntire: indica que el invitado debe alternar CR4. PGE para vaciar todo el TLB, ya que esto tiene más rendimiento que realizar una llamada hipercall.
18 NoNonArchitecturalCoreSharing: indica que no es posible compartir núcleos. Esto se puede usar como optimización para evitar la sobrecarga de rendimiento de LABP.
31-19 Reservada
EBX Número recomendado de intentos de reintentar un error de bloqueo por número antes de notificar al hipervisor los errores. 0xFFFFFFFF indica que nunca se notifica.
ECX 6-0 ImplementedPhysicalAddressBits: notifica el 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 Reservada
EDX Reservada

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 Número máximo de vectores de interrupción físicos disponibles para la remapping de interrupciones.
EDX Reservada

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

Indica qué características específicas del hardware se han detectado y que el hipervisor está utilizando actualmente.

Register Bits Información proporcionada
EAX 0 Se detecta y se usa la compatibilidad con la asistencia de superposición de APIC.
1 Se detecta y se usa la compatibilidad con mapas de bits de MSR.
2 Se detecta y se usa la compatibilidad con contadores de rendimiento de arquitectura.
3 Se detecta y se usa la compatibilidad con la traducción de direcciones de segundo nivel.
4 Se detecta y se usa la compatibilidad con la remapping de DMA.
5 Se detecta y se usa la compatibilidad con la remapping de interrupciones.
6 Indica que hay una depuradora de limpieza 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 Se requiere el modo de destino físico.
15 Reservada
16 La compatibilidad con la asignación de ceros de memoria de hardware está presente.
17 La compatibilidad con invitados no restringidos 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 PMU virtual invitada está presente.
21 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.
24 El hipervisor detecta y usa la tabla WDAT ACPI.
31-25 Reservada
EBX Reservada
ECX Reservada
EDX Reservada

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 Reservada
4 AccessIntrCtrlRegs
5 AccessHypercallMsrs
6 AccessVpIndex
11-7 Reservada
12 AccessReenlightenmentControls
31-13 Reservada
EBX Reservada
ECX Reservada
EDX 3-0 Reservada
4 XmmRegistersForFastHypercallAvailable
14-5 Reservada
15 FastHypercallOutputAvailable
16 Reservada
17 SintPollingModeAvailable
31-18 Reservada

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

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

Register Bits Información proporcionada
EAX 7-0 Versión de VMCS ilustrada (baja)
15-8 Versión de VMCS ilustrada (alta)
16 Reservada
17 Indica la compatibilidad con las hiperllamadas de vaciado virtual directo.
18 Indica la compatibilidad con las hiperllamadas HvFlushGuestPhysicalAddressSpace y HvFlushGuestPhysicalAddressList (en plataformas Intel).
19 Indica la compatibilidad con el uso de un mapa de bits de MSR ilustrado.
20 Indica la compatibilidad para combinar excepciones de virtualización en la clase de excepción de error de página.
21 Reservada
22 Indica la compatibilidad con el TLB ilustrado en plataformas AMD. Los vaciados de ASID no afectan a las entradas de TLB derivadas del NPT. Las hiperllamadas se deben usar para invalidar las entradas TLB de NPT. También indica compatibilidad con las hiperllamadas HvFlushGuestPhysicalAddressSpace y HvFlushGuestPhysicalAddressList.
31-21 Reservada
EBX Reservada
ECX Reservada
EDX Reservada

Control de versiones

La información de la versión del hipervisor se codifica 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. Se corresponden con los números de Windows de Microsoft. La versión del servicio describe los cambios realizados en la versión principal.

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