Ist es realistisch, eine vollständige Spectre-Korrektur in Zweigprädiktoren zukünftiger CPUs zu erwarten?

8

Kürzlich wurde beobachtet, dass zwei Zweige, die denselben Verzweigungsprädiktorzustand im selben Prozess oder sogar prozessübergreifend teilen, bestimmte Seitenkanal-Exploits (Spectre) ermöglichen.

Betrachten wir einen grundlegenden Verzweigungsprädiktor. Es hat 2 ^ 14 Slots und jeder Slot besteht aus zwei Bits (stark genommen, schwach genommen, schwach nicht genommen, stark nicht genommen). Die 14 Indexbits sind die niederwertigen Bits des Verzweigungsbefehls. Somit hat der Verzweigungsprädiktor 2 · 2 · 14 = 32768 Bits oder 4 Kilobyte.

Jetzt gibt es ein Problem: Beim Umschalten zwischen User Space-Prozessen wird der Verzweigungsprädiktorstatus nicht gelöscht. Dies kann durch Hinzufügen eines Verzweigungsprädiktor-Flush-Befehls behoben werden, der beim Ausführen von Kontextwechseln aktiv verwendet wird.

Es gibt noch ein anderes Problem: Zwei Zweige im selben Prozessadressraum können denselben Steckplatz gemeinsam nutzen. Wenn einer dieser Zweige nicht vertrauenswürdiger JIT-Code ist und der andere auf einem Bit eines geheimen Passworts verzweigt, sind wir in Schwierigkeiten. Dies könnte vermutlich durch Löschen des Verzweigungsprädiktorstatus behoben werden, bevor nicht vertrauenswürdiger JITed-Code ausgeführt wird. Wenn der Prozess den Verzweigungsprädiktor jedoch zu oft spült, gehen seine Vorteile verloren.

Es gibt jedoch eine allgemeinere Lösung (vorgeschlagen in /security/176678/is-branch-predictor-flush-instruction-a-complete-spectre-fix ): Speichern Sie zusätzlich zu 2 Bit die verbleibende Adressbits als Tag. Bei einer 32-Bit-Architektur wären es 32-14 = 18 Bit, bei einem 48-Bit-Adressraum in einer 64-Bit-Architektur 48-14 = 34 Bit. Dies würde den Verzweigungsprädiktorzustand auf 20 Bits oder 36 Bits anstelle von 2 Bits bringen und seine Größe mit 10 oder 18 multiplizieren.

Ist diese allgemeine Lösung realistisch? Es würde sicherlich mehr Transistoren im Zweigprädiktor erfordern. Aber ist der Verzweigungsprädiktor bereits zu groß oder so klein, dass seine Größe leicht mit dem erforderlichen Faktor multipliziert werden kann? Es könnte auch andere Vorteile geben, wie die Möglichkeit, den Verzweigungsprädiktor einfach 2-Wege-, 4-Wege- oder 8-Wege-Satzassoziativ zu machen, wie dies heutzutage bei CPU-Caches der Fall ist. Vielleicht sind die Vorteile der Satzassoziativität so groß, dass diese Art von allgemeinerer Lösung eingesetzt werden könnte?

PS: Es sollte wirklich einen CPU Microarchitecture Stack Exchange geben. Ich habe über Informationssicherheits-Stapelaustausch, Stapelüberlauf, Informatik-Stapelaustausch und Elektronik-Stapelaustausch nachgedacht und mich entschlossen, hier zu posten.

juhist
quelle
1
Der Raum ist reichlich vorhanden. Der L1-Cache befindet sich (/ befand sich früher) auf demselben Chip wie die CPU und nimmt viel Platz ein. Ich denke also, dass sich das 20-fache für die Erweiterung des Branch Predictor leisten könnte. (Die L2 zu meiner Zeit, jetzt L2 + L3, befand sich auf einem separaten Chip, der über den Backside-Bus angeschlossen war.) Aber ich glaube, es ist immer noch so, dass sie ein wenig L1 gegen eine große Erweiterung der Verzweigungsvorhersage und des Chips austauschen könnten Größe bleibt gleich. Dies zählt nicht einmal den Platz für den ROB und die Funktionseinheiten, die an der Registrierungsstation angebracht sind. Ich denke, es könnte getan werden.
Jonk
1
Ich denke, es gibt wenig Nachfrage nach einer Mikrocode-Site, angesichts all der Sprachen, die wir haben, selbst wenn es sich um Assembler handelt. Dies ist Intel Rasen und andere Chiphersteller. Außerhalb älterer Designs halten sie viele Details unter Verschluss.
Sparky256

Antworten:

1

Der Raum ist reichlich vorhanden. Der L1-Cache befindet sich (/ befand sich früher) auf demselben Chip wie die CPU und nimmt viel Platz ein. Ich denke also, dass sich das 20-fache für die Erweiterung des Branch Predictor leisten könnte. (Die L2 zu meiner Zeit, jetzt L2 + L3, befand sich auf einem separaten Chip, der über den Backside-Bus angeschlossen war.) Aber ich glaube, es ist immer noch so, dass sie ein wenig L1 gegen eine große Erweiterung der Verzweigungsvorhersage und des Chips austauschen könnten Größe bleibt gleich. Dies zählt nicht einmal den Platz für den ROB und die Funktionseinheiten, die an der Registrierungsstation angebracht sind. Ich denke, es könnte getan werden. - Jonk 5. Januar um 16:48 Uhr

RoyC
quelle