La traducción de direcciones de segundo nivel (SLAT) , también conocida como paginación anidada , es una tecnología de virtualización asistida por hardware que permite evitar la sobrecarga asociada con las tablas de páginas ocultas administradas por software .
AMD ha respaldado SLAT a través de la tecnología Rapid Virtualization Indexing (RVI) desde la introducción de sus procesadores Opteron de tercera generación (nombre en clave Barcelona). La implementación de SLAT de Intel , conocida como tabla de páginas extendida (EPT), se introdujo en la microarquitectura Nehalem que se encuentra en ciertos procesadores Core i7 , Core i5 y Core i3 .
Las extensiones de virtualización de ARM admiten SLAT, conocidas como tablas de páginas Stage-2 proporcionadas por una MMU Stage-2 . El invitado utiliza la MMU Stage-1. La compatibilidad se agregó como opcional en la arquitectura ARMv7ve y también se admite en las arquitecturas ARMv8 (32 bits y 64 bits).
La introducción del modo protegido en la arquitectura x86 con el procesador Intel 80286 llevó los conceptos de memoria física y memoria virtual a las arquitecturas convencionales. Cuando los procesos usan direcciones virtuales y una instrucción solicita acceso a la memoria, el procesador traduce la dirección virtual a una dirección física utilizando una tabla de páginas o un búfer de traducción (TLB). Cuando se ejecuta un sistema virtual, se le asigna memoria virtual del sistema host que sirve como memoria física para el sistema invitado, y el mismo proceso de traducción de direcciones también ocurre dentro del sistema invitado. Esto aumenta el costo del acceso a la memoria, ya que la traducción de direcciones debe realizarse dos veces: una vez dentro del sistema invitado (usando una tabla de páginas de invitados emulada por software) y otra dentro del sistema host (usando el mapa físico [pmap]).
Para que esta traducción sea eficiente, los ingenieros de software implementaron una tabla de páginas ocultas basada en software. La tabla de páginas ocultas traducirá la memoria virtual del invitado directamente a la dirección de memoria física del host. Cada VM tiene una tabla de páginas ocultas separada y el hipervisor está a cargo de administrarlas. Pero el costo es muy elevado ya que cada vez que un invitado actualiza su tabla de páginas, hará que el hipervisor administre la asignación de la tabla de páginas y sus cambios.
Para hacer esta traducción más eficiente, los proveedores de procesadores implementaron tecnologías comúnmente llamadas SLAT. Al tratar cada dirección física de invitado como una dirección virtual de host, una ligera extensión del hardware utilizado para recorrer una tabla de páginas no virtualizada (ahora la tabla de páginas de invitado) puede recorrer la tabla de páginas de host. Con las tablas de páginas de varios niveles, la tabla de páginas del host se puede ver conceptualmente como anidada dentro de la tabla de páginas del invitado. Un caminante de tabla de páginas de hardware puede tratar la capa de traducción adicional casi como agregar niveles a la tabla de páginas.
Al utilizar SLAT y tablas de páginas multinivel, el número de niveles necesarios para recorrer para encontrar la traducción se duplica cuando la dirección física del invitado es del mismo tamaño que la dirección virtual del invitado y se utilizan páginas del mismo tamaño. Esto aumenta la importancia de almacenar en caché los valores de los niveles intermedios de las tablas de páginas del host y del invitado. También resulta útil utilizar páginas grandes en las tablas de páginas del host para reducir el número de niveles (por ejemplo, en x86-64, el uso de páginas de 2 MB elimina un nivel en la tabla de páginas). Dado que la memoria generalmente se asigna a máquinas virtuales con granularidad gruesa, el uso de páginas grandes para la traducción física del huésped es una optimización obvia, que reduce la profundidad de las búsquedas y la memoria requerida para las tablas de páginas del host.
Rapid Virtualization Indexing (RVI), conocida como Nested Page Tables (NPT) durante su desarrollo, es una tecnología de virtualización asistida por hardware de segunda generación de AMD para la unidad de administración de memoria del procesador (MMU). [1] [2] RVI se introdujo en la tercera generación de procesadores Opteron , nombre en clave Barcelona . [3]
Un artículo de investigación de VMware encontró que RVI ofrece hasta un 42% de ganancias en rendimiento en comparación con la implementación de software únicamente (tabla de páginas ocultas). [4] Las pruebas realizadas por Red Hat mostraron una duplicación del rendimiento para los puntos de referencia OLTP . [5]
Extended Page Tables (EPT) es una tecnología de virtualización Intel x86 de segunda generación para la unidad de administración de memoria (MMU). La compatibilidad con EPT se encuentra en las CPU Intel Core i3 , Core i5 , Core i7 y Core i9 , entre otras. [6] También se encuentra en algunas CPU VIA más nuevas . Se requiere EPT para poder lanzar un procesador lógico directamente en modo real , una característica llamada "invitado sin restricciones" en la jerga de Intel e introducida en la microarquitectura de Westmere . [7] [8]
Según un documento de evaluación de VMware, "EPT proporciona ganancias de rendimiento de hasta un 48% para pruebas comparativas con uso intensivo de MMU y hasta un 600% para pruebas de microcomprobación con uso intensivo de MMU", aunque en realidad puede hacer que el código se ejecute más lento que una implementación de software en algún rincón. casos . [9]
La compatibilidad con la tabla de páginas de la etapa 2 está presente en los procesadores ARM que implementan el nivel de excepción 2 (EL2).
El control de ejecución basado en modo ( MBEC ) es una extensión de las implementaciones SLAT x86 que estuvo disponible por primera vez en las CPU Intel Kaby Lake y AMD Zen+ (conocidas en esta última como Guest Mode Execute Trap o GMET ). [10] La extensión extiende el bit de ejecución en la tabla de páginas extendida (tabla de páginas invitadas) a 2 bits: uno para la ejecución del usuario y otro para la ejecución del supervisor. [11]
MBE se introdujo para acelerar la ejecución de código sin firmar en modo de usuario invitado con aplicación de la integridad del código en modo kernel. Bajo esta configuración, las páginas de códigos sin firmar se pueden marcar como ejecutadas en modo de usuario, pero deben marcarse como no ejecutadas en modo kernel. Para mantener la integridad garantizando que todo el código ejecutable en modo kernel invitado esté firmado incluso cuando el kernel invitado esté comprometido, el kernel invitado no tiene permiso para modificar el bit de ejecución de ninguna página de memoria. La modificación del bit de ejecución o el cambio de la tabla de la página invitada que contiene el bit de ejecución se delega a una entidad con mayores privilegios, en este caso el hipervisor del host . Sin MBE, cada entrada desde la ejecución en modo de usuario sin firmar a la ejecución en modo kernel firmada debe ir acompañada de una salida de VM al hipervisor para realizar un cambio a la tabla de páginas en modo kernel. En la operación inversa, una salida del modo kernel firmado al modo usuario sin firmar debe ir acompañada de una salida de VM para realizar otro cambio de tabla de páginas. Las salidas de VM afectan significativamente el rendimiento de ejecución del código. [12] [13] Con MBE, la misma tabla de páginas se puede compartir entre el código en modo de usuario sin firmar y el código en modo kernel firmado, con dos conjuntos de permisos de ejecución dependiendo del contexto de ejecución. Las salidas de VM ya no son necesarias cuando el contexto de ejecución cambia entre el modo de usuario sin firmar y el modo de kernel firmado.
Los hipervisores que admiten SLAT incluyen los siguientes:
Algunos de los hipervisores anteriores requieren SLAT para funcionar (no solo más rápido), ya que no implementan una tabla de páginas ocultas de software; la lista no está completamente actualizada para reflejar eso.
Si el control de ejecución de VM 'invitado sin restricciones' es 1, el control de ejecución de VM 'habilitar EPT' también debe ser 1.
{{cite web}}
: |last=
tiene nombre genérico ( ayuda )