Was ist TLB-Abschuss?

74

Was ist ein TLB-Shootdown in SMPs?

Ich kann nicht viele Informationen zu diesem Konzept finden. Jedes gute Beispiel wäre sehr dankbar.

mousey
quelle
1
Ist das eine Programmierfrage?
Gabe
@Gabe, ich denke, es ist eine Programmierfrage, wenn @mousey versucht, einen Kernel zu implementieren. Eine Klarstellung von seiner Seite wäre sehr dankbar.
Carl Norum
3
Ja, ich versuche einen Kernel zu implementieren.
Mousey
30
Die ständigen dogmatischen Versuche, die Programmierung von den Systemkonzepten zu trennen, sind ein grundlegender Fehler von Stackoverflow. Der Name der Site ist ein Systemkonzept. Wenn Sie ein Systemprogrammierer sind, können Sie diese Konzepte nicht von dem Code trennen, der sie steuert. Wir sollten aufhören, das zu versuchen.
GL2014

Antworten:

69

Ein kurzes Beispiel:

  1. Sie haben Speicher, der von allen Prozessoren in Ihrem System gemeinsam genutzt wird.

  2. Einer Ihrer Prozessoren beschränkt den Zugriff auf eine Seite dieses gemeinsam genutzten Speichers.

  3. Jetzt müssen alle Prozessoren ihre TLBs leeren, damit diejenigen, die auf diese Seite zugreifen durften, dies nicht mehr können.

Die Aktionen eines Prozessors, die bewirken, dass die TLBs auf anderen Prozessoren geleert werden, werden als TLB-Shootdown bezeichnet.

Carl Norum
quelle
104

Ein TLB (Translation Lookaside Buffer) ist ein Cache der Übersetzungen von virtuellen Speicheradressen zu physischen Speicheradressen. Wenn ein Prozessor die Zuordnung einer Adresse von virtuell zu physisch ändert, muss er die anderen Prozessoren anweisen, diese Zuordnung in ihren Caches ungültig zu machen.

Dieser Vorgang wird als "TLB-Abschuss" bezeichnet.

Gabe
quelle
11

Ich denke, die Frage erfordert eine detailliertere Antwort.

Seitentabelle : Eine Datenstruktur, in der die Zuordnung zwischen virtuellem Speicher (Software) und physischem Speicher (Hardware) gespeichert ist.

Die Seitentabelle kann jedoch sehr groß sein und das Durchlaufen der Seitentabelle (um die entsprechende physische Adresse der virtuellen Adresse zu finden) kann ein zeitaufwändiger Prozess sein. Um diesen Prozess zu beschleunigen, wird ein Cache namens TLB (Translation Lookaside Buffer) verwendet, in dem die Adressen des virtuellen Speichers gespeichert sind, auf die kürzlich zugegriffen wurde.

Wie deutlich zu sehen ist, müssen die TLB-Einträge jederzeit mit den jeweiligen Seitentabelleneinträgen synchron sein . Jetzt sind die TLBs ein Pro-Core-Cache, dh. Jeder Kern hat seinen eigenen TLB.

Immer wenn ein Seitentabelleneintrag von einem der Kerne geändert wird, wird dieser bestimmte TLB-Eintrag in allen Kernen ungültig. Dieser Vorgang wird als TLB-Abschuss bezeichnet.

Das TLB-Leeren kann durch verschiedene virtuelle Speicheroperationen ausgelöst werden, die die Seitentabelleneinträge wie Seitenmigration, Freigeben von Seiten usw. ändern.

Koda
quelle
3
Dieser bestimmte TLB-Eintrag wird in allen Kernen vom Betriebssystem ungültig gemacht . Die Hardware tut dies nicht automatisch. Der Kernel muss Interprozessor-Interrupts senden oder den Kernel auf anderen Kernen auf andere Weise signalisieren, wenn derzeit Aufgaben ausgeführt werden, die die gerade geänderte Seitentabelle verwenden. Aber x86 führt zumindest kein negatives Caching durch, sodass für die Zuordnung eines neuen Speichers (Ändern eines PTE von ungültig zu gültig) keine invlpgAnweisungen ausgeführt werden müssen. Das erneute Zuordnen oder Aufheben der Zuordnung muss ungültig gemacht werden, um zu verhindern, dass Kerne den nicht mehr gültigen TLB-Eintrag verwenden.
Peter Cordes