È in attesa di una patch tramite x86/urgente per risolvere un problema con i processori Intel Alder Lake e Raptor Lake che per il momento lascia gli sviluppatori del kernel a disabilitare i Process Context Identifiers (PCID) con questi processori Intel mobile/desktop.
Una patch è impostata per essere mainline per lo sviluppo di Linux 6.4 e anche per il back-porting alle versioni stabili del kernel per evitare flush INVLPG globali incompleti. La patch di spiega un ingegnere di Intel Linux:
“L’istruzione INVLPG viene utilizzata per invalidare le voci TLB per un indirizzo virtuale specificato. Quando i PCID sono abilitati, INVLPG dovrebbe invalidare le voci TLB per l’indirizzo specificato per entrambi il PCID corrente *e* le voci Global. (Nota: solo le mappature del kernel impostano Global=1.)
Sfortunatamente, alcune implementazioni INVLPG possono lasciare le traduzioni Global non scaricate quando i PCID sono abilitati. non abilitare mai i PCID sui processori interessati.
Mi aspetto alla fine ci saranno mitigazioni del microcodice per sostituire questa soluzione alternativa al software.Tuttavia, i numeri di versione esatti in cui ciò accadrà non sono noti oggi.Una volta che i numeri di versione sono fissati nella pietra, l’elenco dei processori può essere ottimizzato per disabilitare solo i PCID sui processori interessati con microcodice interessato.
Nota: se qualcuno desidera una soluzione rapida che non richieda l’applicazione di patch, è sufficiente inserire’nopcid’nella riga di comando del kernel.”
I processori interessati terminano essere processori Intel Alder Lake e Raptor Lake.Come accennato nel messaggio di patch, si dice che Intel stia lavorando a una mitigazione del microcodice per questo problema, ma per ora almeno il kernel Linux è impostato per disabilitare il supporto PCID per Alder Lake/Alder Lake L/Alder Lake N/Raptor Lake/Raptor Lake P/Raptor Lake S fino a quando non sarà possibile gestire la mitigazione del microcodice.
INVLPG viene utilizzato per invalidare le voci TLB specificate. Almeno Alder Lake e Raptor Lake non è necessario l’isolamento della tabella delle pagine del kernel (KPTI) per mitigare il Meltdown poiché questi processori più recenti non ne sono interessati.Ma per i processori Intel meno recenti, il supporto PCID ha contribuito a compensare parte del sovraccarico nella gestione dell’isolamento della tabella delle pagine del kernel/mitigazione del Meltdown come mostrato diversi anni fa. La documentazione del PTI del kernel continua a notare più ampiamente i vantaggi del supporto PCID:
“Process Context IDentifiers (PCID) è una funzionalità della CPU che ci consente di saltare lo svuotamento dell’intero TLB quando si cambiano le tabelle delle pagine impostando un bit speciale in CR3 quando le tabelle delle pagine vengono modificate. Ciò rende il cambio delle tabelle delle pagine (al cambio di contesto o all’ingresso/uscita dal kernel) più economico. Tuttavia, su sistemi con supporto PCID, il codice di cambio di contesto deve cancellare sia le voci dell’utente che quelle del kernel dal TLB. Il flush del TLB PCID dell’utente viene posticipato fino all’uscita nello spazio utente, riducendo al minimo il costo. Vedere intel.com/sdm per i dettagli cruenti di PCID/INVPCID.
…
Sui sistemi senza supporto PCID, ogni scrittura CR3 svuota l’intero TLB. Ciò significa che ogni chiamata di sistema, interruzione o eccezione svuota il TLB.”
In ogni caso eseguirò alcuni benchmark su Raptor Lake per vedere se questa-almeno temporanea-disabilitazione del supporto PCID significa per qualsiasi delle solite aree di prestazione per gli utenti finali.