Réponses:
Ça dépend. Si vous avez une petite quantité de mémoire, l'utilisation de modules peut améliorer le CV car ils ne sont pas rechargés à chaque fois (je l'ai trouvé significatif sur 2 Gio de RAM mais pas sur 4 Gio sur les disques durs traditionnels). Cela est particulièrement vrai lorsque, en raison d'un bug dans le module de batterie (qu'il soit compilé ou en tant que module), il a fallu beaucoup de temps pour démarrer (plusieurs minutes). Même sans bug sur gentoo, j'ai réussi à raccourcir le temps (rapporté par systemd-analysis
) de 33s à 18s juste en passant du noyau compilé statiquement aux modules - `` étonnamment '' le début du noyau est passé de 9s à 1,5s.
De plus, lorsque vous ne savez pas quel matériel allez-vous utiliser, les modules sont clairement bénéfiques.
PS. Vous pouvez compiler même des pilotes vitaux en tant que modules tant que vous les incluez dans initrd. Par exemple, les distributions incluront le système de fichiers de /, les pilotes de disque dur, etc. dans initrd lors de l'installation.
Pour autant que je sache, il n'y a pas de différence de vitesse.
Je pense que vous gagnerez quelques Ko de mémoire du noyau car la granularité des allocations est d'une page, donc sur une architecture typique, chaque module gaspille en moyenne environ 2 Ko (½ page) par module potentiel. Même sur les systèmes embarqués, ce n'est guère significatif. Vous gagnez également un peu d'espace disque car les modules peuvent être compressés en même temps que le noyau; qui peut être plus pertinent dans les systèmes embarqués avec peu de stockage.
Si vous pouvez complètement vous passer des modules, vous économisez un peu de mémoire du noyau (pas besoin du chargeur de module), d'espace disque (pas besoin des utilitaires de module) et de la complexité du système (pas besoin d'inclure le chargement de module comme fonctionnalité dans votre distribution ). Ces points sont assez attrayants dans certaines conceptions intégrées où le matériel n'est pas extensible.
Quelques avantages potentiels. La performance est discutable. Vous éviteriez un certain temps d'exécution associé à un chargeur dynamique, mais je doute que ce soit un problème à moins que vous ne dépendiez d'un planificateur en temps réel.
Si vous profitez de grandes pages sur votre système, la création d'une image de noyau statique plus grande signifie peut-être que vous utilisez plus efficacement le cache de descripteur de page. Certains systèmes «encerclent» le noyau de sorte qu'il se compacte étroitement dans une localité de mémoire, ce qui peut réduire un certain délai dû à des erreurs de page mineures, et peut-être majeures.
Sur le plan architectural, il peut vous convenir de fournir One Big Image, en faisant valoir qu'il est plus facile de maintenir moins de modules indépendants et que la perte de flexibilité n'est pas importante. Beaucoup de ce genre de raisonnement s'aventure dans les questions de style et de pratique.
Parfois, c'est nécessaire. Si vous compilez un pilote essentiel (par exemple un pilote SCSI) en tant que module, votre système ne démarrera pas.
Un autre excellent candidat pour ne pas compiler en tant que module est le type de système de fichiers de la partition racine. Si le noyau ne comprend ext3
pas la lecture, /lib/modules/
comment va-t-il en charger des modules?
Pensez-y de cette façon: pour utiliser les modules, le noyau doit en savoir suffisamment sur votre système pour lire et charger les modules du noyau. Utilisez cela et essai et erreur :-)