Vantaggi del modulo kernel compilato all'interno del kernel?


Risposte:


7

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.


Ti dispiace leggere di nuovo questa risposta, attentamente. Lo avrei fatto, ma non so cosa volevi dire sul posto, ad es . Su hard disk tradizionali .
Tshepang,

Intendevo quelli magnetici (non ho alcuna esperienza con SSD).
Maciej Piechotka,

Ho provato a renderlo più leggibile. Puoi controllare se non l'ho rovinato.
Tshepang,

Grazie. Ho appena finito la sessione d'esame, quindi non avevo avuto il tempo di esaminarlo.
Maciej Piechotka,

7

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.


Accedere a un simbolo in un modulo è un po 'più lento (è coinvolta una direzione indiretta). Ma la flessibilità aggiuntiva (può caricare / scaricare come richiesto, non è necessario creare un kernel su misura per la mano per l'hardware esatto in uso, ...) ne vale la pena (a meno che non si stia costruendo per un ambiente molto limitato che non mai cambiare).
vonbrand,

4

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.


2

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 ext3di 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 :-)


Sto pensando di migliorare alcune prestazioni? Ce n'è affatto?
phunehehe,

1
In passato le persone hanno fatto di tutto per produrre il kernel più piccolo possibile con solo ciò che è richiesto . Oggi questo è sostanzialmente cambiato. In effetti, ogni volta che carichi un modulo per la prima volta subirai un piccolo calo delle prestazioni. Questo non vuol dire che dovresti compilare tutto nel kernel :-) Vedi questo: articleinput.com/e/a/title/…
nc3b

per driver o funzionalità non vitali ci sono vantaggi? per esempio se voglio solo usare il terminale e un sacco di utility di rete senza altre necessità o funzionalità. c'è qualche vantaggio se compilo tutto il modulo e il driver necessari all'interno del kernel senza modulo caricabile?
Uray,

3
Toro. Un sistema si avvia correttamente con un driver SCSI come modulo in un initrd. Ecco a cosa servono.
wzzrd,

Sì ... a condizione che il modulo sia in un initrd che il kernel può capire ...
Dagelf

2

Compilare staticamente ogni driver per l'hardware integrato all'interno del kernel. L'eccezione sarebbe l'hardware che non è permanente (ad esempio l'hardware USB collegato).

Poiché è probabile che la mia configurazione hardware non cambi presto, non mi preoccupo dei moduli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.