Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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, 0x40000000
0x40000001
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 0x40000003
0x40000005
en lugar de comparar con intervalos de versiones.