stringtranslate.com

Buffer de búsqueda de traducción

Un búfer de traducción de direcciones ( TLB ) es un caché de memoria que almacena las traducciones recientes de la memoria virtual a la memoria física . Se utiliza para reducir el tiempo que se tarda en acceder a una ubicación de la memoria del usuario. [1] Se puede llamar caché de traducción de direcciones. Es una parte de la unidad de gestión de memoria (MMU) del chip. Un TLB puede residir entre la CPU y el caché de la CPU , entre el caché de la CPU y la memoria principal o entre los diferentes niveles del 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 casi siempre está presente 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 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 CAM produce una coincidencia rápidamente y la dirección física recuperada se puede utilizar para acceder a la memoria. Esto se llama un acierto de TLB. Si la dirección solicitada no está en la TLB, es un error y la traducción continúa buscando en la tabla de páginas en un proceso llamado recorrido de página . El recorrido de página consume 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. Después de que la dirección física se determina mediante el recorrido de página, la asignación 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 diferentes TLB de instrucciones y direcciones de datos.

Descripción general

Funcionamiento general del TLB [3]

Una TLB tiene un número fijo de ranuras que contienen entradas de tabla de páginas y entradas de tabla de segmentos; las entradas de tabla de páginas asignan direcciones virtuales a direcciones físicas y direcciones de tabla intermedia, mientras que las entradas de tabla de segmentos asignan direcciones virtuales a direcciones de segmento, direcciones de tabla intermedia y direcciones de tabla de páginas. La memoria virtual es el espacio de memoria visto desde un proceso; este espacio a menudo se divide en páginas de un tamaño fijo (en memoria paginada), o con menos frecuencia en segmentos de tamaños variables (en 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 de memoria (uno para la entrada de tabla de páginas, uno 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 con el desplazamiento de página proporciona la dirección real. Por lo tanto, cualquier esquema de memoria virtual sencillo tendría el efecto de duplicar el tiempo de acceso a la memoria. Por lo tanto, la TLB se utiliza para reducir el tiempo necesario para acceder a las ubicaciones de memoria en el método de tabla de páginas. La TLB es un caché de la tabla de páginas, que representa solo un subconjunto del contenido de la tabla de páginas.

En cuanto a las direcciones de memoria física, una 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 los niveles de una caché de varios niveles. La ubicación determina si la caché utiliza direccionamiento físico o virtual. Si la caché tiene direccionamiento virtual, las solicitudes se envían directamente desde la CPU a la caché y solo se accede a la TLB en caso de un error de caché . Si la caché tiene direccionamiento físico, 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 una arquitectura Harvard modificada , puede existir un espacio de dirección virtual independiente o un hardware de acceso a la memoria para instrucciones y datos. Esto puede dar lugar a distintas TLB para cada tipo de acceso, un búfer de traducción de instrucciones (ITLB) y un búfer de traducción de datos (DTLB). Se han demostrado varios beneficios con TLB de datos e instrucciones independientes. [4]

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

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é. En cada referencia de memoria virtual, el hardware verifica la TLB para ver si el número de página se encuentra allí. Si es así, se trata de un acierto de TLB y se realiza la traducción. Se devuelve el número de marco y se utiliza para acceder a la memoria. Si el número de página no está en la TLB, se debe verificar la tabla de páginas. Según la CPU, esto se puede hacer automáticamente utilizando un hardware o utilizando una interrupción en el sistema operativo. Cuando se obtiene el número de marco, se puede utilizar para acceder a la memoria. Además, agregamos el número de página y el número de marco a la TLB, de modo que se encuentren rápidamente en la siguiente referencia. Si la TLB ya está llena, se debe seleccionar un bloque adecuado para reemplazarlo. Existen diferentes métodos de reemplazo, como el menos usado 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 en el desempeño

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

La CPU tiene que acceder a la memoria principal en caso de un error de caché de instrucciones, de caché de datos o de TLB. El tercer caso (el más simple) es cuando la información deseada está en realidad en una caché, pero la información para la traducción virtual a física no está en una 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 es importante que una TLB funcione bien. De hecho, un error de TLB puede ser más costoso que un error de caché de instrucciones o de datos, debido a la necesidad no solo de una carga desde la memoria principal, sino de un recorrido de página, lo que requiere varios accesos a la memoria.

El diagrama de flujo proporcionado explica el funcionamiento de una TLB. Si se trata de un error de TLB, la CPU comprueba la tabla de páginas en busca de la entrada de la tabla de páginas. Si el bit actual está establecido, 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 la TLB para incluir la nueva entrada de la tabla de páginas. Finalmente, si el bit actual no está establecido, la página deseada no está en la memoria principal y se emite un error de página . A continuación, se llama a una interrupción de error de página, que ejecuta la rutina de manejo de error de página.

Si el conjunto de trabajo de la página no cabe en la TLB, se produce un bloqueo de la TLB , en el que se producen frecuentes errores de TLB y cada página recién almacenada en caché desplaza a otra que se volverá a utilizar pronto, lo que degrada el rendimiento exactamente de la misma manera que lo hace el bloqueo de la caché de instrucciones o datos. El bloqueo de la TLB puede producirse incluso si no se produce el bloqueo de la caché de instrucciones o de datos , porque se almacenan en caché en unidades de tamaño diferente. Las instrucciones y los datos se almacenan en caché en bloques pequeños ( 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, el conjunto de trabajo de direcciones virtuales puede no caber en la TLB, lo que provoca el bloqueo de la TLB. Por lo tanto, el tamaño 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 se fragmentan en varias páginas.

Múltiples TLB

De manera similar a las cachés, las TLB pueden tener múltiples niveles. Las CPU pueden estar (y hoy en día generalmente lo están) construidas con múltiples 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 TLB de instrucciones (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 usando asociatividad de cuatro vías y 14 entradas completamente asociativas para páginas de 2/4 MiB (ambas partes del ITLB divididas estáticamente entre dos subprocesos) [7] y un TLB L2 unificado de 512 entradas para páginas de 4 KiB, [8] ambos asociativos de 4 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 TLB para páginas de 1 GiB de aquellas para páginas de 4 KiB/2 MiB. [10]

Manejo de fallas de TLB

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

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 de Itanium ofrece la opción de utilizar TLB gestionados por software o hardware. [15]

La arquitectura Alpha tiene una TLB administrada por firmware, y el código de manejo de errores de la TLB se encuentra en PALcode , en lugar de en el sistema operativo. Como el PALcode de 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 necesidad de que el formato de la TLB y las instrucciones para controlar la TLB sean especificados por la arquitectura. [16]

TLB típico

Estos son los 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 acceso en ciclos. Si un acceso a TLB toma 1 ciclo de reloj, un error toma 30 ciclos de reloj, una lectura de memoria toma 30 ciclos de reloj y la tasa de errores es del 1%, la tasa de ciclo de memoria efectiva es un promedio de (31,29 ciclos de reloj por acceso a 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 de la TLB pueden volverse inválidas, ya que la asignación de virtual a físico es diferente. La estrategia más simple para lidiar con esto es vaciar completamente la TLB. Esto significa que después de un cambio, la TLB está vacía y cualquier referencia de memoria será un error, por lo que pasará algún tiempo antes de que las cosas vuelvan a funcionar a toda velocidad. Las CPU más nuevas utilizan estrategias más efectivas para marcar a qué proceso corresponde una entrada. Esto significa que si un segundo proceso se ejecuta solo por un corto tiempo y salta de nuevo a un primer proceso, la TLB puede tener aún entradas válidas, ahorrando el tiempo para volver a cargarlas. [19]

Otras estrategias evitan vaciar la TLB en un cambio de contexto: (a) Un sistema operativo con un solo espacio de direcciones utiliza la misma asignación de virtual a físico para todos los procesos. (b) Algunas CPU tienen un registro de identificación de proceso y el hardware utiliza entradas de TLB solo si coinciden con la identificación del proceso actual.

Por ejemplo, en el Alpha 21264 , cada entrada de TLB está etiquetada con un número de espacio de dirección (ASN), y solo las entradas de TLB con un ASN que coincida con la tarea actual se consideran válidas. Otro ejemplo en el Intel Pentium Pro , la bandera de habilitación global de página (PGE) en el registro CR4 y la bandera global (G) de una entrada de directorio de páginas o tabla de páginas se pueden usar para evitar que las páginas utilizadas con frecuencia se invaliden automáticamente en las TLB en un cambio de tarea o una carga de registro CR3. Desde la microarquitectura Westmere 2010, los procesadores Intel 64 también admiten identificadores de contexto de proceso (PCID) de 12 bits , que permiten retener entradas de TLB para múltiples espacios de direcciones lineales, y solo se usan para la traducción de direcciones aquellas que coinciden 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 en Intel 80386 ) es el vaciado completo de la TLB en un conmutador de espacio de direcciones. Otras TLB de hardware (por ejemplo, la TLB en Intel 80486 y procesadores x86 posteriores, y la TLB en procesadores ARM ) permiten el vaciado de entradas individuales de la TLB indexadas por dirección virtual.

El vaciado de la TLB puede ser un mecanismo de seguridad importante para el aislamiento de la memoria entre procesos, con el fin de 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 las conmutaciones entre el proceso del núcleo del sistema operativo privilegiado y los procesos del usuario, como se puso de relieve en 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 vaciados de la TLB que afectan al rendimiento y se benefician en gran medida 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 han hecho 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 las TLB x86 no están asociadas con un espacio de direcciones en particular; implícitamente hacen referencia 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 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 de la TLB y el vaciado de la TLB es muy costoso, especialmente porque la TLB x86 está diseñada para operar con una latencia muy baja y completamente en hardware. En 2008, tanto Intel ( Nehalem ) [25] como AMD ( SVM ) [26] han introducido 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 espacios de direcciones utilizados 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 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. INC. ISBN 978-0-470-12872-5.{{cite book}}: CS1 maint: 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". 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.
  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 . 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 sobre arquitectura y diseño de computadoras). Morgan Kaufmann Publishers Inc., 2005.
  12. ^ Welsh, 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 error 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 > Buffer de búsqueda de traducción.
  16. ^ Compaq Computer Corporation . 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 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}}: Mantenimiento de CS1: ubicación ( enlace )
  18. ^ "Buffer 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 Arrives". 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 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 y 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: compatibilidad de hardware para una virtualización eficiente de procesadores". 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 .

Enlaces externos