Jaka jest korzyść z kompilacji modułów jądra w jądro (zamiast jako moduły ładowalne)?
kernel
kernel-modules
uray
źródło
źródło
Odpowiedzi:
To zależy. Jeśli masz niewielką ilość pamięci, użycie modułów może poprawić wznawianie, ponieważ nie są one ponownie ładowane za każdym razem (uznałem, że ma to znaczenie na 2 GiB pamięci RAM, ale nie na 4 GiB na tradycyjnych dyskach twardych). Jest to szczególnie prawdziwe, gdy z powodu jakiegoś błędu w module baterii (niezależnie od tego, czy został skompilowany czy jako moduł), uruchomienie trwało bardzo długo (kilka minut). Nawet bez błędów w Gentoo udało mi się skrócić czas (zgłaszany przez
systemd-analysis
) z 33s do 18s, po prostu zmieniając statycznie skompilowane jądro na moduły - „zaskakująco” początek jądra zmienił się z 9s na 1,5s.Ponadto, gdy nie wiesz, jakiego sprzętu będziesz używać, moduły są wyraźnie korzystne.
PS. Możesz skompilować nawet niezbędne sterowniki jako moduły, o ile umieścisz je w initrd. Na przykład dystrybucje będą obejmować system plików /, sterowniki dysku twardego itp. W initrd podczas instalacji.
źródło
O ile mi wiadomo, nie ma różnicy prędkości.
Myślę, że zyskasz kilka kB pamięci jądra, ponieważ ziarnistość alokacji wynosi jedną stronę, więc w typowej architekturze każdy moduł marnuje średnio około 2kB (½ strony) na potencjalny moduł. Nawet w systemach wbudowanych nie ma to większego znaczenia. Zyskujesz również trochę miejsca na dysku, ponieważ moduły można kompresować w tym samym czasie, co jądro; które mogą być bardziej odpowiednie w systemach wbudowanych o małej pojemności.
Jeśli możesz zrezygnować z modułów, zaoszczędzisz trochę pamięci jądra (nie wymaga modułu ładującego), miejsca na dysku (nie potrzeba narzędzi modułu) i złożoności systemu (nie musisz uwzględniać ładowania modułu jako funkcji w twojej dystrybucji ). Punkty te są dość atrakcyjne w niektórych projektach osadzonych, w których sprzęt nie jest rozszerzalny.
źródło
Kilka potencjalnych korzyści. Wydajność jest dyskusyjna. Uniknąłbyś narzutu związanego z uruchomieniem dynamicznym, ale wątpię, że to wielka sprawa, chyba że zależysz od harmonogramu w czasie rzeczywistym.
Jeśli korzystasz z dużych stron w systemie, być może utworzenie większego statycznego obrazu jądra oznacza, że efektywniej wykorzystujesz pamięć podręczną deskryptora strony. Niektóre systemy będą „umieszczać” jądro w klatce, aby było szczelnie spakowane w jednej lokalizacji pamięci, co może złagodzić pewne opóźnienia z powodu drobnych i być może poważnych błędów strony.
Architektonicznie może ci się przydać jeden duży obraz, argumentując, że mniej niezależnych modułów jest łatwiejszych w utrzymaniu, a utrata elastyczności nie jest ważna. Wiele tego rodzaju rozumowań podejmuje kwestie stylu i praktyki.
źródło
Czasami jest to konieczne. Jeśli skompilujesz jakiś istotny sterownik (np. Sterownik SCSI) jako moduł, system nie uruchomi się.
Innym doskonałym kandydatem na nie kompilacji jako moduł jest typ systemu plików na partycji root. Jeśli jądro nie rozumie
ext3
czytać, w/lib/modules/
jaki sposób ładuje z niego moduły?Pomyśl o tym w ten sposób: aby użyć modułów, jądro musi wiedzieć wystarczająco dużo o twoim systemie, aby czytać i ładować moduły jądra. Skorzystaj z tego i spróbuj i błąd :-)
źródło
Statycznie kompiluję każdy sterownik dla wbudowanego sprzętu w jądrze. Wyjątkiem byłby sprzęt, który nie jest stały (na przykład sprzęt podłączony do USB).
Ponieważ moja konfiguracja sprzętowa prawdopodobnie nie zmieni się w najbliższym czasie, nie przejmuję się modułami.
źródło