Er is een patch in behandeling via x86/urgent om een probleem met Intel Alder Lake-en Raptor Lake-processors te omzeilen waardoor de kernelontwikkelaars voorlopig de Process Context Identifiers (PCID) met deze mobiele/desktopprocessors van Intel moeten uitschakelen.
Er is een patch gepland voor de ontwikkeling van Linux 6.4 en ook gebackporteerd naar de stabiele kernelversies om onvolledige globale INVLPG-flushes te vermijden. De patch van een Intel Linux-engineer legt uit:
“De INVLPG-instructie wordt gebruikt om TLB-vermeldingen voor een gespecificeerd virtueel adres ongeldig te maken. Wanneer PCID’s zijn ingeschakeld, wordt INVLPG verondersteld TLB-vermeldingen voor het opgegeven adres voor beide ongeldig te maken de huidige PCID *en* Global-vermeldingen. (Opmerking: alleen kerneltoewijzingen stellen Global=1 in.)
Helaas kunnen sommige INVLPG-implementaties Global-vertalingen niet doorspoelen wanneer PCID’s zijn ingeschakeld.
Als tijdelijke oplossing: schakel nooit PCID’s in op betrokken processors.
Ik verwacht”Er zullen uiteindelijk microcode-mitigaties zijn om deze software-oplossing te vervangen. De exacte versienummers waar dat zal gebeuren, zijn vandaag echter niet bekend. Zodra de versienummers in steen zijn gebeiteld, kan de processorlijst worden aangepast om alleen PCID’s uit te schakelen op getroffen processors met getroffen microcode.
Opmerking: als iemand een snelle oplossing wil waarvoor geen patch nodig is, plak dan gewoon’nopcid’op de opdrachtregel van uw kernel.”
De getroffen processors eindigen zoals vermeld in het patchbericht, zou Intel werken aan een microcode-mitigatie voor dit probleem, maar voorlopig is de Linux-kernel in ieder geval ingesteld om PCID-ondersteuning voor Alder Lake/Alder Lake uit te schakelen L/Alder Lake N/Raptor Lake/Raptor Lake P/Raptor Lake S totdat de microcodebeperking kan worden afgehandeld.
INVLPG wordt gebruikt voor het ongeldig maken van gespecificeerde TLB-vermeldingen. Ten minste Alder Lake en Raptor Lake hebben geen Kernel Page Table Isolation (KPTI) nodig om Meltdown te verminderen, aangezien deze nieuwere processors er niet door worden beïnvloed. Maar voor oudere Intel-processors hielp PCID-ondersteuning een deel van de overhead te compenseren bij het omgaan met Kernel Page Table Isolation/het verminderen van Meltdown, zoals verschillende De kernel PTI documentatie gaat verder uitgebreid in op de voordelen van PCID-ondersteuning:
“Process Context IDentifiers (PCID) is een CPU-functie waarmee we het leegmaken van de hele TLB kunnen overslaan bij het wisselen van paginatabellen door een speciale bit in CR3 in te stellen wanneer de paginatabellen worden gewijzigd. Dit maakt het wisselen van de paginatabellen (bij contextwisseling, of kernel entry/exit) goedkoper. Maar op systemen met PCID-ondersteuning moet de contextschakelcode zowel de gebruikers-als kernelvermeldingen uit de TLB spoelen. De gebruikers-PCID TLB-flush wordt uitgesteld tot het verlaten van de gebruikersruimte, waardoor de kosten worden geminimaliseerd. Zie intel.com/sdm voor de bloederige PCID/INVPCID-details.
…
Op systemen zonder PCID-ondersteuning spoelt elke CR3-schrijfbewerking de volledige TLB door. Dat betekent dat elke syscall, interrupt of exception de TLB doorspoelt.”
In ieder geval zal ik wat benchmarks op Raptor Lake uitvoeren om te zien of dit-in ieder geval tijdelijk-uitschakelen van PCID-ondersteuning betekent voor elk van de gebruikelijke prestatiegebieden voor eindgebruikers.