Articulo de referencia

Búfer de búsqueda lateral de traducción

En informática y diseño de procesadores , un búfer de traducción anticipada ( TLB ) es una caché de memoria que almacena las traducciones recientes de direcciones de memoria vir...

En informática y diseño de procesadores , un búfer de traducción anticipada ( TLB ) es una caché de memoria que almacena las traducciones recientes de direcciones de memoria virtual a direcciones de memoria física . Se utiliza para reducir el tiempo de acceso a una ubicación de memoria del usuario. [ 1 ] Se le puede llamar caché de traducción de direcciones. Forma parte de la unidad de gestión de memoria (MMU) del chip. Un TLB puede residir entre la CPU y la caché de la CPU , entre la caché de la CPU y la memoria principal o entre los diferentes niveles de la caché multinivel. La mayoría de los procesadores de escritorio, portátiles y servidores incluyen uno o más TLB en el hardware de gestión de memoria, y está presente casi siempre en cualquier procesador que utilice memoria virtual paginada o segmentada .

La TLB a veces se implementa como memoria direccionable por contenido (CAM). La clave de búsqueda de la CAM es la dirección virtual, y el resultado de la búsqueda es una dirección física . Si la dirección solicitada está presente en la TLB, la búsqueda de la CAM produce una coincidencia rápidamente y la dirección física recuperada se puede usar para acceder a la memoria. Esto se llama un acierto de TLB. Si la dirección solicitada no está en la TLB, es un fallo, y la traducción procede buscando en la tabla de páginas en un proceso llamado recorrido de página . El recorrido de página consume tiempo en comparación con la velocidad del procesador, ya que implica leer el contenido de múltiples ubicaciones de memoria y usarlo para calcular la dirección física. Después de que el recorrido de página determina la dirección física, el mapeo de dirección virtual a dirección física se ingresa en la TLB. El PowerPC 604 , por ejemplo, tiene una TLB asociativa de conjuntos bidireccional para cargas y almacenamientos de datos. [ 2 ] Algunos procesadores tienen TLB de direcciones de instrucciones y datos diferentes.

Descripción general

Funcionamiento general de TLB [ 3 ]

Una TLB tiene un número fijo de ranuras que contienen entradas de la tabla de páginas y de la tabla de segmentos. Las entradas de la tabla de páginas asignan direcciones virtuales a direcciones físicas y de la tabla intermedia, mientras que las entradas de la tabla de segmentos asignan direcciones virtuales a direcciones de segmento, de la tabla intermedia y de la tabla de páginas. La memoria virtual es el espacio de memoria visto desde un proceso; este espacio suele dividirse en páginas de tamaño fijo (en memoria paginada) o, con menos frecuencia, en segmentos de tamaño variable (en memoria segmentada). La tabla de páginas, generalmente almacenada en la memoria principal , registra la ubicación de las páginas virtuales en la memoria física. Este método utiliza dos accesos a memoria (uno para la entrada de la tabla de páginas y otro para el byte) para acceder a un byte. Primero, se busca el número de marco en la tabla de páginas. Segundo, el número de marco junto con el desplazamiento de página proporciona la dirección real. Por lo tanto, cualquier esquema de memoria virtual directo duplicaría el tiempo de acceso a la memoria. De ahí que la TLB se utilice para reducir el tiempo necesario para acceder a las ubicaciones de memoria en el método de la tabla de páginas. La TLB es una caché de la tabla de páginas, que representa solo un subconjunto del contenido de dicha tabla.

Según las direcciones de memoria física, la TLB puede ubicarse entre la CPU y la caché de la CPU , entre la caché de la CPU y la memoria de almacenamiento principal , o entre los niveles de una caché multinivel. Su ubicación determina si la caché utiliza direccionamiento físico o virtual. Si la caché utiliza direccionamiento virtual, las solicitudes se envían directamente desde la CPU a la caché, y solo se accede a la TLB en caso de fallo de caché . Si la caché utiliza direccionamiento físico, la CPU realiza una búsqueda en la TLB en cada operación de memoria, y la dirección física resultante se envía a la caché.

En una arquitectura Harvard o una arquitectura Harvard modificada , puede existir un espacio de direcciones virtuales o hardware de acceso a memoria independiente para instrucciones y datos. Esto puede dar lugar a TLB distintas para cada tipo de acceso: un búfer de traducción anticipada de instrucciones (ITLB) y un búfer de traducción anticipada de datos (DTLB). Se han demostrado diversas ventajas con TLB de datos e instrucciones separadas. [ 4 ]

La TLB puede utilizarse como una caché de hardware de búsqueda rápida. La figura muestra el funcionamiento de una TLB. Cada entrada en la TLB consta de dos partes: una etiqueta y un valor. Si la etiqueta de la dirección virtual entrante coincide con la etiqueta en la TLB, se devuelve el valor correspondiente. Dado que la búsqueda en la TLB suele formar parte de la canalización de instrucciones, las búsquedas son rápidas y prácticamente no suponen una penalización en el rendimiento. Sin embargo, para poder realizar búsquedas dentro de la canalización de instrucciones, la TLB debe ser pequeña.

Una optimización común para las cachés con direccionamiento físico consiste en realizar la búsqueda en la TLB en paralelo con el acceso a la caché. En cada referencia a memoria virtual, el hardware comprueba la TLB para ver si el número de página se encuentra allí. Si es así, se trata de un acierto de la TLB y se realiza la traducción. Se devuelve el número de marco, que se utiliza para acceder a la memoria. Si el número de página no está en la TLB, se debe consultar la tabla de páginas. Dependiendo de la CPU, esto puede hacerse automáticamente por hardware o mediante una interrupción al sistema operativo. Cuando se obtiene el número de marco, se puede utilizar para acceder a la memoria. Además, añadimos el número de página y el número de marco a la TLB para que se encuentren rápidamente en la siguiente referencia. Si la TLB ya está llena, se debe seleccionar un bloque adecuado para su reemplazo. Existen diferentes métodos de reemplazo, como el menos usado recientemente (LRU), primero en entrar, primero en salir (FIFO), etc. Consulte la sección de traducción de direcciones en el artículo sobre cachés para obtener más detalles sobre el direccionamiento virtual en relación con las cachés y las TLB.

Implicaciones del desempeño

El diagrama de flujo [ 5 ] muestra el funcionamiento de un búfer de búsqueda de traducción. Para simplificar, no se menciona la rutina de fallo de página.

La CPU debe acceder a la memoria principal en caso de fallo de caché de instrucciones, de caché de datos o de TLB. El tercer caso (el más sencillo) se da cuando la información deseada se encuentra en la caché, pero la información para la traducción virtual-física no está en la TLB. Todos estos casos son lentos, debido a la necesidad de acceder a un nivel más lento de la jerarquía de memoria, por lo que una TLB que funcione correctamente es fundamental. De hecho, un fallo de TLB puede ser más costoso que un fallo de caché de instrucciones o de datos, debido a que requiere no solo una carga desde la memoria principal, sino también un recorrido de página, lo que implica varios accesos a memoria.

El diagrama de flujo proporcionado explica el funcionamiento de una TLB. Si se produce un fallo de TLB, la CPU comprueba la tabla de páginas en busca de la entrada correspondiente. Si el bit de presencia está activado, la página se encuentra en la memoria principal y el procesador puede recuperar el número de marco de la entrada de la tabla de páginas para formar la dirección física. [ 6 ] El procesador también actualiza la TLB para incluir la nueva entrada de la tabla de páginas. Finalmente, si el bit de presencia no está activado, la página deseada no se encuentra en la memoria principal y se produce un fallo de página . A continuación, se llama a una interrupción de fallo de página, que ejecuta la rutina de gestión de fallos de página.

Si el conjunto de trabajo de la página no cabe en la TLB, se produce un saturamiento de la TLB , donde ocurren fallos frecuentes de la TLB, y cada página recién almacenada en caché desplaza una que pronto se volverá a usar, degradando el rendimiento exactamente de la misma manera que lo hace el saturamiento de la caché de instrucciones o de datos. El saturamiento de la TLB puede ocurrir incluso si no se produce saturamiento de la caché de instrucciones o de datos , porque estas se almacenan en unidades de diferente tamaño. Las instrucciones y los datos se almacenan en caché en pequeños bloques ( líneas de caché ), no en páginas completas, pero la búsqueda de direcciones se realiza a nivel de página. Por lo tanto, incluso si los conjuntos de trabajo de código y datos caben en la caché, si los conjuntos de trabajo están fragmentados en muchas páginas, el conjunto de trabajo de direcciones virtuales puede no caber en la TLB, causando saturamiento de la TLB. Por consiguiente, el dimensionamiento adecuado de la TLB requiere considerar no solo el tamaño de las cachés de instrucciones y datos correspondientes, sino también cómo están fragmentadas en múltiples páginas.

Múltiples TLB

Al igual que las cachés, las TLB pueden tener varios niveles. Las CPU pueden estar (y hoy en día suelen estarlo) construidas con varias TLB, por ejemplo, una TLB L1 pequeña (potencialmente totalmente asociativa) que es extremadamente rápida, y una TLB L2 más grande que es algo más lenta. Cuando se utilizan la TLB de instrucciones (ITLB) y la TLB de datos (DTLB), una CPU puede tener tres (ITLB1, DTLB1, TLB2) o cuatro TLB.

Por ejemplo, la microarquitectura Nehalem de Intel tiene una DTLB L1 asociativa de cuatro vías con 64 entradas para páginas de 4 KiB y 32 entradas para páginas de 2/4 MiB, una ITLB L1 con 128 entradas para páginas de 4 KiB que utiliza asociatividad de cuatro vías y 14 entradas totalmente asociativas para páginas de 2/4 MiB (ambas partes de la ITLB divididas estáticamente entre dos hilos) [ 7 ] y una TLB L2 unificada de 512 entradas para páginas de 4 KiB, [ 8 ] ambas asociativas de cuatro vías. [ 9 ]     

Algunas TLB pueden tener secciones separadas para páginas pequeñas y páginas grandes. Por ejemplo, la microarquitectura Intel Skylake separa las entradas de la TLB para  páginas de 1 GiB de las de páginas de 4  KiB/2  MiB. [ 10 ]

Manejo de fallos de TLB

En las arquitecturas modernas se encuentran tres esquemas para manejar los fallos de la TLB:

  • Con la gestión de la TLB por hardware, la CPU recorre automáticamente las tablas de páginas (utilizando el registro CR3 en x86 , por ejemplo) para comprobar si existe una entrada válida en la tabla de páginas para la dirección virtual especificada. Si existe una entrada, se carga en la TLB y se vuelve a intentar el acceso: esta vez el acceso se realizará correctamente y el programa podrá continuar con normalidad. Si la CPU no encuentra ninguna entrada válida para la dirección virtual en las tablas de páginas, genera una excepción de fallo de página , que el sistema operativo debe gestionar. La gestión de los fallos de página suele implicar cargar los datos solicitados en la memoria física, configurar una entrada en la tabla de páginas para asignar la dirección virtual que causó el fallo a la dirección física correcta y reanudar el programa. Con una TLB gestionada por hardware, el formato de las entradas de la TLB no es visible para el software y puede variar de una CPU a otra sin que ello afecte a la compatibilidad del sistema operativo.
  • Con las TLB gestionadas por software, un fallo de TLB genera una excepción de fallo de TLB , y el código del sistema operativo se encarga de recorrer las tablas de páginas y encontrar la entrada correspondiente. A continuación, el sistema operativo carga la información de esa entrada en la TLB y reinicia el programa desde la instrucción que causó el fallo. Al igual que con la gestión de TLB por hardware, si el sistema operativo no encuentra una traducción válida en las tablas de páginas, se produce un fallo de página y debe gestionarlo adecuadamente. Los conjuntos de instrucciones de las CPU con TLB gestionadas por software incluyen instrucciones que permiten cargar entradas en cualquier ranura de la TLB. El formato de la entrada de la TLB se define como parte de la arquitectura del conjunto de instrucciones (ISA). [ 11 ]
  • En las TLB gestionadas por firmware, un fallo de TLB provoca una interrupción en el firmware del sistema, que se encarga de recorrer las tablas de páginas y encontrar la entrada correspondiente, de forma similar a como lo hace un gestor de fallos de TLB en una TLB gestionada por software. Con una TLB gestionada por firmware, el formato de las entradas de la TLB no es visible para el software del sistema y puede variar de una CPU a otra sin que ello afecte a la compatibilidad del sistema operativo.

La arquitectura MIPS especifica una TLB administrada por software. [ 12 ]

La arquitectura SPARC V9 permite que una implementación de SPARC V9 no tenga MMU, tenga una MMU con una TLB administrada por software o una MMU con una TLB administrada por hardware, [ 13 ] y la arquitectura UltraSPARC 2005 especifica una TLB administrada por software. [ 14 ]

La arquitectura Itanium ofrece la opción de utilizar TLB gestionadas por software o por hardware. [ 15 ]

La arquitectura Alpha cuenta con una TLB gestionada por firmware, cuyo código para el manejo de fallos de TLB se encuentra en PALcode , en lugar de en el sistema operativo. Dado que el PALcode para un procesador puede ser específico del procesador y del sistema operativo, esto permite que diferentes versiones de PALcode implementen distintos formatos de tabla de páginas para diferentes sistemas operativos, sin necesidad de que la arquitectura especifique el formato de la TLB ni las instrucciones para controlarla. [ 16 ]

TLB típico

Estos son los niveles de rendimiento típicos de una TLB: [ 17 ]

  • Tamaño: 12 bits – 4.096 entradas
  • Tiempo de impacto: 0,5 – 1 ciclo de reloj
  • Penalización por fallo: 10 – 100 ciclos de reloj
  • Tasa de fallos: 0,01 – 1% (20–40% para aplicaciones dispersas/de grafos)

La tasa promedio de ciclos de memoria efectivos se define comometro+(1pag)h+pagmetro{\displaystyle m+(1-p)h+pm}ciclos, dondemetro{\displaystyle m}es el número de ciclos necesarios para una lectura de memoria,pag{\displaystyle p}es la tasa de errores yh{\displaystyle h}es el tiempo de acierto en ciclos. Si un acierto de TLB tarda 1 ciclo de reloj, un fallo tarda 30 ciclos de reloj, una lectura de memoria tarda 30 ciclos de reloj y la tasa de fallos es del 1%, la tasa efectiva de ciclos de memoria es un promedio de30+0,99×1+0,01×30{\displaystyle 30+0.99\times 1+0.01\times 30}(31,29 ciclos de reloj por acceso a memoria). [ 18 ]

Conmutador de espacio de direcciones

En un cambio de espacio de direcciones, como ocurre al cambiar de contexto entre procesos (pero no entre hilos), algunas entradas de la TLB pueden volverse inválidas, ya que la asignación virtual a física es diferente. La estrategia más sencilla para solucionar esto es vaciar completamente la TLB. Esto significa que, después de un cambio, la TLB está vacía y cualquier referencia a memoria será un fallo, por lo que pasará algún tiempo antes de que todo vuelva a funcionar a máxima velocidad. Las CPU más recientes utilizan estrategias más eficaces para marcar a qué proceso pertenece una entrada. Esto significa que si un segundo proceso se ejecuta solo durante un breve período y vuelve a un primer proceso, la TLB aún puede contener entradas válidas, lo que ahorra el tiempo necesario para recargarlas. [ 19 ]

Otras estrategias evitan vaciar la TLB al cambiar de contexto: (a) Un sistema operativo con un único espacio de direcciones utiliza la misma asignación virtual-física para todos los procesos. (b) Algunas CPU tienen un registro de ID de proceso, y el hardware utiliza las entradas de la TLB solo si coinciden con el ID del proceso actual.

Por ejemplo, en el Alpha 21264 , cada entrada de la TLB está etiquetada con un número de espacio de direcciones (ASN), y solo se consideran válidas las entradas de la TLB con un ASN que coincida con la tarea actual. Otro ejemplo es el del Intel Pentium Pro , donde el indicador de habilitación global de página (PGE) en el registro CR4 y el indicador global (G) de una entrada de directorio de páginas o tabla de páginas pueden utilizarse para evitar que las páginas de uso frecuente se invaliden automáticamente en las TLB al cambiar de tarea o al cargar el registro CR3. Desde la microarquitectura Westmere de 2010, los procesadores Intel 64 también admiten identificadores de contexto de proceso (PCID) de 12 bits , que permiten conservar entradas de la TLB para múltiples espacios de direcciones lineales, utilizándose solo para la traducción de direcciones aquellas que coincidan con el PCID actual. [ 20 ] [ 21 ]

Si bien el vaciado selectivo de la TLB es una opción en las TLB administradas por software, la única opción en algunas TLB de hardware (por ejemplo, la TLB del Intel 80386 ) es el vaciado completo de la TLB al cambiar de espacio de direcciones. Otras TLB de hardware (por ejemplo, la TLB del Intel 80486 y procesadores x86 posteriores, y la TLB de los procesadores ARM ) permiten el vaciado de entradas individuales de la TLB indexadas por dirección virtual.

El vaciado de la TLB puede ser un importante mecanismo de seguridad para el aislamiento de memoria entre procesos, asegurando que un proceso no pueda acceder a los datos almacenados en las páginas de memoria de otro proceso. El aislamiento de memoria es especialmente crítico durante las transiciones entre el proceso privilegiado del núcleo del sistema operativo y los procesos de usuario, como lo puso de manifiesto la vulnerabilidad de seguridad Meltdown . Las estrategias de mitigación, como el aislamiento de la tabla de páginas del núcleo (KPTI), dependen en gran medida de los vaciados de la TLB que afectan al rendimiento y se benefician enormemente de la gestión selectiva de entradas de la TLB habilitada por hardware, como PCID. [ 22 ]

Virtualización y TLB x86

Con la llegada de la virtualización para la consolidación de servidores, se ha invertido mucho esfuerzo en facilitar la virtualización de la arquitectura x86 y garantizar un mejor rendimiento de las máquinas virtuales en hardware x86. [ 23 ] [ 24 ]

Normalmente, las entradas en las TLB x86 no están asociadas a un espacio de direcciones específico; se refieren implícitamente al espacio de direcciones actual. Por lo tanto, cada vez que hay un cambio en el espacio de direcciones, como un cambio de contexto, es necesario vaciar toda la TLB. Mantener una etiqueta que asocie cada entrada de la TLB con un espacio de direcciones en el software y comparar esta etiqueta durante la búsqueda y el vaciado de la TLB es muy costoso, especialmente porque la TLB x86 está diseñada para operar con muy baja latencia y completamente en hardware. En 2008, tanto Intel ( Nehalem ) [ 25 ] como AMD ( SVM ) [ 26 ] introdujeron etiquetas como parte de la entrada de la TLB y hardware dedicado que verifica la etiqueta durante la búsqueda. No todos los sistemas operativos hicieron un uso completo de estas etiquetas de inmediato, pero Linux 4.14 comenzó a usarlas para identificar los espacios de direcciones usados ​​recientemente, ya que los PCID de 12 bits (4095 valores diferentes) son insuficientes para todas las tareas que se ejecutan en una CPU determinada. [ 27 ]

Véase también

Referencias

  1. Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (2014), Sistemas operativos: tres piezas sencillas [ Capítulo: Traducciones más rápidas (TLB) ] (PDF) , Libros de Arpaci-Dusseau
  2. S. Peter Song; Marvin Denman; Joe Chang (octubre de 1994). "El microprocesador RISC PowerPC 604" (PDF) . IEEE Micro . 14 (5): 13–14 . doi : 10.1109/MM.1994.363071 . S2CID 11603864. Archivado del original (PDF) el 1 de junio de 2016. 
  3. Silberschatz, Abraham; Galvin, Peter B.; Gagne, Greg (2009). Conceptos de sistemas operativos . Estados Unidos de América: John Wiley & Sons, Inc. ISBN 978-0-470-12872-5.
  4. Chen, J. Bradley; Borg, Anita; Jouppi, Norman P. (1992). "Un estudio basado en simulación del rendimiento de la TLB" . ACM SIGARCH Computer Architecture News . 20 (2): 114– 123. doi : 10.1145/146628.139708 .
  5. Stallings, William (2014). Sistemas operativos: Principios internos y de diseño . Estados Unidos de América: Pearson. ISBN 978-0133805918.
  6. Solihin, Yan (2016). Fundamentos de la arquitectura multinúcleo paralela . Boca Raton, FL: Taylor & Francis Group. ISBN 978-0-9841630-0-7.
  7. "Dentro de Nehalem: el futuro procesador y sistema de Intel" . Real World Technologies. 2 de abril de 2008.
  8. "Intel Core i7 (Nehalem): ¿Arquitectura de AMD?" . Tom's Hardware . 14 de octubre de 2008 . Consultado el 24 de noviembre de 2010 .
  9. "Dentro de Nehalem: el futuro procesador y sistema de Intel" . Real World Technologies. 2 de abril de 2008. Consultado el 24 de noviembre de 2010 .
  10. ^ Srinivas, Suresh; Pawar, Uttam; Aribuki, Dunni; Manciu, Catalín; Schulhof, Gabriel; Prasad, Aravinda (1 de noviembre de 2019). "Plan de optimización del rendimiento en tiempo de ejecución: optimización de la arquitectura Intel® con páginas de códigos grandes" . Consultado el 22 de octubre de 2022 .
  11. J. Smith y R. Nair. Máquinas virtuales: plataformas versátiles para sistemas y procesos (Serie Morgan Kaufmann de arquitectura y diseño informático). Morgan Kaufmann Publishers Inc., 2005.
  12. Welsh, Matt. "Arquitectura MIPS r2000/r3000" . Archivado del original el 14 de octubre de 2008. Recuperado el 16 de noviembre de 2008. Si no se encuentra ninguna entrada TLB coincidente, se produce una excepción de fallo de TLB .
  13. SPARC International, Inc. El manual de arquitectura SPARC, versión 9. PTR Prentice Hall .
  14. Sun Microsystems . Arquitectura UltraSPARC 2005. Borrador D0.9.2, 19 de junio de 2008. Sun Microsystems.
  15. Memoria virtual en el núcleo IA-64 > Búfer de traducción anticipada .
  16. Compaq Computer Corporation . Manual de arquitectura Alpha (PDF) . Versión 4. Compaq Computer Corporation. Archivado del original (PDF) el 9 de octubre de 2014. Consultado el 1 de diciembre de 2010 .
  17. David A. Patterson; John L. Hennessy (2009). Organización y diseño de computadoras. Interfaz hardware/software. 4.ª edición . Burlington, MA 01803, EE. UU.: Morgan Kaufmann Publishers. pág. 503. ISBN  978-0-12-374493-7.{{cite book}}: CS1 mantenimiento: ubicación ( enlace )
  18. "Búfer de búsqueda de traducción (TLB) en paginación" . GeeksforGeeks . 26 de febrero de 2019. Consultado el 10 de febrero de 2021 .
  19. Ulrich Drepper (9 de octubre de 2014). "Memoria parte 3: Memoria virtual" . LWN.net .
  20. David Kanter (17 de marzo de 2010). "Westmere llega" . Real World Tech . Consultado el 6 de enero de 2018 .
  21. Intel Corporation (2017). "4.10.1 Identificadores de contexto de proceso (PCID)". Manual del desarrollador de software para arquitecturas Intel 64 e IA-32 (PDF) . Vol. 3A: Guía de programación del sistema, parte 1. 
  22. Gil Tene (8 de enero de 2018). "PCID es ahora una característica crítica de rendimiento/seguridad en x86" . Consultado el 23 de marzo de 2018 .
  23. ^ D. Abramson; J. Jackson; S. Muthrasanallur; G. Neiger; G. Regnier; R. Sankaran; I. Schoinas; R. Uhlig; B. Vembu; J. Wiegert. "Tecnología de virtualización Intel para E/S dirigidas". Revista de tecnología Intel . 10 (3): 179-192 .
  24. Advanced Micro Devices. Manual de referencia de la arquitectura de máquina virtual segura de AMD. Advanced Micro Devices, 2008.
  25. G. Neiger; A. Santoni; F. Leung; D. Rodgers; R. Uhlig. "Tecnología de virtualización de Intel: soporte de hardware para una virtualización eficiente del procesador". Intel Technology Journal . 10 (3).
  26. Advanced Micro Devices. Manual de referencia de la arquitectura de máquina virtual segura de AMD . Advanced Micro Devices, 2008.
  27. "Entradas TLB de mayor duración con PCID" . Kernelnewbies . 30 de diciembre de 2017. Consultado el 31 de julio de 2023 .