Un patch déployé il y a plus de vingt ans pour corriger un problème de gestion de l'alimentation ralentissait jusqu'à présent les PC Linux équipés de processeurs AMD. Handicapant et complètement obsolète, il va (enfin) être supprimé.
Pour ne pas brûler en quelques heures, le principe de base de nos processeurs, depuis des années, est de n'activer que les transistors utiles pour la tâche demandée par l'utilisateur. C'est sur ce point de départ que les fabricants de CPU ont mis au point des interfaces de gestion d'alimentation de plus en plus sophistiquées pour faire le relais entre l'OS et le matériel.
La gestion d'alimentation et ses débuts cahoteux sur Linux
En 1996, un nouveau standard nommé ACPI (Advanced Configuration and Power Interface) remplaçait ainsi l'APM (Advanced Power Management) lancé à l'époque de Windows 3. Cette nouvelle norme, comme souvent, avait toutefois été principalement conçue pour Windows… et avait donc surtout été testée avec l'OS de Microsoft. Linux, lui, a rapidement souffert de l'arrivée de l'ACPI. Très mal perçu par la communauté Linux, ce standard mal boutiqué pour l'OS libre avait à l'époque suscité la fureur de certains informaticiens. Parmi eux, Linus Torvalds, créateur en 1991 du noyau Linux, qui n'avait (comme à son habitude) pas vraiment su garder son calme.
« L'ACPI est un désastre complet à tout point de vue. Mais nous sommes en quelque sorte coincés avec elle. Si des gens d'Intel écoutent ceci et que vous avez quelque chose à voir avec l'ACPI, tirez-vous une balle maintenant, avant de vous reproduire ». Des propos fleuris tenus un an après que le kernel Linux ne commence à prendre en charge l'ACPI. Et comme le précise The Register, c'est justement sur cette période qu'un bug avait été découvert sur certaines machines AMD Athlon utilisant alors des chipsets VIA.
« Lorsque le noyau envoyait le signal STPCLK# pour mettre un cœur de processeur en veille (bien sûr, il n'y avait qu'un seul cœur à l'époque), les machines problématiques mettaient un certain temps à le faire, et les développeurs du noyau ont donc ajouté des instructions de lecture d'E/S factices, afin que le processeur ne continue pas à fonctionner alors qu'il était censé s'arrêter », narre The Register.
Un patch obsolète, handicapant… et oublié
Censée être temporaire, cette mesure était efficace à la fin des années 90. Le problème, c'est que ces instructions ont été oubliées. Elles étaient ainsi toujours employée sur les machines AMD actuelles sous Linux… alors que le bug d'origine (observable sur des processeurs Athlon eux-mêmes obsolètes) avait pour sa part été corrigé depuis longtemps.
Cette (re)découverte vient d'un ingénieur d'AMD, K Prateek Nayak, qui a utilisé le toolkit « Instruction-Based Sampling » de la firme pour observer le comportement du kernel Linux. Corrigée récemment par un ingénieur d'Intel cette fois, cette vieille mesure vouée aux processeurs Athlon avait un impact négatif important sur les performances des configurations actuelles.
« Cette solution de contournement est très pénible sur les systèmes modernes. Le "inl()" peut prendre des milliers de cycles », explique notamment Dave Hansen, l'ingénieur d'Intel qui a pris soin de nous en débarrasser avec un patch. Comme le précise The Register, ce patch devrait être déployé par l'intermédiaire du kernel Linux 6.0, attendu dimanche. Le gain de performance devrait être substantiel pour les machines concernées.
Source : The Register