Nutzen des im Kernel kompilierten Kernelmoduls?


Antworten:


7

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.


Stört es Sie, diese Antwort noch einmal sorgfältig zu lesen? Ich hätte es getan, aber ich weiß nicht, was Sie damit sagen wollten , z. B. auf herkömmlichen Festplatten .
Tshepang

Ich meinte magnetische (ich habe keine Erfahrung mit SSD).
Maciej Piechotka

Ich habe versucht, dies lesbarer zu machen. Können Sie überprüfen, ob ich es nicht vermasselt habe?
Tshepang

Vielen Dank. Ich habe gerade die Prüfungssitzung beendet, also hatte ich keine Zeit, sie mir anzusehen.
Maciej Piechotka

7

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.


Der Zugriff auf ein Symbol in einem Modul ist etwas langsamer (eine Indirektion ist beteiligt). Aber die zusätzliche Flexibilität (kann nach Bedarf geladen / entladen werden, es muss kein maßgeschneiderter Kernel für die genau verwendete Hardware erstellt werden, ...) lohnt sich (es sei denn, Sie bauen für eine sehr eingeschränkte Umgebung, die dies nicht tut) nie ändern).
Vonbrand

4

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.


2

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 ext3zu 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 denke über eine Leistungssteigerung nach? Gibt es überhaupt welche?
Phunehehe

1
In der Vergangenheit haben die Leute große Anstrengungen unternommen, um den kleinstmöglichen Kernel mit nur dem zu produzieren, was erforderlich ist . Heute hat sich dies weitgehend geändert. In der Tat, wenn Sie zum ersten Mal ein Modul laden, werden Sie einen kleinen Leistungseinbruch erleiden. Das heißt nicht, dass Sie alles im Kernel kompilieren sollten :-) Siehe hierzu: articleinput.com/e/a/title/…
nc3b

Gibt es einen Vorteil für nicht wichtige Treiber oder Funktionen? Zum Beispiel, wenn ich nur ein Terminal und eine Reihe von Netzwerkdienstprogrammen ohne andere Notwendigkeit oder Funktionalität verwenden möchte. Gibt es einen Vorteil, wenn ich nur alle benötigten Module und Treiber innerhalb des Kernels kompiliere, ohne ein ladbares Modul zu haben?
URAY

3
Stier. Ein System bootet problemlos mit einem SCSI-Treiber als Modul in einer initrd. Dafür sind sie da.
5.

Ja ... vorausgesetzt das Modul dafür befindet sich in einer initrd, die der Kernel verstehen kann ...
Dagelf

2

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.