Wydajność mikrojądra vs jądro monolityczne

14

Mikrojądro implementuje wszystkie sterowniki jako programy przestrzeni użytkownika i implementuje podstawowe funkcje, takie jak IPC w samym jądrze. Jądro monolityczne implementuje jednak sterowniki jako część jądra (np. Działa w trybie jądra).

Czytałem niektóre twierdzenia, że ​​mikrojądra są wolniejsze niż monolityczne jądra, ponieważ muszą obsługiwać przekazywanie wiadomości między sterownikami w przestrzeni użytkownika. Czy to prawda?

Przez długi czas większość jąder była monolityczna, ponieważ sprzęt był zbyt wolny, aby szybko uruchamiać mikro-jądra. Jednak obecnie istnieje wiele mikrojądra i jąder hybrydowych, takich jak GNU / Hurd, Mac OS X, linia Windows NT itp.

Czy coś się zmieniło w wydajności mikrojądra? Czy ta krytyka mikrojądra jest nadal aktualna?

mmk
źródło

Odpowiedzi:

11

Tak jak zawsze jest odpowiedź (lub przynajmniej wstęp) na pytania związane z wydajnością: poznaj swoją domenę problemów, uruchom porównawcze testy porównawcze i pamiętaj, czym jest przedwczesna optymalizacja .

Po pierwsze, żadne kompleksowe testy porównawcze nie porównały jąder monolitycznych z systemami mikrojądra obecnej generacji, które działają w równoważny sposób. Tak więc, chociaż mogą istnieć próby porównujące określone elementy tych jąder, nie będą one reprezentatywne dla „dużego obrazu”, który twoje pytanie chce namalować.

Biorąc to pod uwagę, istnieją bardzo rozbieżne obserwacje dotyczące wydajności jądra w mikrojądrach; na przykład można powiedzieć, że rodzina mikrojądra L4 ma wydajność IPC o rząd wielkości wyższą niż jądro Macha. Ale na każdym urządzeniu Apple z tej dekady działa Mach i wydaje się, że działają dość szybko, prawda?

Morał tej historii jest taki, że każdy, kto decyduje, jakiej architektury jądra użyć, musi najpierw zdecydować, jaki jest jej ostateczny cel. Systemy mikrojądra są (przy prawidłowym wdrożeniu, oczywiście) bezpieczniejsze, łatwiejsze w utrzymaniu i modułowe. Jednak mogą być trudne do prawidłowego zaprojektowania i mogą mieć narzut wydajności w stosunku do monolitycznej implementacji. Jądro monolityczne będzie szybsze, ale zabezpieczenia będą trudniejsze do wdrożenia, a jego konfiguracja będzie mniej modularna i łatwiejsza.

Twoja architektura jądra powinna być oparta na twoim ostatecznym celu.

(A gdy wszystko inne zawiedzie, wypróbuj to w obie strony i zobacz, co się stanie.)

Adam Maras
źródło
„Ale na każdym urządzeniu Apple z tej dekady działa Mach i wydaje się, że działają dość szybko, prawda?” To tylko częściowo poprawne. „Jądro Darwina to XNU, jądro hybrydowe, które wykorzystuje OSFMK 7.3 (Open Software Foundation Mach Kernel) z OSF, różne elementy BSD (w tym model procesu, stos sieciowy i wirtualny system plików) oraz obiektowe interfejs API sterownika urządzenia o nazwie I / O Kit. Hybrydowe jądro zapewnia elastyczność mikrojądra i wydajność monolitycznego jądra. ”
Behrang Saeedzadeh
4

Wolę nazywać Windows NT i jądro Apple XNU monolityczne zamiast hybrydowego. Uważam, że klasyfikacja hybrydy nie ma większego znaczenia w praktyce. W rzeczywistości jeden z oryginalnych inżynierów XNU nazywa to monolitem [1].

Jeśli chodzi o wydajność, jedyne naprawdę dogłębne porównanie monolitów z mikro, jakie mogę znaleźć, to „Extreme High Performance Computing lub Why Microkerenels Suck” [2] oraz odparta prezentacja „Do Microkernels Suck?” [3].

Modułowość i możliwość dostosowania to więcej problemów projektowych niż nieodłączne ograniczenia w monolitycznych jądrach. Na przykład jądro Linuksa może mieć rozmiar od kilku megabajtów do około jednego megabajta, w zależności od opcji czasu kompilacji i zastosowania niektórych łatek. Zdecydowana większość ponad 15 milionów wierszy kodu Linuksa to moduły jądra do załadowania. Są one kompilowane oddzielnie od jądra podstawowego i ładowane tylko w razie potrzeby. Moduły te mogą implementować sterowniki i wywołania systemowe (nawet zastępując podstawowe wywołania systemowe).

Dwa obszary, w których mikrokernele mają niekwestionowaną przewagę, to niski poziom pamięci (<= 512 k pamięci RAM) lub „twarde” systemy operacyjne w czasie rzeczywistym, takie jak systemy lotów linii lotniczych lub systemy kontroli reaktorów jądrowych.

Edycja: Mówiąc dalej o zaletach i wadach obu architektur jądra, Gernot Heiser swobodnie przyznaje pod koniec swojej prezentacji [3], że monolityczne jądra są z natury bardziej wydajne, ponieważ mikrojądro zawsze ma pewne dodatkowe koszty. Chociaż ten dodatkowy narzut prowadzi do zwiększenia niezawodności, stąd dominacja mikrokerneli w RTOS.

[1] Louis G. Gerbarg, „Zaawansowana synchronizacja w Mac OS X: rozszerzenie systemu Unix na SMP i czas rzeczywisty”, Proceedings of BSDCon 2002 Conference, s. 2

[2] Chistoph Lameter, „Extreme High Performance Computing or Why Microkernels Suck”, 2007 Linux Symposium, Volume One

[3] Gernot Heiser, „Do Microkernels Suck?”, 9 Linux.conf.au, styczeń 2008

Ironlenny
źródło
Klasyfikowałem XNU i Windows NT jako jądra „hybrydowe”
mmk,
Dzięki @DW za powitanie. Trochę posprzątałem swój post i dodałem cytaty.
Ironlenny
@mmk Przepraszam, nazwałeś ich hybrydami. Spieszyłem się, żeby napisać mój post i źle odczytałem.
Ironlenny