Dans le noyau Linux 6.0, dont la sortie est attendue lundi prochain, un changement a été adopté pour résoudre les problèmes de performance des systèmes utilisant des processeurs AMD Zen. La source de la baisse de performance est un code ajouté il y a 20 ans pour contourner un problème matériel dans certains chipsets. Ce problème matériel a été résolu depuis longtemps et n’apparaît plus dans les chipsets actuels, mais l’ancienne méthode de contournement a été oubliée et est devenue une source de baisse de performance sur les systèmes basés sur les CPU AMD modernes. Les nouveaux systèmes utilisant des CPU Intel ne sont pas affectés par cette ancienne méthode de contournement, car l'accès à l'ACPI se fait par un pilote séparé intel_idle, et non par le pilote commun processor_idle.
La méthode de contournement a été ajoutée au noyau en mars 2002 pour éviter l'apparition d'un bug dans les chipsets, lié à une mauvaise gestion de l'état de sommeil (idle) en raison d'un retard dans le traitement du signal STPCLK#. Pour contourner le problème, une instruction additionnelle WAIT a été intégrée dans l'implémentation de l'ACPI, ralentissant le processeur pour permettre au chipset d'atteindre l'état de repos. Lors d’un profiling utilisant des instructions IBS (Instruction-Based Sampling) sur les processeurs AMD Zen3, il a été constaté que le processeur passe une quantité significative de temps à réaliser un bourrage, ce qui conduit à une mauvaise interprétation de l'état de charge du processeur et à l’activation de modes de sommeil plus profonds (C-State) par le gestionnaire cpuidle.
Un tel comportement se traduit par une baisse de performance lors de charges de travail où les états de repos (idle) et d'activité (busy) sont souvent alternés. Par exemple, en utilisant un patch qui désactive la méthode de contournement, les résultats moyens du test tbench passent de 32191 Mo/s à 33805 Mo/s.
Source : opennet.ru
