Correction de bug majeur pour Linux 6.13-rc3 – Amélioration des performances CPUID
Nouvelle mise à jour de Linux pour corriger un bug “hilarant” dans le code de la machine virtuelle basée sur le noyau
Correction d’un bug de performance dans le traitement de CPUID sur Sapphire Rapids CPUs
L’équipe Linux a publié une nouvelle version intermédiaire de Linux 6.13-rc3 pour résoudre un bug “hilarant” dans le code de la machine virtuelle basée sur le noyau. Ce bug provoque un temps de traitement significativement plus long des mises à jour de CPUID sur les processeurs Sapphire Rapids que prévu, entraînant des performances jusqu’à 4 fois plus rapides sur les anciens processeurs Skylake en ce qui concerne le coût du CPUID.
Les ingénieurs de Google ont découvert initialement ce problème technique dans la façon dont Sapphire Rapids traite les informations CPUID dans les VM imbriquées. Plus précisément, Sean Christopherson de Google déclare que “sur Intel Emerald Rapids, le CPUID est *extrêmement* coûteux, au point que recalculer les décalages et tailles XSAVE entraîne un retard 4 fois plus important dans les transitions VM-Enter et VM-Exit (les transitions imbriquées peuvent déclencher xstate_required_size() plusieurs fois par transition), par rapport à l’utilisation de valeurs mises en cache. Le problème est facilement visible en exécutant `perf top` tout en déclenchant des transitions imbriquées : kvm_update_cpuid_runtime() apparaît à un impressionnant 50%…”
Correction temporaire dans la mise à jour 6.13-rc3 de Linux
Ce bug de performance ne sera apparemment pas corrigé avant la version Linux 6.14, mais le problème est suffisamment grave pour que les développeurs Linux corrigent temporairement le noyau sortant de la version Linux 6.13. La mise à jour 6.13-rc3 met en cache les données CPUID sur les processeurs Sapphire Rapid, accélérant ainsi ce processus. L’implémentation complète de la solution dans Linux 6.14 entraînera la suppression complète de tous les CPUID imbriqués dans VM-Enter et VM-Exit.
Il convient de rappeler que le CPUID est une instruction qui permet au logiciel de découvrir les détails du processeur sur lequel il s’exécute. Sur Sapphire Rapids, la lecture des informations CPU via l’instruction CPUID prend jusqu’à 4 fois plus de temps que sur des processeurs beaucoup plus anciens de la série Skylake. Cela se produit uniquement dans le cadre de transitions de virtualisation imbriquées, qui ne se produisent que lorsqu’une VM s’exécute à l’intérieur d’une VM.
Linux 6.13-rc3 présente diverses autres corrections de bugs/régressions. Cependant, la solution temporaire de mise en cache pour la gestion coûteuse du CPUID semble être l’une des mises à jour les plus critiques du noyau. Encore une fois, cette technique de mise en cache n’est qu’une solution temporaire, la solution complète étant prévue dans la version 6.14 de Linux.
Source : www.tomshardware.com