Frage

IA-32 definiert verschiedene Fälle, in denen die CPU die gesamte TLB ungültig machen kann. Beginnend mit den ASID-Erweiterungen, die AMD veröffentlicht in Opteron Rev-F-Prozessoren (Barcelona?) Gibt es Fälle, in denen nur die TLB-Einträge eines bestimmten ASID für ungültig erklärt werden.

Die Frage ist, ob die ASID sich immer gültig stoppen? Hat der Hypervisor zu überprüfen, ob ein ASID gilt es vor der Verwendung?

War es hilfreich?

Lösung

I denkt die Antwort 'nicht direkt' - auf der AMD-System-Programmierung suchen Beschreibung ist das ASID-Feld in dem VM-Steuerblock einfach ein (bis zu) 32-Bit-ID, die die Hypervisor-Sets auf einen eindeutigen Wert für jede Instanz einer VM, und als zusätzliches verwendet werden Tag in der TLB-Suche.

Wie Sie keine direkte Kontrolle über den TLB Inhalt auf x86 haben, können Sie nicht kontrollieren, was im TLB am Ende Einträge - wenn der Prozessor einen Eintrag in dem TLB hinzufügen entscheidet, wird der Eintrag mit dem aktuellen ASID markiert werden wird die per Definition gültig, wenn sie hinzugefügt.

Dies ist in einem etwas Umwegen im Abschnitt 15.15.1 der zuvor erwähnten Systemprogrammierung spec:

  

In Implementierungen, die selektiv nicht bieten eine Möglichkeit, um alle Übersetzungen einer einzelnen spezifizierten ASID, Software zu spülen effektiv den TLB-Einträge zu Gast spülen kann durch einen neuen ASID für den Gast Aufteilung und nicht die alte ASID, bis der gesamt TLB Wiederverwendung wurde gespült mindestens einmal.

Dies bedeutet, dass der Prozessor kein Konzept für gültig oder ungültig ASIDs hat - es ist nur eine Zahl deren aktuellen Wert muss einen TLB übereinstimmen Einträge ASID für den TLB zu treffen. Wenn also der Hypervisor nicht richtig ein ASID spülen, bevor er es wieder verwendet, erhalten Sie abgestanden TLB trifft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top