stringtranslate.com

Búfer de búsqueda de traducción

Un buffer de traducción ( TLB ) es una memoria caché que almacena las traducciones recientes de la memoria virtual a la memoria física . Se utiliza para reducir el tiempo necesario para acceder a una ubicación de memoria del usuario. [1] Se le puede llamar caché de traducción de direcciones. Es parte de la unidad de administració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 administración de memoria y casi siempre está presente en cualquier procesador que utilice memoria virtual paginada o segmentada .

El TLB a veces se implementa como memoria direccionable por contenido (CAM). La clave de búsqueda 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 el TLB, la búsqueda CAM produce una coincidencia rápidamente y la dirección física recuperada se puede utilizar para acceder a la memoria. Esto se llama acierto TLB. Si la dirección solicitada no está en el TLB, se pierde y la traducción continúa buscando la tabla de páginas en un proceso llamado recorrido de página . El recorrido de la página requiere mucho tiempo en comparación con la velocidad del procesador, ya que implica leer el contenido de múltiples ubicaciones de memoria y usarlos para calcular la dirección física. Una vez que la dirección física se determina mediante el recorrido de la página, la asignación de dirección virtual a dirección física se ingresa en el TLB. El PowerPC 604 , por ejemplo, tiene un TLB conjunto asociativo de dos vías para cargas y almacenamiento de datos. [2] Algunos procesadores tienen TLB de direcciones de datos e instrucciones diferentes.

Descripción general

Funcionamiento general de TLB [3]

Un TLB tiene un número fijo de espacios que contienen entradas de tabla de páginas y entradas de tabla de segmentos; Las entradas de la tabla de páginas asignan direcciones virtuales a direcciones físicas y direcciones de tablas intermedias, mientras que las entradas de la tabla de segmentos asignan direcciones virtuales a direcciones de segmentos, direcciones de tablas intermedias y direcciones de tablas de páginas. La memoria virtual es el espacio de memoria visto desde un proceso; este espacio suele dividirse en páginas de un tamaño fijo (en la memoria paginada) o, con menos frecuencia, en segmentos de tamaños variables (en la memoria segmentada). La tabla de páginas, generalmente almacenada en la memoria principal , realiza un seguimiento de dónde se almacenan las páginas virtuales en la memoria física. Este método utiliza dos accesos a la memoria (uno para la entrada de la tabla de páginas y otro para el byte) para acceder a un byte. Primero, se busca en la tabla de páginas el número de fotograma. En segundo lugar, el número de fotograma con el desplazamiento de página proporciona la dirección real. Por tanto, cualquier esquema sencillo de memoria virtual tendría el efecto de duplicar el tiempo de acceso a la memoria. Por lo tanto, el TLB se utiliza para reducir el tiempo necesario para acceder a las ubicaciones de memoria en el método de tabla de páginas. El TLB es una memoria caché de la tabla de páginas y representa sólo un subconjunto del contenido de la tabla de páginas.

Haciendo referencia a las direcciones de memoria física, un TLB puede residir entre la CPU y la caché de la CPU , entre la caché de la CPU y la memoria de almacenamiento principal , o entre niveles de una caché multinivel. La ubicación determina si la caché utiliza direccionamiento físico o virtual. Si el caché se direcciona virtualmente, las solicitudes se envían directamente desde la CPU al caché y se accede al TLB solo en caso de error de caché . Si la caché tiene una dirección física, la CPU realiza una búsqueda de 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 arquitectura Harvard modificada , puede existir un espacio de direcciones virtuales separado o hardware de acceso a la memoria para instrucciones y datos. Esto puede conducir a TLB distintos para cada tipo de acceso, un búfer de búsqueda de traducción de instrucciones (ITLB) y un búfer de búsqueda de traducción de datos (DTLB). Se han demostrado varios beneficios con TLB de datos e instrucciones separados. [4]

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

Una optimización común para cachés con direcciones físicas es realizar la búsqueda de TLB en paralelo con el acceso a la caché. Tras cada referencia a la memoria virtual, el hardware verifica el TLB para ver si el número de página se encuentra allí. En caso afirmativo, es un acierto de TLB y se realiza la traducción. El número de fotograma se devuelve y se utiliza para acceder a la memoria. Si el número de página no está en el TLB, se debe verificar la tabla de páginas. Dependiendo de la CPU, esto se puede hacer automáticamente mediante un hardware o mediante una interrupción del sistema operativo. Cuando se obtiene el número de cuadro, se puede utilizar para acceder a la memoria. Además, añadimos el número de página y el número de fotograma al TLB, para que se encuentren rápidamente en la siguiente referencia. Si el TLB ya está lleno, se debe seleccionar un bloque adecuado para reemplazarlo. Existen diferentes métodos de reemplazo, como el usado menos recientemente (LRU), el primero en entrar, el primero en salir (FIFO), etc.; consulte la sección de traducción de direcciones en el artículo sobre caché para obtener más detalles sobre el direccionamiento virtual en lo que respecta a cachés y TLB.

Implicaciones de rendimiento

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

La CPU tiene que acceder a la memoria principal en caso de un error en el caché de instrucciones, un error en el caché de datos o un error en el TLB. El tercer caso (el más simple) es cuando la información deseada en sí está realmente en un caché, pero la información para la traducción virtual a física no está en un TLB. Todos estos son lentos, debido a la necesidad de acceder a un nivel más lento de la jerarquía de memoria, por lo que un TLB que funcione bien es importante. De hecho, una pérdida de TLB puede ser más costosa que una pérdida de caché de instrucciones o datos, debido a la necesidad no solo de una carga desde la memoria principal, sino también de un recorrido de página, lo que requiere varios accesos a la memoria.

El diagrama de flujo proporcionado explica el funcionamiento de un TLB. Si se trata de una falla de TLB, entonces la CPU verifica la tabla de páginas para buscar la entrada de la tabla de páginas. Si el bit actual está establecido, entonces la página está en la memoria principal y el procesador puede recuperar el número de trama de la entrada de la tabla de páginas para formar la dirección física. [6] El procesador también actualiza el TLB para incluir la nueva entrada de la tabla de páginas. Finalmente, si el bit actual no está establecido, entonces la página deseada no está en la memoria principal y se emite un error de página . Luego se llama a una interrupción por fallo de página, que ejecuta la rutina de manejo de fallos de página.

Si el conjunto de trabajo de la página no encaja en el TLB, entonces se produce una paliza de TLB , donde se producen errores frecuentes de TLB, y cada página recién almacenada en caché desplaza una que pronto se volverá a utilizar, degradando el rendimiento exactamente de la misma manera que la paliza de la instrucción o el caché de datos lo hace. La paliza de TLB puede ocurrir incluso si no se produce la paliza de caché de instrucciones o de datos , porque se almacenan en caché en unidades de diferentes tamaños. Las instrucciones y los datos se almacenan en caché en pequeños bloques ( líneas de caché ), no en páginas enteras, 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, es posible que el conjunto de trabajo de direcciones virtuales no quepa en TLB, lo que provoca una destrucción de TLB. Por lo tanto, el dimensionamiento apropiado del TLB requiere considerar no solo el tamaño de las cachés de instrucciones y datos correspondientes, sino también cómo se fragmentan en múltiples páginas.

Múltiples TLB

Al igual que las cachés, los TLB pueden tener varios niveles. Las CPU se pueden construir (y hoy en día suelen hacerlo) con múltiples TLB, por ejemplo, un TLB L1 pequeño (potencialmente completamente asociativo) que es extremadamente rápido y un TLB L2 más grande que es algo más lento. Cuando se utilizan TLB de instrucción (ITLB) y TLB de datos (DTLB), una CPU puede tener tres (ITLB1, DTLB1, TLB2) o cuatro TLB.

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

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

Manejo de fallas TLB

En las arquitecturas modernas se encuentran tres esquemas para manejar errores de TLB:

La arquitectura MIPS especifica un TLB administrado por software. [12]

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

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

La arquitectura Alpha tiene un TLB administrado por firmware, y el código de manejo de errores de TLB está en PALcode , en lugar de en el sistema operativo. Como el código PAL para un procesador puede ser específico del procesador y del sistema operativo, esto permite que diferentes versiones de PALcode implementen diferentes formatos de tabla de páginas para diferentes sistemas operativos, sin requerir el formato TLB y las instrucciones para controlar el TLB. , a especificar por la arquitectura. [dieciséis]

TLB típico

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

La tasa de ciclo de memoria efectiva promedio se define como ciclos, donde es el número de ciclos necesarios para una lectura de memoria, es la tasa de errores y es el tiempo de acierto en ciclos. Si un acierto de TLB requiere 1 ciclo de reloj, un fallo toma 30 ciclos de reloj, una lectura de memoria toma 30 ciclos de reloj y la tasa de fallo es del 1%, la tasa de ciclo de memoria efectiva es un promedio de ( 31,29 ciclos de reloj por acceso a la memoria). [18]

Conmutador de espacio de direcciones

En un cambio de espacio de direcciones, como ocurre cuando se cambia de contexto entre procesos (pero no entre subprocesos), algunas entradas TLB pueden dejar de ser válidas, ya que la asignación de virtual a física es diferente. La estrategia más sencilla para solucionar este problema es vaciar completamente el TLB. Esto significa que después de un cambio, el TLB está vacío y cualquier referencia de memoria se perderá, por lo que pasará algún tiempo antes de que todo vuelva a funcionar a toda velocidad. Las CPU más nuevas utilizan estrategias más efectivas para marcar para qué proceso es una entrada. Esto significa que si un segundo proceso se ejecuta solo por un corto tiempo y vuelve al primer proceso, es posible que el TLB aún tenga entradas válidas, lo que ahorra tiempo para recargarlas. [19]

Otras estrategias evitan vaciar el TLB en un cambio de contexto: (a) Un sistema operativo de espacio de direcciones único utiliza el mismo mapeo de virtual a físico para todos los procesos. (b) Algunas CPU tienen un registro de ID de proceso y el hardware usa entradas TLB solo si coinciden con la ID de proceso actual.

Por ejemplo, en Alpha 21264 , cada entrada TLB está etiquetada con un número de espacio de direcciones (ASN) y solo las entradas TLB con un ASN que coincida con la tarea actual se consideran válidas. Otro ejemplo en Intel Pentium Pro , el indicador de habilitación global de página (PGE) en el registro CR4 y el indicador global (G) de un directorio de páginas o entrada de tabla de páginas se pueden usar para evitar que las páginas utilizadas con frecuencia se invaliden automáticamente en los TLB en un interruptor de tarea o una carga de 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 retener entradas TLB para múltiples espacios de direcciones lineales, y solo aquellas que coinciden con el PCID actual se utilizan para la traducción de direcciones. [20] [21]

Si bien la limpieza selectiva del TLB es una opción en los TLB administrados por software, la única opción en algunos TLB de hardware (por ejemplo, el TLB en Intel 80386 ) es la limpieza completa del TLB en un conmutador de espacio de direcciones. Otros TLB de hardware (por ejemplo, el TLB en los procesadores Intel 80486 y x86 posteriores, y el TLB en los procesadores ARM ) permiten eliminar entradas individuales del TLB indexadas por dirección virtual.

La limpieza del TLB puede ser un mecanismo de seguridad importante para el aislamiento de la memoria entre procesos para garantizar que un proceso no pueda acceder a los datos almacenados en las páginas de memoria de otro proceso. El aislamiento de la memoria es especialmente crítico durante los cambios entre el proceso del kernel del sistema operativo privilegiado y los procesos del usuario, como lo destacó la vulnerabilidad de seguridad Meltdown . Las estrategias de mitigación, como el aislamiento de la tabla de páginas del kernel (KPTI), dependen en gran medida de los vaciados de TLB que afectan el rendimiento y se benefician enormemente de la gestión selectiva de entradas de 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 han realizado muchos esfuerzos para hacer que la arquitectura x86 sea más fácil de virtualizar y garantizar un mejor rendimiento de las máquinas virtuales en hardware x86. [23] [24]

Normalmente, las entradas en los TLB x86 no están asociadas con un espacio de direcciones en particular; 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, se debe vaciar todo el TLB. Mantener una etiqueta que asocie cada entrada de TLB con un espacio de direcciones en el software y comparar esta etiqueta durante la búsqueda de TLB y el vaciado de TLB es muy costoso, especialmente porque el TLB x86 está diseñado para funcionar con una latencia muy baja y completamente en hardware. En 2008, tanto Intel ( Nehalem ) [25] como AMD ( SVM ) [26] introdujeron etiquetas como parte de la entrada TLB y hardware dedicado que verifica la etiqueta durante la búsqueda. No todos los sistemas operativos hicieron uso completo de estas etiquetas de inmediato, pero Linux 4.14 comenzó a usarlas para identificar 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]

Ver 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. ^ Canción de San Pedro; Marvin Denman; Joe Chang (octubre de 1994). "El microprocesador RISC PowerPC 604" (PDF) . Micro IEEE . 14 (5): 13-14. doi :10.1109/MM.1994.363071. S2CID  11603864. Archivado desde el original (PDF) el 1 de junio de 2016.
  3. ^ Silberschatz, Galvin, Gagne, Abraham, Peter B., Greg (2009). Conceptos de sistemas operativos . Estados Unidos de América: John Wiley & Sons. ISBN _ 978-0-470-12872-5.{{cite book}}: Mantenimiento CS1: varios nombres: lista de autores ( enlace )
  4. ^ Chen, J. Bradley; Borg, Anita; Jouppi, Norman P. (1992). "Un estudio basado en simulación del rendimiento de TLB". Noticias de arquitectura informática SIGARCH . 20 (2): 114-123. doi : 10.1145/146628.139708 .
  5. ^ Puestos, William (2014). Sistemas operativos: componentes internos y principios de diseño . Estados Unidos de América: Pearson. ISBN 978-0133805918.
  6. ^ Solihin, Yan (2016). Fundamentos de la arquitectura multinúcleo paralelo . Boca Ratón, FL: Grupo Taylor & Francis. ISBN 978-0-9841630-0-7.
  7. ^ "Dentro de Nehalem: el futuro procesador y sistema de Intel". Tecnologías del mundo real.
  8. ^ "Intel Core i7 (Nehalem): ¿Arquitectura de AMD?". Hardware de Tom . 14 de octubre de 2008 . Consultado el 24 de noviembre de 2010 .
  9. ^ "Dentro de Nehalem: el futuro procesador y sistema de Intel". Tecnologías del mundo real . 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 en arquitectura y diseño de computadoras). Morgan Kaufmann Publishers Inc., 2005.
  12. ^ Galés, Matt. "Arquitectura MIPS r2000/r3000". Archivado desde el original el 14 de octubre de 2008 . Consultado el 16 de noviembre de 2008 . Si no se encuentra ninguna entrada TLB coincidente, se produce una excepción de pérdida de TLB
  13. ^ SPARC International, Inc. Manual de arquitectura SPARC, versión 9. PTR Prentice Hall .
  14. ^ Microsistemas solares . Arquitectura UltraSPARC 2005. Borrador D0.9.2, 19 de junio de 2008. Sun Microsystems.
  15. ^ Memoria virtual en el kernel IA-64 > Búfer de traducción Lookaside.
  16. ^ Corporación de Computadoras Compaq . Manual de arquitectura Alpha (PDF) . Versión 4. Compaq Computer Corporation. Archivado desde el 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 ordenadores. Interfaz hardware/software. 4ta edición . Burlington, MA 01803, EE.UU.: Morgan Kaufmann Publishers. pag. 503.ISBN _ 978-0-12-374493-7.{{cite book}}: Mantenimiento CS1: ubicación ( enlace )
  18. ^ "Búfer de traducción (TLB) en paginación". Geeks para Geeks . 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). "Llega Westmere". Tecnología del mundo real . Consultado el 6 de enero de 2018 .
  21. ^ Corporación Intel (2017). "4.10.1 Identificadores de contexto de proceso (PCID)". Manual del desarrollador de software de 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. ^ Microdispositivos avanzados. Manual de referencia de la arquitectura de máquinas virtuales seguras de AMD. Microdispositivos avanzados, 2008.
  25. ^ G. Neiger; A. Santoni; F. Leung; D. Rodgers; R. Uhlig. "Tecnología de virtualización Intel: soporte de hardware para una virtualización eficiente del procesador". Revista de tecnología Intel . 10 (3).
  26. ^ Microdispositivos avanzados. Manual de referencia de la arquitectura de máquinas virtuales seguras de AMD . Microdispositivos avanzados, 2008.
  27. ^ "Entradas TLB de mayor duración con PCID". Novatos del kernel . 30 de diciembre de 2017 . Consultado el 31 de julio de 2023 .

enlaces externos