Les options du noyau Linux

Incidence des options de compilation sur le poids du kernel

Présentation…

Ni vraiment modulaire, ni vraiment tout à fait monolithique, le noyau Linux peut poser des problèmes de poids 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 caractéristiques techniques sont les plus souvent encore plus sévères que celles de l’ordinateur de base des années 1990. Cette page vous donne des mesures de l’incidence de certaines options de compilation sur le poids 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 de Linux pose des problèmes de poids, il faudra en premier lieu tenter de réduire le poids de son implémentation. Si cela n’est pas possible, il faudra effectuer des prévisions à long terme sur les conséquences de l’absence de telles ou telles fonctionnalités.

Les options agissant sur l’implémentation sont assez rares, car l’implémentation 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 parmi toutes, mais sont aussi celles qui en pratique génèrent le plus de déceptions potentielles. Les pilotes de périphérique sont d’ailleurs 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 impactant 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 KiB avec 1 KiB correspondant 1000 octets ( et non pas 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, re-compilation, puis mesure de la différence de poids des deux versions du noyau. Ce sont ces différences de poids 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 couramment manipulées on été mesurées.

Poids des options du noyau
Option Poids moyen Commentaires
System V IPC 20 KiB Standard sous Linux
POSIXMessage Queue 18 KiB Le poids réel devrait intégré le poids du sous système réseau, sur lequel repose cette option
SLUBAllocator Poids de SLOB + 110 KiB Le poids est donné relativement par rapport à celui de SLOB
SLABAllocator Poids de SLOB + 13 KiB Le poids est donné relativement par rapport à celui de SLOB
SLOBAllocator Poids de SLOB + 0 KiB ( poids plume, poids imperceptible ) Le poids est donné relativement par rapport à celui de SLOB
Hot-Plug 7 KiB En pratique il faudrait y ajouter le poids du support pour le PCI
Futexe 10 KiB API système, mais rarement utilisée
Eventpoll + Signalfd + Eventfd 11 KiB ( pas de commentaires )
SHMem POSIXshared memory support  ) 10 KiB ( pas de commentaires )
Module support 100 KiB Option de base, sans le support forced-unload et module-versioning
Module versioning 120 KiB Option du support de la version des modules en elle-même seule
Module auto load 2 KiB Option de chargement automatique en elle-même seule ( ajoutez-y le poids du support dans l’espace utilisateur )
Power management 2 KiB ( pas de commentaires )
ISA et EISA 19 KiB ( pas de commentaires )
« PCI[Any] » 131 KiB L’option « PCI[Any] » pèse à peine plus lourd que l’un des trois autres mode d’accès exclusif
« PCI[Direct] » 129 KiB ( pas de commentaires )
« PCI[BIOS] » 130 KiB ( pas de commentaires )
« PCI[MMC] » 128 KiB ( pas de commentaires )
ELFSupport 11 KiB ( pas de commentaires )
Floppy drive 41 KiB ( pas de commentaires )
IDE et ATA version 2 10 KiB ( pas de commentaires )
IDE et MFM et RLL 51 KiB ( pas de commentaires )
Boot logo 4 KiB Avec un logo en 16 couleurs
VGASupport + 8x12 font 191 KiB ( pas de commentaires )
ATKeyboard 11 KiB ( pas de commentaires )
Ext2 41 KiB ( pas de commentaires )
LoopBack 10 KiB ( pas de commentaires )
Support de base pour le son 100 KiB Pilotes génériques pour les sons wave et le MIDI
Mouse interface : Serial +PS/2 12 KiB ( pas de commentaires )
Joystick interface + classic joystick 10 KiB ( pas de commentaires )
Miscellaneous interface + PC Speaker 1 KiB Poids très faible
Zip parellèle SCSI 95 KiB ( pas de commentaires )

En pratique, un noyau avec un support décent pour un PC/AT pèse environ 1390 KiB, et un noyau avec un support décent pour un PC plus récent pèse environ 1800 KiB ( non compressé ). Même réduit au minimum, un noyau Linux n’est pas adapté à une configuration i386 ou i486 de base.