Linux mieux optimisé pour les processeurs ARM ?

Une révolution dans le monde Linux se prépare en terme de support de l’architecture processeur ARM. Espérons qu’elle sera bénéfique, car la situation actuelle est loin d’être reluisante.

L’architecture processeur RISC 32 bits ARM est en position de quasi-monopole dans l’embarqué et la mobilité. Les dérivés de ces puces se multiplient, mais le niveau d’optimisation du code est souvent calqué sur le maillon le plus faible. La faute à une diversification anarchique des composants ARM, qui fait que les développeurs ne peuvent tout simplement plus suivre le mouvement.

Dans le monde Linux, la situation semble aujourd’hui devenir critique. Chaque concepteur de composant propose en effet ses propres correctifs pour le noyau et aucune synergie ne se crée afin de proposer des pilotes unifiés, qui seraient compatibles avec plusieurs puces ARM. Cette duplication inutile des efforts et cette fragmentation du code source de Linux exaspèrent au plus haut point Linus Torvalds.

C’est sans compter également avec les constructeurs qui ne reversent pas leurs modifications sous licence open source, où qui le font, mais n’acceptent pas que leurs concurrents utilisent ce code… quitte à leur faire un procès (au mépris même de la licence GPL). C’est ainsi ce qui se passe actuellement en Allemagne entre AVS Computersysteme Vertriebs et Cybits. Une situation qui devient ubuesque.

En tout état de cause, l’architecture monolithique du noyau Linux rend difficile la séparation du code principal de celui dédié à son adaptation à une carte mère spécifique. Pour le créateur de Linux, intégrer l’équivalent des Board Support Packages (BSP) au sein du noyau Linux est de plus en plus difficile, hormis si les concepteurs de puces et de cartes mères ARM se décident à harmoniser et à standardiser leur écosystème.

Le consortium Linaro a pour objectif d’aider à une consolidation du monde Linux ARM. Mais là encore, les choses avancent lentement. Ainsi, Konstantinos Margaritis, un développeur de Genesi (une société qui construit des machines ARM), explique à nos confrères d’ARMdevices.net que la version ARM de la Debian est par défaut compilée sans aucun support des coprocesseurs arithmétiques (mode soft float).

Ce choix était logique à une époque où les puces ARM n’étaient pas massivement pourvues de tels dispositifs. En effet, le mode hard float (utilisation de la FPU) peut gérer l’absence de coprocesseurs arithmétiques, mais se révèle alors bien plus lent que le mode soft float. Ceci n’a toutefois plus guère de sens aujourd’hui. Konstantinos Margaritis montre que l’utilisation de ces unités (hard float) se traduit par une augmentation sensible des performances, laquelle peut facilement atteindre les 300 %. Une optimisation difficile à mettre en pratique ? « Il suffit de recompiler le code. »

Par chance, sous l’impulsion de Genesi, Linaro a enfin opté pour l’utilisation par défaut des unités arithmétiques au sein des versions ARM de Linux. Un choix en phase avec les composants actuellement disponibles sur le marché. Ce mouvement semble faire des émules : les prochaines versions ARM de MeeGo, de la Fedora, de la Gentoo (etc.) seront ainsi compilées en mode hard float.