Un développeur de Kubuntu a trouvé un curieux problème avec la gestion de l'alimentation des cœurs Intel hybrides, c'est-à-dire les Core 12, 13 et 14, sans oublier Meteor Lake, où il l'a décrit d'une manière très particulière. Et il a déclaré que la compatibilité avec CPPC V2 avait interrompu la programmation desdits processeurs en raison d'un firmware défectueux ou mal configuré. Après avoir trouvé la solution à cette erreur de performances du processeur Linux, Intel a signalé que son i5-13500H était 50 % plus rapide qu'avant sur un seul cœur. Logiquement, les bleus sont sortis pour implémenter les corrections et les envoyer à Linux et son noyau.
C'est un problème vraiment complexe qui n'avait pas été détecté au cours des 3 dernières années d'existence des architectures hybrides et qui montre combien de travail d'optimisation reste à faire au niveau logiciel. Entre les chipsets, le packaging 3D et les différents types de cœurs que l'OS en extrait, c'est quelque chose de tellement complexe qu'à la moindre amélioration tout le monde court pour l'implémenter le plus rapidement possible.
Un développeur découvre ce qu'aucun ingénieur ne pourrait faire
Bien que nous verrons l’explication complète plus loin dans cet article, nous la résumerons brièvement pour avoir une idée de ce qui se passait. Il s'avère que sous Linux, si un système (PC ou ordinateur portable) ne signale pas qu'il est capable d'ACPI CPPC V2, si la réponse à la vérification est fausse, la fonctionnalité est considérée comme absente, et c'est là que les problèmes commencent.
ACPI CPPC V2 est une version améliorée du CPPC original, et à sa base, il améliore le contrôle de la puissance grâce à la dynamique des performances du processeur, en ayant toujours le système d'exploitation comme “arbitre”. Dans la V2, le contrôle des états P a été ajouté avec les états T, ce qui a amélioré le changement de fréquences et de tensions entre les deux états jusqu'à atteindre des niveaux d'efficacité et de performance.
Aaron Rainbolt, le développeur qui a découvert le problème, l'explique plus techniquement comme ceci :
“Dans le commit 7feec7430eddd, la fonction `acpi_cppc_processor_probe()` a été ajoutée
modifié pour vérifier le bit CPPC v2 dans _OSC afin de déterminer si CPPC v2 est présent sur le système. Si ce bit n'est pas défini, un ensemble de processeurs particulier est vérifié à l'aide de `cpc_supported_by_cpu()` (défini dans arch/x86/kernel/acpi/cppc.c) pour voir si le processeur prend en charge CPPC v2 même si le BIOS ne le signale pas. . Si cette fonction renvoie faux, CPPC v2 est considéré comme absent.Bien que cela fonctionne bien sur les systèmes où le micrologiciel signale avec précision la prise en charge de CPPC v2 dans _OSC, cela peut entraîner une sérieuse régression des performances lors de l'utilisation du nouveau planificateur EEVDF sur certaines machines.
Dans son i5-13500, il a récupéré les performances attendues
Aaron poursuit son explication du problème, en se concentrant sur deux points précis :
Jusqu'à présent, nous avons remarqué ce problème sur certaines machines équipées de processeurs i5-13500H et avons vu des rapports faisant état du même problème ailleurs sur d'autres matériels. Toutes les machines ayant rencontré ce problème avaient deux choses en commun :
* Ils utilisent des processeurs Intel à cœurs hétérogènes (hybrides)
* Ils ont un firmware avec des erreurs ou mal configuré. Dans les cas les plus clairs, cela
Le micrologiciel ne signale pas la prise en charge de CPPC v2 dans _OSC même si CPPC v2 fonctionne.Lorsque ces deux choses sont vraies, le planificateur EEVDF planifie souvent les processus sur des cœurs E-Core au lieu de cœurs P-Core, ce qui entraîne des performances monocœur gravement affectées (mon lieu de travail voyait des scores (50 % plus lents sur certains systèmes en raison à ce bug).
L'ingénieur Intel, Rafael Wysocki, déclare avoir trouvé la solution et qu'elle sera implémentée sous Linux pour corriger l'erreur de performances
Expliquant le problème, l'ingénieur Intel chargé de maintenir le sous-système de gestion de l'alimentation sous Linux, le déjà célèbre Rafael Wysocki, a commenté ce qui suit :
“Les performances monothread sur certains systèmes hybrides auraient diminué de manière significative après la validation 7feec7430edd(“ACPI : CPPC : Sonde uniquement pour _CPC si CPPC v2 est accusé de réception”), ce qui empêchait l'utilisation de _CPC si le micrologiciel de la plate-forme n'avait pas confirmé son compatibilité.
Le problème est que si le micrologiciel de la plate-forme ne confirme pas la prise en charge de CPPC v2, cppc_get_perf_caps() renvoie une erreur qui empêche le pilote intel_pstate d'activer ITMT. Par conséquent, le programmeur n'a aucune idée des différences de performances des processeurs. Ainsi, dans un système hybride, certaines tâches peuvent être exécutées sur des processeurs de faible capacité alors qu'elles devraient être exécutées sur des processeurs de grande capacité.
Pour résoudre ce problème, j'ai modifié intel_pstate pour utiliser les informations de MSR_HWP_CAPABILITIES afin d'activer ITMT si CPPC n'est pas disponible (ce qui est déjà fait si le chiffre de performances plus élevé provenant de CPPC n'est pas réaliste).”
Intel ITMT est la définition abrégée de la technologie Intel Turbo Max, c'est-à-dire le moteur Boost de base pour les fréquences bleues dans chaque type de cœurs. Ce que Wysocki précise, c'est qu'avec cette erreur, lorsque le système d'exploitation ne signale pas que CPPC V2 est activé, l'ITMT n'est pas activé et, par conséquent, le Boost n'augmente pas, réduisant les performances jusqu'à -50 %.
Par conséquent, à partir de Linux 6.10-rc6, Intel corrigera cette erreur de performances en ramenant ses processeurs aux valeurs qu'ils déclarent.