Ni vraiment modulaire, ni vraiment tout à fait monolithique, le noyau Linux peut poser des problèmes de poid pour les architectures anciennes que la responsabilité envers l'environnement devrait interdire de jeter à la nature, tout autant que pour les systèmes embarqués dont les caratéristiques techniques sont les plus souvent encore plus sévères que celles de l'ordinnateur de base des années 1990. Cette page vous donne des mesures de l'incidences de certaines options de compilation sur le poid du noyau, ce qui vous sera utile à savoir quoi élaguer et quoi conserver.
Commentaires sur le choix des options
On pourra répartir les options de compilation du noyau en trois catégories principales. Les options devront êtres traitées d'une manière appropriée à la catégorie à laquelle elles appartiennent.
- Options de l'API système
- Options de l'implémentation du système
- Options de support du matériel
Les options ayant un impact sur l'API système devraient être celles que l'on supprimera en dernier recours. Le plus souvent, si le support d'une fonction de l'API Linux pose des problèmes de poid, il faudra en premier lieu tenter de réduire le poid de son implémentation. Si cela n'est pas possible, il faudra effectuer des prévisions à long terme sur les conscéquences de l'abscence de telles ou telles fonctionnalité.
Les options agissant sur l'implementation sont assez rares, car l'implementation est assez statique. C'est une bonne chose, en soi, car c'est ce qui garantie la stabilité du système : une implémentation est d'autant plus stable qu'elle est connue et qu'elle a connu un usage de longue date.
Les options de support du matériel sont les plus souples parmis toutes, mais sont aussi celles qui en pratique génèrent le plus de deceptions potentielles. Les pilotes de périphérique sont d'ailleur la première source de « plantages » avec les systèmes d'exploitation destinés aux utilisations de type « bureautique et loisir ». Contrairement aux choix d'options impactant l'API système et son implémentation, les options impactants le support du matériel devront êtres évaluées auprés d'un certain nombres de personnes équipées de matériels de types différents, avant d'être considérées comme validées (contrairement aux aspects logiciels qui peuvent êtres évalués par une seule personne sur une seule machine, car plus abstraits).
Table des poids des options principales
Les poids sont donnés en K avec 1K = 1000 au lieu de 1024, et sont donnés pour un support en dur. Les mesures sont faites en compilant un noyau 2.6.23, procédant simplement comme suit : compilation sans l'option cible, ajout de l'option, recompilation, puis mesure de la différence de poid des deux versions du noyau. Ce sont ces différences de poid qui sont indiquées dans le tableau qui suit. En raison du temps que prend cette méthode (mais il n'est pas possible d'opérer autrement), seuls les poids des options les plus importantes ou les plus courement manipulées on été mesurés.
| Option | Poid moyen | Commentaires |
|---|---|---|
| System V IPC | 20K | Standard sous Linux |
| POSIX Message Queue | 18K | Le poid réel devrait intégré le poid du sous système reseau, surlequel repose cette option |
| SLUB Allocator | SLOB + 110K | Le poid est donné relativement par rapport à celui de SLOB |
| SLAB Allocator | SLOB + 13K | Le poid est donné relativement par rapport à celui de SLOB |
| SLOB Allocator | SLOB + 0K | Le poid est donné relativement par rapport à celui de SLOB |
| Hot-Plug | 7K | En pratique il faudrait y ajouter le poid du support pour le PCI |
| Futexe | 10K | API système, mais rarement utilisée |
| Eventpoll + Signalfd + Eventfd | 11K | * |
| SHMem (POSIX shared memory support) | 10K | * |
| Module support | 100K | Option de base, sans le support forced-unload et module-versioning |
| Module versioning | 120K | Option du support de la version des modules en elle-même seule |
| Module auto load | 2K | Option de chargement automatique en elle-même seule (ajoutez-y le poid du support dans l'espace utilisateur) |
| Power management | 2K | * |
| ISA/EISA | 19K | * |
| PCI [Any] | 131K | L'option PCI-Any pèse à peine plus lourd que l'un des trois autres mode d'accès exclusif |
| PCI [Direct] | 129K | * |
| PCI [BIOS] | 130K | * |
| PCI [MMC] | 128K | * |
| ELF Support | 11K | * |
| Floppy drive | 41K | * |
| IDE/ATA2 | 10K | * |
| IDE/MFM/RLL | 51K | * |
| Boot logo | 4K | Avec un logo en 16 couleurs |
| VGA Support + 8x12 font | 191K | * |
| AT Keyboard | 11K | * |
| Ext2 | 41K | * |
| LoopBack | 10K | * |
| Support de base pour le son | 100K | Pilotes génériques pour le wave et le MIDI |
| Mouse interface + Série + PS/2 | 12K | * |
| Joystick interface + classic joystick | 10K | * |
| Misc interface + PC Speaker | 1K | * |
| Zip parellèle SCSI | 95K | * |
En pratique, un noyau avec un support descent pour un PC/AT pése environ 1390K, et un noyau avec un support descent pour un PC plus récent pèse environ 1800K (non compressé).
