¿Se guardan en caché los paseos de la tabla de páginas?


12

En un microprocesador con gestión de TLB de hardware (por ejemplo, un Intel x86-64) si se produce un error de TLB y el procesador está caminando por la tabla de páginas, ¿estos accesos de memoria (fuera del chip) pasan por la jerarquía de caché (L1, L2, etc.) )?


Nada que ver con el diseño electrónico. La pregunta será cerrada.
Leon Heller

8
Se pregunta cómo funciona un chip en particular, así que creo que está en el tema.
Olin Lathrop

55
@OlinLathrop: Estoy de acuerdo: creo que los detalles de bajo nivel de un circuito integrado están en el tema.
davidcary

Tengo que estar de acuerdo, por lo menos, depurar la función de nuestros procesadores es un paso importante para lograr que se diseñe un sistema decentemente determinista. Esto se está acercando a uno de nuestros límites, pero parece fuertemente adentro.
Kortuk

Respuestas:


8

Sí, por lo que puedo decir, en los procesadores Intel x86-64, cuando ocurre una falla TLB y el procesador está caminando en la tabla de páginas, esos accesos de memoria fuera del chip pasan por la jerarquía de caché.

Todavía estoy un poco confuso con algunos detalles, y espero que alguna otra respuesta los complete, ¿no hay un manual de Intel o AMD que describa el recorrido de la página con detalles insoportables? Entiendo que:

  • La dirección virtual en algunos registros de direcciones se transfiere primero a un TLB rápido para convertirse en una dirección física: la dirección en la PC se transfiere al L1 ITLB, la dirección en cualquier otro registro se transfiere al L1 DTLB .
  • Si esa primera búsqueda falla, hay otro nivel de TLB más lento y más grande que se intenta. (¿Es este L2 TLB dividido en un ITLB y un DTLB también, o es un caché TLB unificado? ¿Hay más niveles de TLB - L3? L4?)
  • Si la búsqueda de TLB falla por completo y se deshabilita el walker x86 y x86-64 VHPT, la CPU señala una falla de TLB, que es interceptada por el núcleo del sistema operativo. Tengo entendido que prácticamente todas las CPU que no son x86 hacen lo mismo: manejar las fallas de TLB por completo en el software. Si está habilitado, los procesadores x86 y x86-64 tienen un andador de tabla VHPT asistido por hardware que maneja los siguientes pasos. (¿Los chips x86 y x86-64 tienen un bit que deshabilita completamente VHPT, o hay muchos bits que pueden habilitar VHPT para algunos rangos de direcciones y deshabilitar VHPT para otros rangos de direcciones? ¿Dónde están ubicados esos bits?)
  • Si la búsqueda de TLB falla por completo, la dirección virtual original (probablemente en modo de usuario) V1 se convierte en V2, la dirección virtual de la entrada de tabla de páginas PTE que contiene el número de página física para V1.
  • Debido a que V2 es nuevamente una dirección virtual, la CPU pasa por la traducción normal de la dirección virtual a la física, excepto que omite L1 y va directamente a L2.
  • El hardware busca la dirección virtual V2 en el TLB en paralelo con la obtención de ese PTE del caché L2 (prácticamente indexado).
  • Como V2 no es la dirección de una instrucción, no pasa por el caché de instrucciones L1; y debido a que V2 no es la dirección de los datos normales del usuario, no pasa por el caché de datos L1. V2 se alimenta inicialmente a la caché unificada L2 (una instrucción unificada + datos + caché PTE). Vea el "ejemplo de jerarquía de caché" .
  • Si el caché L2 (o L3 o cualquier otro caché virtualmente indexado) contiene el PTE, entonces el VHPT recupera el PTE de la memoria caché e instala el PTE para V1 en el TLB, y la dirección física en ese PTE se utiliza para traducir el PTE. dirección virtual original V1 en la dirección RAM física, eventualmente obteniendo esos datos o instrucciones completamente en hardware sin ninguna ayuda del sistema operativo.
  • Si todos los niveles de caché virtualmente indexada fallan, pero esta segunda búsqueda de TLB tiene éxito para V2, entonces el VHPT obtiene el PTE de la caché indexada físicamente o de la memoria principal, instala el PTE para V1 en el TLB y la dirección física en ese PTE se utiliza para traducir la dirección virtual original V1 a la dirección RAM física, y finalmente obtiene esos datos o instrucciones completamente en hardware sin ninguna ayuda del sistema operativo.
  • Si esta segunda búsqueda de TLB falla, el caminante VHPT de hardware se da por vencido con un FALLO DE TRADUCCIÓN VHPT.
  • Cuando se produce un FALLO DE TRADUCCIÓN VHPT, la CPU atrapa el sistema operativo. El sistema operativo tiene que descubrir qué salió mal y arreglar las cosas:
  • (a) tal vez la página que contiene V2 está actualmente cambiada al disco, por lo que el sistema operativo la lee en la RAM y reinicia la instrucción fallida, o
  • (b) quizás un programa con errores está intentando leer o escribir o ejecutar alguna ubicación no válida, y el sistema operativo finaliza el proceso, o
  • (c) una variedad de otros trucos que hacen los escritores del sistema operativo para usar este mecanismo para atrapar varios tipos de acceso: cargue la página que contiene V1 que puede intercambiarse al disco; varias trampas utilizadas para depurar nuevos programas; simular "W ^ X" en CPU que no lo admiten directamente; para apoyar la copia en escritura; etc.

El diagrama en la página 2 de Thomas W. Barr, Alan L. Cox, Scott Rixner. "Almacenamiento en caché de traducción: Saltar, no caminar (la tabla de páginas)" que dibuja una línea entre "Entradas almacenadas por caché MMU" y "entradas almacenadas por caché de datos L2". (Este puede ser un documento útil para las personas que diseñan nuevas CPU , que es totalmente sobre el tema del "diseño electrónico").

Stephane Eranian y David Mosberger. "Memoria virtual en el kernel de Linux IA-64" y Ulrich Drepper. "Lo que todo programador debe saber sobre la memoria" (Este puede ser un documento útil para las personas que escriben sistemas operativos que se ocupan de la tabla de páginas IA-64, que está un poco fuera de tema para la disfunción eréctil, tal vez Stack Overflow con el "funcionamiento- la "etiqueta del sistema" o la etiqueta "osdev" o el wiki de OSDev.org sería un mejor lugar para ese tema).

Tabla A-10 en la página 533 de Intel. El "Manual del desarrollador de software de las arquitecturas Intel® 64 e IA-32" "PAGE_WALKS.CYCLES ... puede indicar si la mayoría de los recorridos de página están satisfechos por los cachés o si se produce una pérdida de caché L2".


Me encanta la respuesta, pero probablemente soy uno de los muchos que no tienen la experiencia necesaria para sentirme cómodo dando lo que probablemente sea un voto bien merecido. Como otros expertos verifican, le daré el representante que ya ganó.
Kortuk

No creo que esto sea correcto. La viñeta 1 + 2 sobre la búsqueda de TLB es correcta AFAICT, pero 3 no lo es. Las tablas de páginas en x86 (o x86-64) no se manejan en software (se aplica una excepción, ver más adelante) sino en hardware. Es decir, cuando la CPU determina que no puede resolver la dirección usando TLB, recorrerá las tablas de páginas comenzando en la tabla señalada por el registro CR3. Solo si esta resolución no tiene éxito, invocará el controlador de fallas de página de la CPU. La excepción son las extensiones de virtualización donde, en ciertos modos, el hipervisor resolverá un error de página que ocurra en el invitado.
Morty

No creo que x86 tenga una manera de hacer actualizaciones de software TLB. Los ISA que permiten el manejo de TLB flexible tienen instrucciones especiales para que SW modifique las entradas de TLB, pero no creo que x86 tenga eso, aparte de invlpginvalidar el almacenamiento en caché de TLB para un determinado controlador de virt. Si la página de HW no encuentra una entrada para esa dirección virtual, o los permisos de la entrada no permiten el acceso, obtendrá una #PFexcepción. El sistema operativo maneja eso actualizando la tabla de páginas (posiblemente después de paginar los datos del disco, o haciendo una copia en escritura), y luego reanuda para que la carga / almacenamiento con fallas se vuelva a ejecutar y la caminata HW tenga éxito.
Peter Cordes


4

Tiendo a estar de acuerdo en que esto pertenece a un intercambio de pila de arquitectura de computadora, no a un intercambio de pila de electrónica, pero dado que esto está aquí:

@davidcary es correcto.

Algo de historia:

Los recorridos de la tabla de páginas Intel x86 NO se almacenaron en caché hasta P5, también conocido como Pentium. Más precisamente, los accesos de memoria de la tabla de la página no se almacenaron en caché, omitieron el caché. Como la mayoría de las máquinas hasta ese momento eran de escritura, recibieron valores consistentes con el caché. Pero no husmearon los escondites.

P6, también conocido como Pentium Pro, y AFAIK, todos los pasos de la tabla de la página de procesadores posteriores pudieron acceder al caché y usar un valor extraído del caché. Por lo tanto, trabajaron con cachés de reescritura. (Por supuesto, podría colocar las tablas de páginas en la memoria no almacenable en caché, definida, por ejemplo, por los MTRR. Pero eso es una gran pérdida de rendimiento, aunque puede ser útil para depurar sistemas operativos).

Por cierto, este "acceso a la memoria de recorrido de la tabla de páginas puede acceder a los cachés de datos" es independiente de "las entradas de la tabla de páginas se pueden almacenar (almacenar en caché) en un TLB Ttranslation Lookaside Buffer". En algunas máquinas, el TLB se denomina "caché de traducción".

Otro problema relacionado es que los nodos interiores de las tablas de páginas pueden almacenarse en caché en estructuras de datos aún más similares a TLB, por ejemplo, el caché PDE.

Una diferencia clave: la memoria caché de datos es coherente y se espía. Pero los cachés TLB y PDE no son indagados, es decir, no son coherentes. La conclusión es que, dado que las tablas de páginas pueden almacenarse en caché en TLB no coherentes y cachés PDE, etc., el software debe eliminar explícitamente las entradas individuales o los grupos masivos (como el TLB completo), cuando las entradas de la tabla de páginas pueden haber sido tan en caché se cambian. Al menos cuando se cambia de forma "peligrosa", pasando de RW-> R-> I, o cambiando de dirección.

Creo que es justo decir que cada vez que se agrega un nuevo tipo de almacenamiento en caché no coherente similar a TLB, algunos sistemas operativos se rompen, porque tenía suposiciones implícitas de que esto no se estaba haciendo.


Una nueva comp. arco. Esta propuesta comenzó hace apenas "3 meses". Creo que hubo uno anterior que nunca logró salir del área51 (¿no hay suficientes seguidores?).
Paul A. Clayton
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.