Sur un microprocesseur avec gestion matérielle TLB (disons un Intel x86-64) si un échec TLB se produit et que le processeur parcourt la table des pages, ces accès mémoire (hors puce) passent-ils par la hiérarchie du cache (L1, L2, etc. )?
Sur un microprocesseur avec gestion matérielle TLB (disons un Intel x86-64) si un échec TLB se produit et que le processeur parcourt la table des pages, ces accès mémoire (hors puce) passent-ils par la hiérarchie du cache (L1, L2, etc. )?
Réponses:
Oui, pour autant que je sache, sur les processeurs Intel x86-64, lorsqu'un échec TLB se produit et que le processeur parcourt la table des pages, ces accès à la mémoire hors puce passent par la hiérarchie du cache.
Je suis encore un peu flou sur quelques détails, et j'espère qu'une autre réponse les remplira - n'y a-t-il pas un manuel Intel ou AMD qui décrit la marche de la page dans des détails atroces? Ma compréhension est que:
Le diagramme à la page 2 de Thomas W. Barr, Alan L. Cox, Scott Rixner. "Mise en cache de la traduction: sauter, ne pas marcher (la table des pages)" qui trace une ligne entre "les entrées stockées par le cache MMU" et "les entrées stockées par le cache de données L2". (Cela peut être un document utile pour les personnes qui conçoivent de nouveaux processeurs , qui est totalement sur le thème de la "conception électronique").
Stéphane Eranian et David Mosberger. "Mémoire virtuelle dans le noyau Linux IA-64" et Ulrich Drepper. "Ce que tout programmeur doit savoir sur la mémoire" (cela peut être un document utile pour les personnes qui écrivent des systèmes d'exploitation qui traitent de la table de pages IA-64, ce qui est un peu hors sujet pour ED - peut-être Stack Overflow avec le "fonctionnement-" système " ou la balise " osdev " ou le wiki OSDev.org serait un meilleur endroit pour ce sujet).
Tableau A-10 à la page 533 d'Intel. "Manuel du développeur de logiciels d'architectures Intel® 64 et IA-32" "PAGE_WALKS.CYCLES ... peut indiquer si la plupart des parcours de page sont satisfaits par les caches ou provoquent un échec de cache L2."
invlpg
à part invalider la mise en cache TLB pour un addr virt donné. Si la promenade de page HW ne trouve pas d'entrée pour cette adresse virtuelle, ou si les autorisations de l'entrée ne permettent pas l'accès, vous obtenez une #PF
exception. Le système d'exploitation gère cela en mettant à jour la table des pages (peut-être après avoir paginé les données du disque ou fait une copie sur écriture), puis en reprenant de sorte que le chargement / magasin défaillant se réexécute et que la page HW réussisse.
J'ai tendance à convenir que cela appartient à un échange de pile d'architecture informatique, pas à un échange de pile électronique, mais puisque c'est ici:
@davidcary est correct.
Un peu d'histoire:
Les parcours de table des pages Intel x86 n'étaient PAS mis en cache jusqu'à P5, alias Pentium. Plus précisément, les accès à la mémoire de marche de la table des pages n'étaient pas mis en cache, contournaient le cache. Étant donné que la plupart des machines jusque-là étaient en écriture, elles ont reçu des valeurs cohérentes avec le cache. Mais ils n'ont pas fouillé les caches.
P6, alias Pentium Pro, et AFAIK, toutes les marches de table de page de processeurs suivantes ont été autorisées à accéder au cache et à utiliser une valeur extraite du cache. Ainsi, ils ont travaillé avec des caches de réécriture. (Vous pouvez bien sûr placer les tables de pages dans une mémoire non mise en cache, définie par exemple par les MTRR. Mais c'est une grosse perte de performances, bien qu'elle puisse être utile pour le débogage de systèmes d'exploitation.)
Soit dit en passant, cet «accès à la mémoire de parcours de table de pages peut accéder aux caches de données» est distinct de «les entrées de table de page peuvent être stockées (mises en cache) dans un tampon TLB Ttranslation Lookaside). Sur certaines machines, le TLB est appelé "Cache de traduction".
Un autre problème connexe est que les nœuds intérieurs des tables de pages peuvent être mis en cache dans des infrastructures de type TLB encore plus, par exemple le cache PDE.
Une différence clé: le cache de données est cohérent et espionné. Mais les caches TLB et PDE ne sont pas espionnés, c'est-à-dire qu'ils ne sont pas cohérents. L'essentiel est que, puisque les tables de pages peuvent être mises en cache dans des TLB non cohérents et des caches PDE, etc., le logiciel doit vider explicitement les entrées individuelles ou les groupes en vrac (comme l'ensemble du TLB), lorsque les entrées de table de pages qui peuvent avoir été ainsi mis en cache sont modifiés. Au moins lorsqu'il est modifié de manière "dangereuse", en passant de RW-> R-> I, ou en changeant d'adresse.
Je pense qu'il est juste de dire que chaque fois qu'un nouveau type de mise en cache non cohérente de type TLB a été ajouté, certains systèmes d'exploitation ont cassé, car ils supposaient implicitement que cela n'était pas fait.