Jaką korzyść mogę zobaczyć, samemu kompilując jądro Linuksa? Czy jest jakaś wydajność, którą można by uzyskać, dostosowując ją do swojego sprzętu?
Jaką korzyść mogę zobaczyć, samemu kompilując jądro Linuksa? Czy jest jakaś wydajność, którą można by uzyskać, dostosowując ją do swojego sprzętu?
Odpowiedzi:
Moim zdaniem jedyną korzyścią, jaką naprawdę czerpiesz ze skompilowania własnego jądra linuksa, jest:
Dowiesz się, jak skompilować własne jądro Linux.
To nie jest coś, co musisz zrobić, aby uzyskać większą prędkość / pamięć / xxx cokolwiek. Jest to cenna rzecz do zrobienia, jeśli czujesz, że jesteś na etapie rozwoju. Jeśli chcesz głębiej zrozumieć, na czym polega cała ta sprawa „open source”, jak i jakie są różne części jądra, powinieneś spróbować. Jeśli chcesz tylko przyspieszyć swój rozruch o 3 sekundy, to ... o co chodzi ... idź kupić SSD. Jeśli jesteś ciekawy, jeśli chcesz się uczyć, to skompilowanie własnego jądra jest świetnym pomysłem i prawdopodobnie z niego wiele skorzystasz.
Mając to na uwadze, istnieje kilka konkretnych powodów, dla których właściwe byłoby skompilowanie własnego jądra (jak wskazało kilka osób w innych odpowiedziach). Zasadniczo wynikają one z konkretnej potrzeby konkretnego wyniku, na przykład:
Problem polega na myśleniu, że kompilacja własnego jądra wiąże się z pewnymi istotnymi korzyściami, gdy wszystko działa już tak, jak powinno, i nie sądzę, że tak jest. Chociaż możesz spędzić niezliczone godziny na wyłączaniu rzeczy, których nie potrzebujesz i poprawianiu rzeczy, które można ulepszyć, faktem jest, że jądro Linuksa jest już dość dobrze dostrojone (według twojej dystrybucji) w większości sytuacji użytkowników.
Większość użytkowników nie musi kompilować własnego jądra, ich dystrybucja wykonała dla nich tę pracę. Zwykle dystrybucje zawierają zestaw poprawek do zintegrowania z niektórymi częściami sposobu działania dystrybucji, backportami sterowników urządzeń i poprawkami z nowszych, ale niepublikowanych wersji jądra lub funkcji, które są pionierami wśród swoich użytkowników.
Kiedy kompilujesz własne jądro, masz kilka opcji, możesz skompilować oficjalne jądro Linusa Torvaldsa, nie będzie to obejmowało żadnych łat ani dostosowań dodanych przez twoją dystrybucję (które mogą być dobre lub złe) lub możesz użyj narzędzia do przebudowy dystrybucji, aby zbudować własne jądro.
Powody, dla których możesz chcieć odbudować jądro to:
Wielu programistów używa go do tworzenia niestandardowych wersji jądra dla systemów osadzonych lub urządzeń typu set-box, w których potrzebują specjalnych sterowników urządzeń lub chcą usunąć funkcje, których nie potrzebują.
bisect
ing, aby dowiedzieć się, gdzie został wprowadzony błąd ...
Samodzielna kompilacja jądra pozwala na dołączenie tylko części istotnych dla twojego komputera, co czyni go mniejszym i potencjalnie szybszym, szczególnie podczas uruchamiania. Ogólne jądra muszą zawierać wsparcie dla jak największej ilości sprzętu; w czasie rozruchu wykrywają sprzęt podłączony do komputera i ładują odpowiednie moduły, ale zajmuje to dużo czasu i muszą załadować moduły dynamiczne, a nie kod upieczony bezpośrednio w jądrze. Nie ma powodu, aby jądro obsługiwało 400 różnych procesorów, gdy w komputerze jest tylko jeden, lub wspierać myszy Bluetooth, jeśli go nie masz, to wszystko zmarnowane miejsce, które możesz zwolnić
Nie mogę uwierzyć, że przyjęta tutaj odpowiedź zaczyna się od stwierdzenia: „To nie jest coś, co musisz zrobić, aby uzyskać większą prędkość / pamięć / xxx cokolwiek”.
To jest całkowicie fałszywe. Rutynowo buduję własne jądra, aby zarówno usuwać niepotrzebny kod, jak i dołączać kod zwiększający wydajność, głównie związany ze sprzętem. Na przykład korzystam ze starszego sprzętu i mogę uzyskać pewien wzrost wydajności, włączając rzadko włączane sterowniki jądra, takie jak obsługa mikroukładu HPT36x w niektórych starszych MoBos, które mają tę wbudowaną funkcję.
Kolejny przykład, BIG SMP pod Slackware jest domyślny i na przykład na Dell 2800 zużyje znaczny ślad, aby uruchomić takie rzeczy jak GFSD (nie jako moduł jądra), który, nawiasem mówiąc, zużywa tagi procesora dla czegoś, co I nie potrzebuję Podobnie dla NFSD i innych catch-all, aby zadowolić wszystkie mentalności, co jest w porządku, jeśli próbujesz uruchomić Linuksa na komputerze i działać, ale jeśli zależy ci na „szybkości / pamięci / xxx cokolwiek”, to te rzeczy mają znaczenie i działają .
Wszystkie moje pudełka produkcyjne to niestandardowe jądra. Jeśli korzystam ze zwykłego sprzętu, takiego jak sprzęt Dell (2800, 2850, 2900 itp.), Wystarczy skopiować plik .config jądra do każdego urządzenia, skompilować jądro i zainstalować.
Oto kilka sytuacji, w których kompilacja własnego jądra przyniesie korzyści:
Jądro z wyłączonym ładowaniem modułu jest bezpieczniejsze. Będzie to wymagało wybrania modułów, o których wiesz, że potrzebujesz i włączenia ich jako części jądra, a nie kompilacji ich jako modułów.
Wyłączenie wsparcia dla / dev / kmem lub okaleczenie go odpowiednią opcją kompilatora jest dobrym rozwiązaniem dla bezpieczeństwa. Myślę, że większość dystrybucji robi to teraz domyślnie.
Wolę nie używać initrd, jeśli to możliwe. Dostosowanie jądra do sprzętu, z którego uruchamia się, eliminuje initrd.
Czasami późniejsza wersja jądra będzie miała potrzebne funkcje, ale dzisiaj jest to bardzo rzadkie. Pamiętam, kiedy po raz pierwszy zacząłem używać Debiana, używałem jądra 2.4, ale potrzebowałem jądra 2.6 do obsługi udev.
Wyłączenie niepotrzebnych protokołów / opcji sieciowych może przyspieszyć działanie protokołu TCP / IP.
Wyłączenie niepotrzebnych opcji obniża zużycie pamięci jądra, co jest ważne w środowiskach o niskiej pamięci RAM. Pomaga to w przypadku korzystania z 256 MB systemu RAM jako routera.
Uważam, że wszystkie urządzenia „tty” w / dev są denerwujące w systemach, w których generalnie loguję się tylko przez port szeregowy lub ssh.
Kompilacja własnego jądra pozwala uczestniczyć w procesie rozwoju jądra, niezależnie od tego, czy jest to proste, takie jak dostarczanie identyfikatorów urządzeń PCI / USB dla istniejącego sterownika, który może sprawić, że nowsze urządzenie będzie działać, aby głęboko zaangażować się w walkę rdzenia rozwój jądra.
Pozwala także testować jądra programistyczne na sprzęcie i przekazywać informacje zwrotne w przypadku zauważenia jakichkolwiek regresji. Może to być szczególnie pomocne dla Ciebie i innych osób, jeśli masz nietypowy sprzęt. Jeśli czekasz na jądro dystrybucji, może upłynąć trochę czasu, zanim poprawki z raportów o problemach zostaną przefiltrowane do nowej wersji jądra dystrybucji.
Osobiście lubię też kompilować własne jądra, aby zapewnić obsługę tylko posiadanego sprzętu. Kiedy uruchamiasz jądra dystrybucyjne i patrzysz na wynik lsmod(8)
, widzisz wiele modułów załadowanych dla sprzętu, którego nie masz. Może to skazić listę modułów, / proc, / sys i twoje logi, tak że gdy czegoś szukasz, może się ukryć wśród hałasu; Nie możesz być również w 100% pewien, że te moduły nie przyczyniają się do problemu, który próbujesz zdiagnozować.
Druga odpowiedź gabe. (Mój komentarz jest za długi, więc zamieszczam jako odpowiedź).
Jeśli nie masz wysoce wyspecjalizowanego celu (np. Wbudowane maszyny, ścisłe profilowanie bezpieczeństwa), nie widzę żadnych praktycznych korzyści z kompilacji własnego jądra poza tym, jak to zrobić. Metodyczne przeglądanie opcji i sprawdzanie, jak współdziałają ze sobą w celu zbudowania systemu, jest świetnym sposobem na zrozumienie działania systemu. To niesamowite, co dowiadujesz się, gdy próbujesz usunąć komponenty, które wydają się nie mieć żadnego celu dla zadań, które próbujesz wykonać.
Ostrzegamy jednak - dlaczego zeskakiwanie do króliczej nory jest niewątpliwie ekscytujące, wysysa więcej nocy i weekendów, niż myślałeś, że to możliwe!
W pracy używamy ręcznie zwijanych jąder, aby stosować łatki spoza drzewa, takie jak vserver i unionfs.
W domu kompiluję ręcznie zwijane jądra, aby sprawdzić, które zatwierdzenie wprowadziło występujący błąd. Kiedy to skończę, prawdopodobnie przykleję się do ręcznie zwijanego jądra, dopóki błąd nie zostanie naprawiony w mojej dystrybucji (Debian), w którym to momencie powrócę do ich jąder.
Wątek ten ma już wiele lat, a mimo to jest aktualny, tak jak wtedy, gdy zadano pytanie!
Odpowiedź brzmi: kompilujesz wybrane jądro Linuksa zgodnie z potrzebami i wymaganiami.
Wiele scenariuszy jest poprawnych:
Jesteś inżynierem i wymaga twojej kompilacji do spełnienia wymagań / wymagań dotyczących wydajności i bezpieczeństwa twojego systemu, rekompilujesz, aby spełnić i / lub przekroczyć określone kryteria.
Jesteś zwykłym użytkownikiem i masz stary system, który chcesz kontynuować tak długo, jak to możliwe, rekompilujesz, aby dodać / usunąć komponenty, aby zoptymalizować stary system.
Jesteś zwykłym użytkownikiem z najnowszym najszybszym sprzętem i ma on więcej niż wystarczającą ilość pamięci / pamięci RAM. Nie ma potrzeby ponownej kompilacji, ale nadal możesz, jeśli chcesz dowiedzieć się więcej o swoim systemie.
Po prostu chcesz być jak codzienny użytkownik Microsoft i / lub Mac, nie rekompiluj i po prostu korzystaj z aktualizacji z dystrybucji.
Nadchodzące scenariusze :-)
W przeciwieństwie do użytkowników komputerów Mac / Windows Linux zapewnia wybór. Wybór, aby ułatwić lub zoptymalizować system do swoich wymagań.
W przypadku większości zastosowań ogólne jądra są odpowiednie dla praktycznie dowolnego sprzętu. Dodatkowo zazwyczaj zawierają (ed) łaty specyficzne dla dystrybucji, więc skompilowanie własnego jądra może (może) powodować problemy.
Rezonsem do kompilacji własnego jądra są:
Gdybym nie używał dystrybucji opartej na źródłach, w ogóle nie skompilowałbym jądra.
Innym przypadkiem poza wieloma wymienionymi tutaj dla niestandardowych skompilowanych jąder jest konfigurowanie specjalistycznych sieciowych środowisk rozruchowych, w których ładowanie modułów nie jest możliwe i trzeba przekazywać w pełni działające jądra do określonych maszyn do określonych zadań.
Dziwi mnie, że nikt nie wspomniał o tym powodzie kompilacji niestandardowego jądra:
ponieważ chcesz użyć innego kompilatora C / c ++. GCC jest całkiem dobry do kompilacji jądra Linuksa. Ale są tam znacznie lepsze kompilatory! Optymalizacje GCC są nieco za kompilatorem C / C ++ Intela. Intel dostarcza biblioteki prymitywów wydajności i narzędzie vtune, które są niezbędne do stworzenia wysokowydajnego jądra Linux. Do tej pory możesz dostać się tylko dzięki GCC i G ++. Praktycznie bez względu na to, co robisz, wynik będzie ograniczony przez kompilator. Używam więc kompilatora Intel i bibliotek wydajności. Jest trochę duży - pobiera 1,5 GB, ale daje to pojęcie o tym, co jest zawarte w dobrym kompilatorze.
Kompilator C / C ++ firmy Intel jest dostępny bezpłatnie do użytku niekomercyjnego. Łatwiej jest jednak przejrzeć stronę pobierania niekomercyjnej licencji kompilatora Intel c ++, aby przeszukać witrynę firmy Intel. Zwykle nie używam GCC / G ++ do niczego. I nie musisz być programistą. Wystarczy ustawić środowisko i zmienić dwie linie w pliku make, aby wskazywały na kompilator Intela.
Wtedy możesz uzyskać poważną prędkość!
What are the pros and cons of compiling your own kernel?
Cons = niełatwe, wiele sytuacji bez wartości dodanej. Plusy = bezpieczeństwo, wydajność, jeśli wiesz, co robisz, na przykład urządzenia NAS, używając Linuksa, aby jakiś sprzęt działał i miał możliwości sieciowe i graficzne.