Antworten:
Es hängt davon ab, ob. Wenn Sie nur wenig Arbeitsspeicher haben, kann die Verwendung von Modulen den Lebenslauf verbessern, da sie nicht jedes Mal neu geladen werden (ich fand es auf 2 GB RAM, aber nicht auf 4 GB auf herkömmlichen Festplatten signifikant). Dies gilt insbesondere dann, wenn aufgrund eines Fehlers im Akkumodul (unabhängig davon, ob es kompiliert wurde oder als Modul) der Start sehr lange gedauert hat (mehrere Minuten). Selbst ohne Gentoo-Fehler konnte ich die (von gemeldete systemd-analysis
) Zeit von 33 auf 18 Sekunden verkürzen, indem ich von einem statisch kompilierten Kernel zu Modulen wechselte - 'überraschenderweise' änderte sich der Start des Kernels von 9 auf 1,5 Sekunden.
Auch wenn Sie nicht wissen, welche Hardware Sie verwenden werden, sind Module eindeutig von Vorteil.
PS. Sie können sogar wichtige Treiber als Module kompilieren, solange Sie sie in initrd einbinden. Zum Beispiel wird in Distributionen das Dateisystem von /, Treiber von Festplatte usw. bei der Installation in initrd enthalten sein.
Soweit ich weiß, gibt es keinen Geschwindigkeitsunterschied.
Ich denke, Sie werden ein paar kB Kernel-Speicher gewinnen, da die Granularität der Zuweisungen eine Seite beträgt. In einer typischen Architektur verschwendet jedes Modul durchschnittlich etwa 2 kB (½ Seite) pro potenziellem Modul. Dies ist selbst auf eingebetteten Systemen kaum von Bedeutung. Sie gewinnen außerdem etwas Speicherplatz, da die Module im selben Vorgang wie der Kernel komprimiert werden können. Dies kann in eingebetteten Systemen mit wenig Speicherplatz relevanter sein.
Wenn Sie ganz auf Module verzichten können, sparen Sie ein wenig Kernel-Speicher (kein Modul-Loader erforderlich), Speicherplatz (keine Modul-Utilities erforderlich) und Systemkomplexität (kein Modul-Loading als Feature in Ihrer Distribution erforderlich) ). Diese Punkte sind in einigen eingebetteten Designs sehr attraktiv, in denen die Hardware nicht erweiterbar ist.
Ein paar mögliche Vorteile. Die Leistung ist umstritten. Sie würden den mit einem dynamischen Loader verbundenen Zeitaufwand vermeiden, aber ich bezweifle, dass dies eine große Sache ist, es sei denn, Sie sind auf einen Echtzeit-Scheduler angewiesen.
Wenn Sie die Vorteile großer Seiten auf Ihrem System nutzen, bedeutet das Erstellen eines größeren statischen Kernel-Images möglicherweise, dass Sie den Seitendeskriptor-Cache effizienter nutzen. Bei einigen Systemen wird der Kernel "zwischengespeichert", sodass er eng in einen Speicherbereich gepackt wird, wodurch Verzögerungen aufgrund geringfügiger und möglicherweise schwerwiegender Seitenfehler verringert werden können.
Architektonisch mag es Ihnen recht sein, One Big Image zu liefern, da weniger unabhängige Module einfacher zu warten sind und der Verlust an Flexibilität keine Rolle spielt. Viele solcher Überlegungen wagen sich in Fragen des Stils und der Praxis.
Manchmal ist es notwendig. Wenn Sie einen wichtigen Treiber (z. B. SCSI-Treiber) als Modul kompilieren, bootet Ihr System nicht.
Ein weiterer guter Kandidat für das Nicht- Kompilieren als Modul ist der Dateisystemtyp der Root-Partition. Wenn der Kernel nicht versteht ext3
zu lesen, /lib/modules/
wie wird er Module von ihm laden?
Stellen Sie sich das so vor: Um Module verwenden zu können, muss der Kernel genug über Ihr System wissen, um Kernelmodule lesen und laden zu können. Nutze das und probiere es aus :-)
Ich kompiliere statisch jeden Treiber für eingebaute Hardware im Kernel. Eine Ausnahme wäre Hardware, die nicht permanent ist (z. B. über USB angeschlossene Hardware).
Da sich meine Hardwarekonfiguration wahrscheinlich nicht so schnell ändern wird, kümmere ich mich nicht um Module.