DELL OptiPlex 360 (Intel) versus SheevaPlug (ARM)
En ayant marre de construire manuellement les tarballs binaires de KissCount, j'ai décidé de confier cette tâche à mon petit serveur (c'est le premier pas vers le packaging). Petit problème : le SheevaPlug tourne sur un processeur ARM, processeur encore peu répandu sur le "desktop" (ordinateur personnel/de bureau). En effet la majorité totalité de ces ordinateurs ont un processeur x86 (Intel/AMD). Mais pas de panique, il suffit de créer une chaîne de compilation croisée (cross toolchain) pour produire nos binaires x86 à partir d'une plateforme ARM !
Trêve bavardage, on récupère la dernière version de crosstool-ng (j'aurais pu en choisir un autre, mais celui là a l'air bien et surtout je n'avais pas envie de la construire "à la main"). Je me bats un peu en essayant d'utiliser la eglibc (Embedded Glibc, notamment utilisée par le projet Debian) ... échec. Par dépit je prends une configuration d'exemple légèrement modifiée. Une petite chose qui manque : la possibilité, par défaut, de faire un restart (obligé d'activer l'option dans debug).
Ce petit exercice va donc permettre de faire une comparaison entre les deux architectures. Bien sûr la comparaison est un peu biaisée car ce ne sont pas des gammes équivalentes, mais essayons quand même. La compilation est un exercice qui met en jeu beaucoup de composants systèmes :
- Lecture/Écriture de fichiers (système de fichier, noyau via les caches, disque, DMA)
- Mémoire/Calculs (processeur, bus interne, cache processeur, compilateur)
Les chiffres bruts :
Temps de compilation sur le SheevaPlug : 8h
Temps de compilation sur le DELL : 1h
Vu comme cela on se dirait : ARM, c'est naze. Mais regardons de plus près :
DELL OptiPlex 360
- Intel(R) Core(TM)2 Duo E7500 @ 2.93GHz 3Mo de cache, FSB 1066Mhz : un seul des deux cœurs a été utilisé
- 4 Go de mémoire vive bicanale type DDR2 SDRAM non ECC (800 MHz)
- Disque dur 320 Go en SATA II avec un système de fichier Ext4, le tout à 7500rpm
- Ubuntu 10.4 64 bits
- Noyau Linux 2.6.32
SheevaPlug
- ARM (9, v5 te) Marvell Kirkwood (Feroceon 88FR131 rev 1 (v5l)) 1Ghz, 16KB de cache L1, 256KB de cache L2 @500Mhz
- 512 Mo DDR2 SDRAM 16 bits
- Clé USB Toshiba 16Go en Ext2
- Debian stable (4 / Lenny) 32 bits
- Noyau Linux 2.6.32
Il y a un facteur 8 entre les deux systèmes qui peut s'expliquer par : le cache de l'ARM est ridicule (ça coûte cher), la fréquence du bus est deux fois moins importante, la taille du bus est divisée par 4, le système de fichier de la clé USB est relativement lent en écriture (4.7 Go nécessaires pour la compilation et 141 Mo la toolchain finale). En partant de là je trouve que les performances sont tout à fait correctes, surtout que même avec 8h de compilation on est gagnant niveau consommation électrique ! J'espère réellement que cette architecture va débarquer sur PC une fois qu'elle sera un peu plus musclé ! C'est ce qu'on verra avec les nouveaux Cortex A5/A8/A9 qui font déjà des merveilles sur smartphone (même s'il y a beaucoup d'accélérateurs autour). Et puis Microsoft a décidé de faire une version ARM de Windows, ce n'est pas pour rien ;)
Configuration toolchain 32 bits
Configuration toolchain 64 bits