Compartir a través de


Virtual MMU

La interfaz de máquina virtual expuesta por cada partición incluye una unidad de administración de memoria (MMU). La MMU virtual expuesta por particiones de hipervisor suele ser compatible con mmus existentes.

La implementación de MMU virtual es específica de la arquitectura. En este documento se tratan las plataformas x64 y ARM64, con secciones específicas de la plataforma marcadas claramente.

Información general sobre MMU virtual

Los procesadores virtuales exponen la memoria virtual y un TLB virtual (búfer de búsqueda de traducción), que almacena en caché las traducciones de direcciones virtuales a direcciones físicas (invitado). Al igual que con el TLB en un procesador lógico, el TLB virtual es una caché no coherente y esta no coherencia es visible para los invitados. El hipervisor expone las operaciones para vaciar el TLB. Los invitados pueden usar estas operaciones para quitar entradas potencialmente incoherentes y hacer que las traducciones de direcciones virtuales sean predecibles.

Compatibility

La MMU virtual expuesta por el hipervisor suele ser compatible con la MMU física que se encuentra en la arquitectura del procesador subyacente.

En plataformas x64

La MMU virtual en plataformas x64 es generalmente compatible con la MMU física que se encuentra dentro de un procesador x64. Existen las siguientes diferencias observables por invitado:

  • The CR3. PWT y CR3. Es posible que los bits pcD no se admita en algunas implementaciones del hipervisor. En estas implementaciones, cualquier intento por parte del invitado de establecer estas marcas a través de una instrucción MOV a CR3 o se omitirá un modificador de puerta de tareas. Los intentos de establecer estos bits mediante programación a través de HvSetVpRegisters o HvCallSwitchVirtualAddressSpace pueden producir un error.
  • Los bits PWT y PCD dentro de una entrada de tabla de página hoja (por ejemplo, un PTE para páginas de 4 K y un PDE para páginas grandes) especifican la capacidad de caché de la página que se asigna. Los bits PAT, PWT y PCD de las entradas de tabla de páginas no hoja indican la capacidad de caché de la tabla de páginas siguiente en la jerarquía. Es posible que algunas implementaciones del hipervisor no admitan estas marcas. En estas implementaciones, todos los accesos a la tabla de páginas realizados por el hipervisor se realizan mediante atributos de caché de reescritura. Esto afecta, en particular, a los bits de acceso y desfasado escritos en las entradas de la tabla de páginas. Si el invitado establece los bits PAT, PWT o PCD dentro de entradas de tabla de páginas no hoja, se puede generar un mensaje de "característica no compatible" cuando un procesador virtual accede a una página asignada por esa tabla de páginas.
  • Es posible que el bit CR0.CD (deshabilitación de caché) no se admita en algunas implementaciones del hipervisor. En estas implementaciones, el bit de CR0.CD debe establecerse en 0. Cualquier intento del invitado para establecer esta marca a través de una instrucción MOV a CR0 se omitirá. Los intentos de establecer este bit mediante programación a través de HvSetVpRegisters producirán un error.
  • MSR (tipo de dirección de página) es un registro por VP. Sin embargo, cuando todos los procesadores virtuales de una partición establecen el MSR pat en el mismo valor, el nuevo efecto se convierte en un efecto de toda la partición.
  • Por motivos de seguridad y aislamiento, la instrucción INVD se virtualizará para actuar como una instrucción WBINVD, con algunas diferencias. Para fines de seguridad, se debe usar CLFLUSH en su lugar.

Operaciones de administración de TLB heredadas

Cada arquitectura proporciona mecanismos nativos para administrar los TLB del procesador. Estos mecanismos se virtualizan mediante el hipervisor y afectan solo al procesador virtual local. Para invalidar las traducciones en otros procesadores virtuales, el software debe usar interrupciones del procesador interprocesador específicas de la arquitectura o las hiperllamadas de administración de TLB mejoradas que se describen en la sección siguiente.

En plataformas x64

La arquitectura x64 proporciona los siguientes mecanismos de administración de TLB:

  • La instrucción INVLPG invalida la traducción de una sola página del TLB del procesador. Si la dirección virtual especificada se asignó originalmente como página de 4 K, la traducción de esta página se quita del TLB. Si la dirección virtual especificada se asignó originalmente como una "página grande" (ya sea de 2 MB o 4 MB, dependiendo del modo MMU), la traducción de toda la página grande se quita del TLB. La instrucción INVLPG vacía las traducciones globales y no globales. Las traducciones globales se definen como aquellas que tienen el bit "global" establecido dentro de la entrada de la tabla de páginas.
  • Los modificadores de tareas y instrucciones MOV a CR3 que modifican las traducciones de CR3 invalidan todas las páginas no globales dentro del TLB del procesador.
  • Instrucción MOV a CR4 que modifica el CR4. Bit PGE (habilitación de página global), CR4. Bit de PSE (extensiones de tamaño de página) o CR4. PAE (extensiones de dirección de página) invalida todas las traducciones (globales y no globales) dentro del TLB del procesador.

Tenga en cuenta que todas estas operaciones de invalidación afectan solo a un procesador. Para invalidar las traducciones en otros procesadores, el software debe usar un mecanismo de reducción de TLB basado en software (normalmente implementado mediante interrupciones entre procesos).

En plataformas ARM64

La arquitectura ARM64 proporciona mecanismos de administración de TLB mediante las instrucciones de invalidar TLBI (TLB). Consulte el manual de arquitectura de ARM para obtener más detalles.

Nota: No se admiten las instrucciones de mantenimiento de la caché de configuración y forma (como DC ISW, DC CSW, DC CISW) en entornos virtualizados y se tratan como sin operaciones.

Mejoras de TLB virtual

Además de admitir los mecanismos de administración de TLB heredados descritos anteriormente, en las plataformas x64, el hipervisor también admite un conjunto de mejoras que permiten a un invitado administrar el TLB virtual de forma más eficaz. Estas operaciones mejoradas se pueden usar indistintamente con las operaciones de administración de TLB heredadas.

El hipervisor admite las siguientes hiperllamadas para invalidar los TTLB:

Hypercall Description
HvCallFlushVirtualAddressSpace Invalida todas las entradas de TLB virtuales que pertenecen a un espacio de direcciones especificado.
HvCallFlushVirtualAddressSpaceEx De forma similar a HvCallFlushVirtualAddressSpace, toma un VP disperso establecido como entrada.
HvCallFlushVirtualAddressList Invalida una parte del espacio de direcciones especificado.
HvCallFlushVirtualAddressListEx De forma similar a HvCallFlushVirtualAddressList, toma un VP disperso establecido como entrada.

En algunos sistemas (aquellos con compatibilidad de virtualización suficiente en hardware), las instrucciones de administración de TLB heredadas pueden ser más rápidas para la invalidación de TLB local o remota (entre procesadores). Los invitados interesados en un rendimiento óptimo deben usar el 0x40000004 hoja CPUID para determinar qué comportamientos implementar mediante hiperllamadas:

  • UseHypercallForAddressSpaceSwitch: si se establece esta marca, el autor de la llamada debe suponer que es más rápido usar HvCallSwitchVirtualAddressSpace para cambiar entre espacios de direcciones. Si esta marca está clara, se recomienda una instrucción MOV a CR3.
  • UseHypercallForLocalFlush: si se establece esta marca, el autor de la llamada debe suponer que es más rápido usar hiperllamadas (en lugar de INVLPG o MOV a CR3) para vaciar una o varias páginas del TLB virtual.
  • UseHypercallForRemoteFlushAndLocalFlushEntire: si se establece esta marca, el autor de la llamada debe suponer que es más rápido usar hiperllamadas (en lugar de usar interrupciones entre procesadores generados por invitados) para vaciar una o varias páginas del TLB virtual.

En las plataformas ARM64, los invitados suelen usar mecanismos arquitectónicos para la administración de TLB.

Información general sobre el control de caché de memoria

El hipervisor admite la configuración de caché definida por el invitado para las páginas asignadas dentro del espacio de GVA del invitado. Para obtener una descripción detallada de la configuración de caché disponible y sus significados, consulte la documentación de Intel o AMD.

Cuando un procesador virtual accede a una página a través de su espacio de GVA, el hipervisor respeta los bits de atributo de caché (PAT, PWT y PCD) dentro de la entrada de la tabla de páginas invitadas que se usa para asignar la página. Estos tres bits se usan como índice en el registro PAT de la partición (tipo de dirección de página) para buscar la configuración de capacidad de caché final de la página.

Las páginas a las que se accede directamente a través del espacio de GPA (por ejemplo, cuando la paginación está deshabilitada porque se borra CR0.PG) usan una capacidad de caché definida por los MTR. Si la implementación del hipervisor no admite MTRR virtuales, se asume la capacidad de caché de EDT.

Mezcla de tipos de caché entre una partición y el hipervisor

Los invitados deben tener en cuenta que el hipervisor puede acceder a algunas páginas dentro de su espacio GPA. En la lista siguiente, aunque no exhaustiva, se proporcionan varios ejemplos:

  • Páginas que contienen parámetros de entrada o salida para hiperllamadas
  • Todas las páginas de superposición, incluidas la página hypercall, las páginas SIEF y SIM de SynIC, y las páginas de estadísticas
  • Páginas de asistencia vp y otras páginas de interfaz del hipervisor

El hipervisor siempre realiza accesos a parámetros de hiperllamada y páginas de superposición mediante atributos que se pueden almacenar en caché Write-Back:

  • En plataformas x64: tipo de caché WB (Write-Back) a través de PAT
  • En plataformas ARM64: memoria normal con escritura diferida interna y externa, asignación de lectura y Write-Allocate atributos

El hipervisor siempre realiza accesos a parámetros de hiperllamada y páginas de superposición mediante la configuración de capacidad de caché WB.