2016-11-18 1 views
0

Die folgende Frage lautet: Angenommen, eine CPU gibt einen Lesevorgang für einen Befehl aus, und dieser Lesevorgang verursacht keinen Seitenfehler. Angenommen, die MMU verwendet einen TLB für die Adressumsetzung und es gibt eine einzelne Seitentabelle. Wie hoch ist die maximale Anzahl von Cache-Fehlern, die während des gesamten Prozesses der Übersetzung der virtuellen Adresse in eine physikalische Adresse und des Abrufs der Anweisung auftreten können? (Angenommen, es gibt nur einen Level-1-Cache für den DRAM.)Wie kann die maximale Anzahl von Cache-Fehlern ermittelt werden, die bei der Übersetzung von virtuellen in physische Adressen auftreten?

Ich verstehe, dass der TLB verwendet wird, um die großen Folgekosten des Abrufs aus dem Speicher zu reduzieren, aber ich verstehe den virtuellen Speicher nicht genug in der Lage sein, diese Frage zu beantworten - ich bin mir auch bewusst, dass TLB-Fehler selten sind. Wie auch immer, ich würde es schätzen, wenn mir jemand helfen könnte, dieses Problem zu verstehen.

Vielen Dank im Voraus!

Antwort

0

Der TLB speichert Seitentabelleneinträge. Ein TLB-Miss bedeutet, dass eine Übersetzung in der Seitentabelle gesucht werden muss.

Die CPU hat die physikalische Adresse der Seitentabelle der obersten Ebene, daher sind keine Übersetzungen mehr erforderlich. (Das würde zu einem Huhn-und-Ei-Problem führen).

Angenommen, die Seitenumgangs-Hardware (oder Software-TLB-Miss-Handler) greift über die Cachehierarchie auf die Seitentabelle zu (was beispielsweise bei modernen x86-CPUs der Fall ist), muss jeder Zugriff gefunden werden das rechte PTE kann im Datencache fehlen.

Seitentabellen sind normalerweise mehrstufige Datenstrukturen, z. 3 oder 4 Level tief auf x86.

Beachten Sie, dass echte CPU-Designs Seitenverzeichniseinträge innerhalb der TLB-Miss-Handling-Hardware, getrennt von den Datencaches, zwischenspeichern können.

1

Ich meine, wenn Sie ein Worst-Case-Szenario auf einer Plattform mit 4-Level-Seitentabellen wollen, denke ich, es ist etwa 10 für eine Split-Last, die zwei Seiten kreuzt, das ist 1 + 1 + 4 + 4. Das ist 1 für die tatsächliche Belastung jeder der beiden Cache-Zeilen berührt die Last, und für jede Ebene der Seitentabelle muß die CPU 4 laufen, mal 2 Wege, da zwei Seiten berührt werden.

Sie können auch in die Seitentabellenstruktur schauen - vielleicht gibt es Szenarien, in denen Sie mehr als einen Fehltreffer pro Stufe bekommen können, zB wenn die Paging-Strukturen selbst falsch ausgerichtet sind oder wenn irgendeine Art von Suche stattfindet an der Übersetzung beteiligt (und nicht direkt nachschlagen). Es gibt wahrscheinlich andere Gründe, warum Sie noch mehr Cache-Fehler erleiden könnten.

Es wäre sehr schwierig, eine Situation zu organisieren, in der Sie viele Fehlschüsse erleiden, da selbst wenn Sie die TLBs vollständig besiegen, die höheren PTEs in einer bestimmten Ebene des Caches auftreten oder die CPU sie intern zwischenspeichern kann (in einem nicht-architektonischen Cache).

Verwandte Themen