Risposte:
Dipende. Se si dispone di una piccola quantità di memoria, l'uso dei moduli può migliorare il ripristino in quanto non vengono ricaricati ogni volta (l'ho trovato significativo su 2 GiB di RAM ma non su 4 GiB sui dischi rigidi tradizionali). Ciò è particolarmente vero quando a causa di un bug nel modulo batteria (indipendentemente dal fatto che sia compilato o come modulo), l'avvio ha richiesto molto tempo (diversi minuti). Anche senza bug su gentoo sono riuscito a ridurre il tempo (riportato da systemd-analysis
) da 33s a 18s semplicemente cambiando da kernel compilato staticamente a moduli - "sorprendentemente" l'inizio del kernel è cambiato da 9s a 1.5s.
Inoltre, quando non sai quale hardware utilizzerai, i moduli sono chiaramente utili.
PS. Puoi compilare anche i driver vitali come moduli purché li includa in initrd. Ad esempio, le distribuzioni includeranno il filesystem di /, i driver dell'hard disk ecc. In initrd all'installazione.
Per quanto ne so, non c'è differenza di velocità.
Penso che otterrai qualche kB di memoria del kernel poiché la granularità delle allocazioni è di una pagina, quindi nell'architettura tipica ogni modulo spreca una media di circa 2kB (½ pagina) per aspirante modulo. Anche su sistemi embedded, questo è poco significativo. Si guadagna anche un po 'di spazio su disco poiché i moduli possono essere compressi nello stesso modo del kernel; che può essere più rilevante nei sistemi embedded con poco spazio di archiviazione.
Se è possibile rinunciare del tutto ai moduli, si risparmia un po 'di memoria del kernel (non è necessario il caricatore del modulo), lo spazio su disco (non è necessario per le utilità del modulo) e la complessità del sistema (non è necessario includere il caricamento del modulo come funzionalità nella propria distribuzione ). Questi punti sono piuttosto interessanti in alcuni progetti integrati in cui l'hardware non è estensibile.
Un paio di potenziali benefici. Le prestazioni sono discutibili. Eviteresti un sovraccarico di runtime associato a un caricatore dinamico, ma dubito che sia un grosso problema a meno che tu non dipenda da un programmatore in tempo reale.
Se stai sfruttando pagine di grandi dimensioni sul tuo sistema, forse la creazione di un'immagine del kernel statica più grande significa che puoi utilizzare in modo più efficiente la cache del descrittore di pagina. Alcuni sistemi "ingabbiano" il kernel in modo che si comprima strettamente in una località di memoria, il che può alleviare un certo ritardo a causa di errori di pagina minori, e forse maggiori,.
Dal punto di vista architettonico, potrebbe essere utile fornire One Big Image, sostenendo che un minor numero di moduli indipendenti è più facile da mantenere e la perdita di flessibilità non è importante. Molto di questo tipo di ragionamento si avventura in questioni di stile e pratica.
A volte è necessario. Se si compila un driver vitale (ad esempio un driver SCSI) come modulo, il sistema non si avvia.
Un altro ottimo candidato per non compilare come modulo è il tipo di filesystem della partizione root. Se il kernel non capisce ext3
di leggere /lib/modules/
come caricherà i moduli da esso?
Pensaci in questo modo: per usare i moduli il kernel deve sapere abbastanza sul tuo sistema per leggere e caricare i moduli del kernel. Usalo e prova ed errore :-)