Spekulative Ausführung (englisch speculative execution) bedeutet, dass eine CPU Befehle bereits ausführt, bevor bewiesen ist, dass sie überhaupt benötigt werden. Die Ergebnisse werden zunächst nur zwischengespeichert und erst sichtbar, wenn sich die Spekulation als richtig erweist — andernfalls werden sie vollständig verworfen. Moderne Prozessoren verdanken dieser Technik einen Großteil ihrer Leistung, aber auch zwei der bekanntesten Sicherheitslücken der Computergeschichte.

Warum spekulieren?

Eine CPU arbeitet an einer Befehlspipeline entlang. Trifft sie auf einen Sprung, müsste sie ohne Spekulation warten, bis die Sprungvorhersage bestätigt ist — oft zehn oder mehr Takte. Statt zu warten, folgt sie der wahrscheinlichsten Vorhersage und füllt die Pipeline mit Befehlen des vermuteten Pfads. Liegt die Vorhersage richtig, ist die Wartezeit komplett eingespart; liegt sie falsch, wird der gesamte Zwischenstand verworfen und der richtige Pfad neu geladen.

Wie der Rückzieher funktioniert

Damit spekulative Ergebnisse gefahrlos zurückgenommen werden können, arbeiten Prozessoren mit Register-Renaming und einem Reorder Buffer: Jeder Befehl erhält einen internen Platz, seine Ergebnisse landen zunächst in temporären Registern und werden erst in Programmreihenfolge „verabschiedet" (committed). Erst in diesem Moment sind sie für andere Befehle und das Betriebssystem sichtbar. Solange ein Befehl nur spekulativ lief, kann die CPU seinen Zustand bei einer Fehlvorhersage verlustfrei löschen.

Spekulation und Out-of-Order

Spekulative Ausführung wird meist mit der Out-of-Order-Execution kombiniert: Während die OoO-Hardware Befehle nach Datenverfügbarkeit ausführt, entscheidet die Spekulation, welchem Programmzweig sie folgt. Beides zusammen steckt in praktisch jedem modernen superskalaren Kern und gehört zur Mikroarchitektur des Prozessors.

Spectre und Meltdown

2017 zeigten Forscher, dass spekulative Ausführung Daten preisgeben kann, die eigentlich geschützt sind. Bei Spectre wird die Sprungvorhersage gezielt „vergiftet", sodass die CPU spekulativ auf Daten zugreift, die der Angreifer später über die Cache-Zugriffszeiten rekonstruiert — ein Seitenkanal, der die eigentlichen Ergebnisse verrät. Meltdown nutzte aus, dass der Zugriff auf Kernel-Speicher in der OoO-Phase vor der Berechtigungsprüfung stattfinden kann; erst der spätere Abbruch schützt nicht mehr vor den Cache-Spuren. Gegenmaßnahmen waren Mikrocode-Updates, der Retpoline-Compiler-Trick und eine strikte Trennung der Adressräume. Auch die Hardware-Parallelisierung über Hyper-Threading erzeugt vergleichbare Seitenkanäle: Beim Angriff PortSmash späht ein Thread den anderen über die geteilten Ausführungseinheiten aus.

Preis der Spekulation

Die Technik kostet Transistoren, Energie und Design-Komplexität. RISC-Philosophie setzte lange auf schlanke, vorhersagbare Kerne — heute spekulieren auch RISC-Kerne wie ARM, wenngleich mit unterschiedlich scharfen Sicherheitsvorkehrungen. Fehlvorhersagen erzeugen zudem einen Pipeline-Flush, der den Sonderfall-Abwicklungen ähnelt: teuer, aber in der Praxis selten genug, um sich unterm Strich zu lohnen.