Wenn bei einem Mikroprozessor mit Hardware - TLB - Verwaltung (z. B. Intel x86-64) ein TLB - Fehler auftritt und der Prozessor die Seitentabelle durchläuft, durchlaufen diese (chipexternen) Speicherzugriffe die Cache - Hierarchie (L1, L2 usw.) )?
Wenn bei einem Mikroprozessor mit Hardware - TLB - Verwaltung (z. B. Intel x86-64) ein TLB - Fehler auftritt und der Prozessor die Seitentabelle durchläuft, durchlaufen diese (chipexternen) Speicherzugriffe die Cache - Hierarchie (L1, L2 usw.) )?
Antworten:
Ja, soweit ich das beurteilen kann, werden bei Intel x86-64-Prozessoren die Speicherzugriffe außerhalb des Chips durch die Cache-Hierarchie geleitet, wenn ein TLB-Fehler auftritt und der Prozessor die Seitentabelle durchläuft.
Ich bin immer noch ein bisschen verwirrt in ein paar Details, und ich hoffe, eine andere Antwort wird sie ergänzen - gibt es nicht ein Intel- oder AMD-Handbuch, das den Seitenrundgang mit unglaublichen Details beschreibt? Mein Verständnis ist, dass:
Das Diagramm auf Seite 2 von Thomas W. Barr, Alan L. Cox und Scott Rixner. "Übersetzungs-Caching: Überspringen, nicht gehen (die Seitentabelle)" , mit der eine Linie zwischen "im MMU-Cache gespeicherten Einträgen" und "im L2-Daten-Cache gespeicherten Einträgen" gezogen wird. (Dies ist möglicherweise ein nützliches Dokument für Benutzer , die neue CPUs entwickeln. Dies ist ein Thema, das sich ausschließlich mit dem Thema "Elektronikdesign" befasst.)
Stephane Eranian und David Mosberger. "Virtueller Speicher im IA-64 Linux Kernel" und Ulrich Drepper. "Was jeder Programmierer über Speicher wissen sollte" (Dies ist möglicherweise ein nützliches Dokument für Leute, die Betriebssysteme schreiben, die sich mit der IA-64-Seitentabelle befassen, was für ED ein wenig unangebracht ist - vielleicht ein Stapelüberlauf mit dem "Betriebssystem". System "-Tag oder das " osdev "-Tag oder das OSDev.org-Wiki wären ein besserer Ort für dieses Thema.
Tabelle A-10 auf Seite 533 von Intel. "Intel® 64- und IA-32-Architekturen - Software-Entwicklerhandbuch" "PAGE_WALKS.CYCLES ... kann anzeigen, ob die meisten Page-Walks von den Caches befriedigt werden oder einen L2-Cache-Miss verursachen."
invlpg
zulässt , außer dass TLB-Caching für eine bestimmte virtuelle Adresse ungültig gemacht wird. 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 übernimmt dies, indem es die Seitentabelle aktualisiert (möglicherweise nach dem Einlagern von Daten von der Festplatte oder dem Kopieren beim Schreiben) und dann wieder aufnimmt, sodass das fehlerhafte Laden / Speichern erneut ausgeführt wird und HW-Pagewalk erfolgreich ausgeführt wird.
Ich stimme eher zu, dass dies in einer Computerarchitektur zu Stackexchange gehört, nicht zu einem Electronics Stackexchange, aber da dies hier ist:
@davidcary ist richtig.
Einige Geschichten:
Intel x86 Page Table Walks wurden NICHT bis zu P5, auch bekannt als Pentium, zwischengespeichert. Genauer gesagt wurden die Seitentabellen-Durchlaufspeicherzugriffe nicht zwischengespeichert, und der Cache wurde umgangen. Da die meisten Maschinen bis zu diesem Zeitpunkt durchgeschrieben wurden, erhielten sie Werte, die mit dem Cache übereinstimmen. Aber sie haben die Caches nicht beschnüffelt.
P6, auch bekannt als Pentium Pro, und AFAIK, alle nachfolgenden Prozessor-Seitentabellengänge, durften auf den Cache zugreifen und einen aus dem Cache abgerufenen Wert verwenden. Daher arbeiteten sie mit Write-Back-Caches. (Sie können die Seitentabellen natürlich in einem nicht zwischenspeicherbaren Speicher ablegen, der z. B. durch die MTRRs definiert wird. Dies ist jedoch ein großer Leistungsverlust, auch wenn dies beim Debuggen von Betriebssystemen hilfreich sein kann.)
Übrigens kann dieser "Seitentabellen-Durchlaufspeicherzugriff auf die Daten-Caches" getrennt von "Seitentabelleneinträgen können in einem TLB-Ttranslation-Lookaside-Puffer gespeichert (zwischengespeichert) werden". Auf einigen Computern wird der TLB als "Übersetzungs-Cache" bezeichnet.
Ein weiteres verwandtes 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 überwacht. Die TLB- und PDE-Caches werden jedoch nicht abgehört, dh sie sind nicht kohärent. Da die Seitentabellen in nicht kohärenten TLBs und PDE-Caches usw. zwischengespeichert werden können, muss die Software entweder einzelne Einträge oder Massengruppen (wie den gesamten TLB) explizit leeren, wenn dies bei Seitentabelleneinträgen der Fall war zwischengespeichert werden geändert. Zumindest, wenn es auf "gefährliche" Weise geändert wurde, von RW-> R-> I oder wenn Adressen geändert wurden.
Ich denke, das ist fair zu sagen, dass jedes Mal, wenn eine neue Art von nicht kohärentem TLB-ähnlichem Caching hinzugefügt wurde, einige Betriebssysteme kaputt gegangen sind, weil implizit davon ausgegangen wurde, dass dies nicht geschehen ist.