En un microprocesador con administración de TLB de hardware (por ejemplo, un Intel x86-64), si se produce una falla de TLB y el procesador está recorriendo la tabla de páginas, ¿estos accesos a la memoria (fuera del chip) pasan por la jerarquía de caché (L1, L2, etc.) )?
Sí, por lo que puedo decir, en los procesadores Intel x86-64, cuando se produce una falla de TLB y el procesador está recorriendo la tabla de páginas, esos accesos a la 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 la página con detalles insoportables? Mi entendimiento es que:
El diagrama de la página 2 de Thomas W. Barr, Alan L. Cox, Scott Rixner. "Almacenamiento en caché de traducción: omitir, no caminar (la tabla de página)" que traza una línea entre "Entradas almacenadas por caché de 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 de "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 ED, tal vez Stack Overflow con el "operativo- system" o la etiqueta "osdev" o la wiki de OSDev.org sería un mejor lugar para ese tema).
Tabla A-10 en la página 533 de Intel. "Manual del desarrollador de software de las arquitecturas Intel® 64 e IA-32" "PAGE_WALKS.CYCLES... puede indicar si la mayoría de los paseos por la página se satisfacen con las memorias caché o provocan una pérdida de la memoria caché L2".
invlpg
invalidar cualquier almacenamiento en caché de TLB para una dirección virtual dada. Si la página de HW no encuentra una entrada para esa dirección virtual, o si los permisos de la entrada no permiten el acceso, obtendrá una #PF
excepció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 reanudar para que la carga/almacenamiento fallida se vuelva a ejecutar y la página HW se realice correctamente.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 tiene razón.
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 a la memoria de paseo de la tabla de páginas no se almacenaron en caché, se omitieron el caché. Dado que la mayoría de las máquinas hasta ese momento eran de escritura directa, recibieron valores consistentes con el caché. Pero no fisgonearon los cachés.
P6, también conocido como Pentium Pro, y AFAIK, todos los recorridos de la tabla de páginas 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 una 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 "los accesos a la memoria de recorrido de la tabla de páginas pueden acceder a los cachés de datos" es independiente de "las entradas de la tabla de páginas pueden almacenarse (almacenarse en caché) en un búfer de búsqueda de traducción TLB)". En algunas máquinas, la 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, la memoria caché PDE.
Una diferencia clave: la memoria caché de datos es coherente y espiada. Pero las memorias caché TLB y PDE no están espiadas, es decir, no son coherentes. La conclusión es que, dado que las tablas de páginas pueden almacenarse en caché en cachés TLB y PDE no coherentes, 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 que pueden haber sido tan almacenados en caché se modifican. 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é similar a TLB no coherente, algún sistema operativo se rompe, porque tenía suposiciones implícitas de que esto no se estaba haciendo.
leon heller
olin lathrop
davidcary
Kortuk