Leistung des Mikrokerns gegenüber dem monolithischen Kernel


14

Ein Mikrokernel implementiert alle Treiber als User-Space-Programme und implementiert Kernfunktionen wie IPC im Kernel. Ein monolithischer Kernel implementiert die Treiber jedoch als Teil des Kernels (läuft zB im Kernel-Modus).

Ich habe einige Behauptungen gelesen, dass Mikrokerne langsamer sind als monolithische Kernel, da sie die Nachrichten verarbeiten müssen, die im Benutzerbereich zwischen den Treibern ausgetauscht werden. Ist das wahr?

Lange Zeit waren die meisten Kernel monolithisch, weil die Hardware zu langsam war, um Mikrokerne schnell auszuführen. Mittlerweile gibt es jedoch viele Mikrokerne und Hybridkerne wie GNU / Hurd, Mac OS X, Windows NT usw.

Hat sich also etwas an der Leistung von Mikrokernen geändert? Ist diese Kritik an Mikrokernen heute noch gültig?

Antworten:


11

Wie immer die Antwort (oder zumindest das Vorwort) auf leistungsbezogene Fragen: Kennen Sie Ihre Problemdomäne, führen Sie vergleichende Benchmarks durch und merken Sie sich, was vorzeitige Optimierung ist .

Erstens haben keine umfassenden Benchmarking-Versuche monolithische Kernel mit Mikrokernelsystemen der aktuellen Generation verglichen, die auf äquivalente Weise funktionieren. Während es also Versuche gibt, die bestimmte Elemente dieser Kernel vergleichen, werden sie nicht repräsentativ für das "große Bild" sein, das Ihre Frage zeichnen soll.

Davon abgesehen gibt es sehr unterschiedliche Beobachtungen der Kernel-Leistung über Mikrokerne hinweg. Man kann beispielsweise sagen, dass die L4-Mikrokernfamilie eine um eine Größenordnung höhere IPC-Leistung aufweist als der Mach-Kernel. Aber auf jedem Apple-Gerät in diesem Jahrzehnt läuft Mach, und sie scheinen ziemlich schnell zu funktionieren, oder?

Die Moral der Geschichte ist, dass jeder, der sich für eine Kernel-Architektur entscheidet, zuerst entscheiden muss, was sein Endziel ist. Mikrokernelsysteme sind (natürlich bei richtiger Implementierung) sicherer, wartbarer und modularer. Es kann jedoch schwierig sein, eine ordnungsgemäße Architektur zu erstellen, und die Leistung kann gegenüber einer monolithischen Implementierung beeinträchtigt werden. Ein monolithischer Kernel ist schneller, aber die Implementierung von Sicherheit ist schwieriger, und er ist weniger modular und lässt sich weniger leicht anpassen.

Ihre Kernel-Architektur sollte auf Ihrem Endziel basieren.

(Und wenn alles andere fehlschlägt, versuchen Sie es in beide Richtungen und sehen Sie, was passiert.)


"Aber auf jedem Apple-Gerät in diesem Jahrzehnt läuft Mach, und sie scheinen ziemlich schnell zu funktionieren, oder?" Das ist nur teilweise richtig. "Der Kernel von Darwin ist XNU, ein Hybridkernel, der OSFMK 7.3 (Open Software Foundation Mach Kernel) aus dem OSF, verschiedene BSD-Elemente (einschließlich Prozessmodell, Netzwerkstapel und virtuelles Dateisystem) und ein objektorientiertes Kernel verwendet Gerätetreiber-API namens I / O Kit. Das Hybrid-Kernel-Design bietet die Flexibilität eines Mikrokerns und die Leistung eines monolithischen Kernels. "
Behrang Saeedzadeh

4

Ich bevorzuge es, Windows NT und Apples XNU-Kernel als monolithisch anstatt als hybrid zu bezeichnen. Ich finde, dass die Klassifizierung von Hybriden in der Praxis keine große Bedeutung hat. Tatsächlich nennt es einer der ursprünglichen Ingenieure von XNU monolithisch [1].

Was die Leistung anbelangt, so ist der einzige wirklich tiefgreifende Vergleich zwischen monolithischem und Mikro-Computer, den ich finden kann, "Extreme High Performance Computing oder Why Microkerenels Suck" [2] und eine Gegenpräsentation "Do Microkernels Suck?" [3].

Modularität und Anpassbarkeit sind mehr Designprobleme als inhärente Einschränkungen bei monolithischen Kerneln. Der Linux-Kernel kann beispielsweise zwischen mehreren Megabyte und etwa einem Megabyte groß sein, abhängig von den Kompilierungsoptionen und der Anwendung bestimmter Patches. Die überwiegende Mehrheit der über 15 Millionen Codezeilen von Linux sind ladbare Kernelmodule. Sie werden separat vom Basiskern kompiliert und nur bei Bedarf geladen. Diese Module können Treiber und Systemaufrufe implementieren (auch das Überschreiben von Basissystemaufrufen).

Die beiden Bereiche, in denen Mikrokerne einen unbestrittenen Vorteil haben, liegen im niedrigen Arbeitsspeicher (<= 512.000 RAM) oder in "harten" Echtzeitbetriebssystemen, wie etwa Flugsystemen oder Kontrollsystemen für Kernreaktoren.

Edit: Gernot Heiser gibt am Ende seiner Präsentation [3] frei zu, dass monolithische Kernel von Natur aus leistungsfähiger sind, da ein Mikrokernel immer einen zusätzlichen Overhead hat. Dieser zusätzliche Aufwand führt jedoch zu einer erhöhten Zuverlässigkeit und damit zur Dominanz von RTOS-Mikrokernen.

[1] Louis G. Gerbarg, "Erweiterte Synchronisation unter Mac OS X: Erweiterung von Unix auf SMP und Echtzeit", Proceedings of BSDCon 2002 Conference, S. 2

[2] Chistoph Lameter, "Extreme High Performance Computing oder Why Microkernels Suck", 2007 Linux Symposium, Volume One

[3] Gernot Heiser, "Do Microkernels Suck?", 9. Linux.conf.au, Januar 2008


Ich klassifizierte XNU und Windows NT als "Hybrid" -Kernel
-Kernel

Danke @DW für die Begrüßung. Ich habe meinen Beitrag ein wenig aufgeräumt und Zitate hinzugefügt.
Ironlenny

@mmk Sorry, du hast sie Hybriden genannt, ich hatte es nur eilig, meinen Beitrag zu schreiben und falsch zu lesen.
Ironlenny
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.