Un correctif est en attente via x86/urgent pour contourner un problème avec les processeurs Intel Alder Lake et Raptor Lake qui laisse les développeurs du noyau pour le moment désactiver les identifiants de contexte de processus (PCID) avec ces processeurs Intel mobiles/de bureau.
Un correctif est configuré pour être intégré au développement de Linux 6.4 et également rétroporté vers les versions stables du noyau afin d’éviter les vidages INVLPG globaux incomplets. Le correctif de un ingénieur Intel Linux explique :
“L’instruction INVLPG est utilisée pour invalider les entrées TLB pour une adresse virtuelle spécifiée. Lorsque les PCID sont activés, INVLPG est censé invalider les entrées TLB pour l’adresse spécifiée pour les deux les entrées PCID *et* globales actuelles. (Remarque : Seuls les mappages de noyau définissent Global=1.)
Malheureusement, certaines implémentations INVLPG peuvent laisser les traductions globales non vidées lorsque les PCID sont activés.
Pour contourner ce problème, ne jamais activer les PCID sur les processeurs concernés.
J’attends il y aura éventuellement des atténuations de microcode pour remplacer cette solution de contournement logicielle.Cependant, les numéros de version exacts où cela se produira ne sont pas connus aujourd’hui.Une fois que les numéros de version sont gravés dans le marbre, la liste des processeurs peut être modifiée pour désactiver uniquement les PCID sur les processeurs concernés avec microcode affecté.
Remarque : si quelqu’un veut une solution rapide qui ne nécessite pas de correctif, collez simplement”nopcid”sur la ligne de commande de votre noyau.”
Les processeurs concernés se terminent jusqu’à être des processeurs Intel Alder Lake et Raptor Lake.Comme mentionné dans le message de correctif, Intel travaillerait sur une atténuation du microcode pour ce problème, mais pour l’instant au moins le noyau Linux est configuré pour désactiver la prise en charge PCID pour Alder Lake/Alder Lake L/Alder Lake N/Raptor Lake/Raptor Lake P/Raptor Lake S jusqu’à ce que l’atténuation du microcode puisse être gérée.
INVLPG est utilisé pour invalider les entrées TLB spécifiées. Au moins Alder Lake et Raptor Lake n’avez pas besoin de Kernel Page Table Isolation (KPTI) pour atténuer Meltdown puisque ces processeurs plus récents n’en sont pas affectés.Mais pour les processeurs Intel plus anciens, la prise en charge du PCID a aidé à compenser une partie des frais généraux liés à l’isolation de la table de pages du noyau/à l’atténuation de Meltdown, comme indiqué plusieurs La documentation du noyau PTI poursuit en notant plus en détail les avantages de la prise en charge du PCID :
“Process Context IDentifiers (PCID) est une fonctionnalité CPU qui nous permet de ne pas vider l’intégralité du TLB lors du changement de tables de pages en définissant un bit spécial dans CR3 lorsque les tables de pages sont modifiées. Cela rend la commutation des tables de pages (lors du changement de contexte ou de l’entrée/sortie du noyau) moins chère. Mais, sur les systèmes prenant en charge PCID, le code de changement de contexte doit vider à la fois les entrées utilisateur et noyau du TLB. Le vidage du PCID TLB de l’utilisateur est différé jusqu’à la sortie de l’espace utilisateur, ce qui minimise le coût. Voir intel.com/sdm pour les détails sanglants du PCID/INVPCID.
…
Sur les systèmes sans prise en charge PCID, chaque écriture CR3 vide l’intégralité du TLB. Cela signifie que chaque appel système, interruption ou exception vide le TLB.”
Dans tous les cas, je vais exécuter quelques tests sur Raptor Lake pour voir si cette désactivation-au moins temporaire-du support PCID signifie pour l’un des domaines de performance habituels pour les utilisateurs finaux.