Über x86/urgent steht ein Patch zur Umgehung eines Problems mit Intel Alder Lake-und Raptor Lake-Prozessoren aus, das die Kernel-Entwickler vorerst dazu zwingt, Process Context Identifiers (PCID) bei diesen Intel Mobil-/Desktop-Prozessoren zu deaktivieren.

Ein Patch soll hauptsächlich für die Entwicklung von Linux 6.4 vorgesehen und auch auf die stabilen Kernel-Versionen zurückportiert werden, um unvollständige globale INVLPG-Flushes zu vermeiden. Der Patch von Ein Intel-Linux-Ingenieur erklärt:

„Der INVLPG-Befehl wird verwendet, um TLB-Einträge für eine angegebene virtuelle Adresse ungültig zu machen. Wenn PCIDs aktiviert sind, soll INVLPG TLB-Einträge für die angegebene Adresse für beide ungültig machen.“ die aktuellen PCID *und* Global-Einträge. (Hinweis: Nur Kernel-Zuordnungen setzen Global=1.)

Leider können einige INVLPG-Implementierungen globale Übersetzungen ungelöscht lassen, wenn PCIDs aktiviert sind.

Als Workaround: Aktivieren Sie niemals PCIDs auf betroffenen Prozessoren.

Ich gehe davon aus Irgendwann wird es Mikrocode-Abhilfemaßnahmen geben, um diesen Software-Workaround zu ersetzen. Allerdings sind die genauen Versionsnummern, bei denen dies geschehen wird, heute nicht bekannt. Sobald die Versionsnummern in Stein gemeißelt sind, kann die Prozessorliste so angepasst werden, dass nur PCIDs auf betroffenen Prozessoren deaktiviert werden betroffenen Mikrocode.

Hinweis: Wenn jemand eine schnelle Lösung wünscht, die kein Patchen erfordert, fügen Sie einfach „nopcid“ in die Befehlszeile Ihres Kernels ein.“

Die betroffenen Prozessoren werden ausgeschaltet Es handelt sich um Intel Alder Lake-und Raptor Lake-Prozessoren. Wie in der Patch-Nachricht erwähnt, soll Intel an einer Mikrocode-Abschwächung für dieses Problem arbeiten, aber vorerst ist zumindest der Linux-Kernel so eingestellt, dass er die PCID-Unterstützung für Alder Lake/Alder Lake deaktiviert L/Alder Lake N/Raptor Lake/Raptor Lake P/Raptor Lake S, bis die Mikrocode-Abschwächung behandelt werden kann.

INVLPG wird zum Ungültigmachen bestimmter TLB-Einträge verwendet. Zumindest Alder Lake und Raptor Lake Sie benötigen keine Kernel Page Table Isolation (KPTI), um Meltdown abzuschwächen, da diese neueren Prozessoren davon nicht betroffen sind. Aber bei älteren Intel-Prozessoren hat die PCID-Unterstützung dazu beigetragen, einen Teil des Overheads beim Umgang mit Kernel Page Table Isolation/Abmilderung von Meltdown auszugleichen, wie mehrere gezeigt haben Jahre zurück. Die Dokumentation des Kernel-PTI geht ausführlicher auf die Vorteile der PCID-Unterstützung ein:

“Process Context IDentifiers (PCID) ist eine CPU-Funktion, die es uns ermöglicht, das Leeren des gesamten TLB beim Wechseln von Seitentabellen zu überspringen, indem wir ein spezielles Bit in CR3 setzen, wenn die Seitentabellen geändert werden. Dadurch wird das Wechseln der Seitentabellen (beim Kontextwechsel oder Kernel-Ein-/Ausstieg) günstiger. Auf Systemen mit PCID-Unterstützung muss der Kontextwechselcode jedoch sowohl die Benutzer-als auch die Kernel-Einträge aus dem TLB entfernen. Der Benutzer-PCID-TLB-Flush wird bis zum Verlassen des Benutzerbereichs verschoben, wodurch die Kosten minimiert werden. Die wichtigen PCID/INVPCID-Details finden Sie unter intel.com/sdm.

Auf Systemen ohne PCID-Unterstützung löscht jeder CR3-Schreibvorgang den gesamten TLB. Das bedeutet, dass jeder Systemaufruf, jede Unterbrechung oder jede Ausnahme den TLB leert.“

Auf jeden Fall werde ich einige Benchmarks auf Raptor Lake durchführen, um zu sehen, ob dies – zumindest vorübergehend – die Deaktivierung der PCID-Unterstützung bedeutet für alle üblichen Leistungsbereiche für Endbenutzer.

Categories: IT Info