Wenn auf einem Mikroprozessor mit Hardware-TLB-Verwaltung (z. )?
Ja, soweit ich das beurteilen kann, durchlaufen diese Off-Chip-Speicherzugriffe auf Intel x86-64-Prozessoren, wenn ein TLB-Fehler auftritt und der Prozessor die Seitentabelle durchläuft, diese Off-Chip-Speicherzugriffe durch die Cache-Hierarchie.
Ein paar Details sind mir noch ein wenig unklar, und ich hoffe, dass eine andere Antwort sie ausfüllen wird – gibt es nicht ein Intel- oder AMD-Handbuch, das den Seitengang in qualvollen Details beschreibt? Mein Verständnis ist folgendes:
Das Diagramm auf Seite 2 von Thomas W. Barr, Alan L. Cox, Scott Rixner. "Translation Caching: Skip, Don't Walk (the Page Table)" , das eine Linie zieht zwischen "Einträge, die vom MMU-Cache gespeichert werden" und "Einträge, die vom L2-Datencache gespeichert werden". (Dies kann ein nützliches Papier für Leute sein , die neue CPUs entwerfen , was völlig zum Thema "Elektronikdesign" gehört).
Stéphane Eranian und David Mosberger. „Virtueller Speicher im IA-64-Linux-Kernel“ und Ulrich Drepper. "Was jeder Programmierer über Speicher wissen sollte" (Dies könnte ein nützliches Papier für Leute sein, die Betriebssysteme schreiben, die sich mit der IA-64-Seitentabelle befassen, die für ED etwas off-topic ist -- vielleicht Stack Overflow mit dem "operating- system"-Tag oder das "osdev"-Tag oder das OSDev.org-Wiki wäre ein besserer Ort für dieses Thema).
Tabelle A-10 auf Seite 533 von Intel. "Intel® 64 and IA-32 Architectures Software Developer's Manual" "PAGE_WALKS.CYCLES ... kann darauf hinweisen, ob die meisten Page-Walks von den Caches erfüllt werden oder einen L2-Cache-Miss verursachen."
invlpg
das TLB-Caching für eine bestimmte Virt-Adresse ungültig zu machen. Wenn der HW-Pagewalk keinen Eintrag für diese virtuelle Adresse findet oder die Berechtigungen des Eintrags den Zugriff nicht zulassen, erhalten Sie eine #PF
Ausnahme. Das Betriebssystem handhabt dies, indem es die Seitentabelle aktualisiert (möglicherweise nach dem Einlagern von Daten von der Festplatte oder Copy-on-Write) und dann fortsetzt, damit das fehlerhafte Laden/Speichern erneut ausgeführt wird und der HW-Pagewalk erfolgreich ist.Ich stimme eher zu, dass dies in einen Stapelaustausch für Computerarchitekturen gehört, nicht in einen Austausch von Elektronikstapeln, aber da dies hier ist:
@davidcary hat recht.
Einige Geschichten:
Intel x86 Page Table Walks wurden NICHT bis zu P5, auch bekannt als Pentium, zwischengespeichert. Genauer gesagt wurden die Zugriffe auf den Page Table Walk-Speicher nicht zwischengespeichert, sondern der Cache umgangen. Da die meisten Maschinen bis zu diesem Zeitpunkt Write-Through waren, erhielten sie Werte, die mit dem Cache konsistent waren. Aber sie haben die Caches nicht ausspioniert.
P6, auch bekannt als Pentium Pro, und AFAIK allen nachfolgenden Prozessoren war es erlaubt, auf den Cache zuzugreifen und einen aus dem Cache gezogenen Wert zu verwenden. Daher arbeiteten sie mit Write-Back-Caches. (Sie könnten die Seitentabellen natürlich in nicht zwischenspeicherbaren Speicher platzieren, der z. B. durch die MTRRs definiert ist. Dies ist jedoch ein großer Leistungsverlust, obwohl es zum Debuggen von Betriebssystemen nützlich sein kann.)
Übrigens ist dieses "Zugriffe auf den Seitentabellendurchgangsspeicher können auf die Daten-Caches zugreifen" getrennt von "Seitentabelleneinträge können in einem TLB-Ttranslation-Lookaside-Puffer gespeichert (cachegespeichert) werden". Auf manchen Rechnern wird der TLB als „Übersetzungscache“ bezeichnet.
Ein weiteres damit zusammenhängendes Problem besteht darin, dass innere Knoten der Seitentabellen in noch mehr TLB-ähnlichen Datenstrukturen, z. B. dem PDE-Cache, zwischengespeichert werden können.
Ein wesentlicher Unterschied: Der Datencache ist kohärent und wird ausspioniert. Aber die TLB- und PDE-Caches werden nicht snooped, dh sind nicht kohärent. Das Fazit ist, dass, da die Seitentabellen in nicht kohärenten TLBs und PDE-Caches usw. zwischengespeichert werden können, die Software explizit entweder einzelne Einträge oder Massengruppen (wie den gesamten TLB) löschen muss, wenn Seitentabelleneinträge, die dies gewesen sein könnten, explizit gelöscht werden zwischengespeichert werden geändert. Zumindest wenn auf "gefährliche" Weise geändert, von RW->R->I gewechselt oder Adressen geändert werden.
Ich denke, es ist fair zu sagen, dass jedes Mal, wenn eine neue Art von nicht kohärentem TLB-ähnlichem Caching hinzugefügt wurde, ein Betriebssystem kaputt gegangen ist, weil es implizit angenommen hatte, dass dies nicht getan wurde.
Leon Heller
Olin Lathrop
davidcary
Kortuk