Performance du micro-noyau par rapport au noyau monolithique


14

Un micro-noyau implémente tous les pilotes en tant que programmes d'espace utilisateur et implémente des fonctionnalités de base comme IPC dans le noyau lui-même. Un noyau monolithique, cependant, implémente les pilotes en tant que partie du noyau (par exemple, s'exécute en mode noyau).

J'ai lu certaines affirmations selon lesquelles les micro-noyaux sont plus lents que les noyaux monolithiques, car ils doivent gérer le message passant entre les pilotes dans l'espace utilisateur. Est-ce vrai?

Pendant longtemps, la plupart des noyaux étaient monolithiques car le matériel était trop lent pour exécuter rapidement les micro-noyaux. Cependant, il existe maintenant de nombreux micro-noyaux et noyaux hybrides, comme GNU / Hurd, Mac OS X, Windows NT, etc.

Alors, est-ce que les performances des micro-noyaux ont changé? Cette critique des micro-noyaux est-elle toujours valable aujourd'hui?

Réponses:


11

Comme c'est toujours la réponse (ou au moins la préface) aux questions liées aux performances: connaissez votre domaine de problème, exécutez des tests comparatifs et souvenez - vous de ce qu'est l'optimisation prématurée .

Premièrement, aucun essai de benchmarking complet n'a comparé les noyaux monolithiques aux systèmes de micro-noyaux de génération actuelle qui fonctionnent de manière équivalente. Ainsi, bien qu'il puisse y avoir des essais qui comparent des éléments spécifiques de ces noyaux, ils ne seront pas représentatifs de la "vue d'ensemble" que votre question cherche à brosser.

Cela étant dit, il existe des observations extrêmement divergentes sur les performances du noyau à travers les micro-noyaux; par exemple, on peut dire que la famille de micro-noyaux L4 a des performances IPC d'un ordre de grandeur supérieures à celles du noyau Mach. Mais tous les appareils Apple de cette décennie utilisent Mach, et ils semblent fonctionner très rapidement, non?

La morale de l'histoire est que quiconque décide de l'architecture du noyau à utiliser doit d'abord décider quel est son objectif ultime. Les systèmes à micro-noyaux sont (lorsqu'ils sont correctement mis en œuvre, bien sûr) plus sûrs, maintenables et modulaires. Cependant, ils peuvent être difficiles à concevoir correctement et peuvent présenter des surcoûts de performances par rapport à une implémentation monolithique. Un noyau monolithique sera plus rapide, mais la sécurité sera plus difficile à implémenter et il sera moins modulaire et moins facile à personnaliser.

Votre architecture de noyau doit être basée sur votre objectif final.

(Et quand tout le reste échoue, essayez-le dans les deux sens et voyez ce qui se passe.)


"Mais tous les appareils Apple de cette décennie utilisent Mach, et ils semblent fonctionner très rapidement, non?" Ce n'est que partiellement correct. "Le noyau de Darwin est XNU, un noyau hybride qui utilise OSFMK 7.3 (Open Software Foundation Mach Kernel) de l'OSF, divers éléments de BSD (y compris le modèle de processus, la pile réseau et le système de fichiers virtuel), et un orienté objet API de pilote de périphérique appelée I / O Kit. La conception du noyau hybride offre la flexibilité d'un micro-noyau et les performances d'un noyau monolithique. "
Behrang Saeedzadeh

4

Je préfère appeler Windows NT et le noyau XNU d'Apple au lieu d'hybride. Je ne trouve pas que la classification des hybrides ait beaucoup de sens dans la pratique. En fait, l'un des ingénieurs d'origine de XNU l'appelle monolithique [1].

En ce qui concerne les performances, la seule comparaison vraiment approfondie entre monolithique et micro que je puisse trouver est "Extreme High Performance Computing or Why Microkerenels Suck" [2] et une présentation de réfutation "Do Microkernels Suck?" [3].

La modularité et la personnalisation sont davantage des problèmes de conception que des limitations inhérentes aux noyaux monolithiques. Le noyau Linux, par exemple, peut varier de plusieurs mégaoctets à environ un mégaoctet en fonction des options de compilation et de l'application de certains correctifs. La grande majorité des 15 millions de lignes de code de Linux sont des modules de noyau chargeables. Ils sont compilés séparément du noyau de base et ne sont chargés qu'en cas de besoin. Ces modules peuvent implémenter des pilotes et des appels système (même remplacer les appels système de base).

Les deux domaines dans lesquels les micro-noyaux ont un avantage incontesté sont les systèmes d'exploitation en temps réel à faible mémoire (<= 512 Ko de RAM) ou «durs», comme les systèmes de vol des compagnies aériennes ou les systèmes de contrôle des réacteurs nucléaires.

Edit: Parlant plus avant des avantages et des inconvénients de l'une ou l'autre architecture du noyau, Gernot Heiser admet librement à la fin de sa présentation [3] que les noyaux monolithiques sont intrinsèquement plus performants car un micro-noyau a toujours une surcharge supplémentaire. Cependant, cette surcharge supplémentaire conduit à une fiabilité accrue, d'où la domination des micro-noyaux sur RTOS.

[1] Louis G. Gerbarg, "Synchronisation avancée sous Mac OS X: étendre Unix à SMP et en temps réel", Actes de la conférence BSDCon 2002, pp. 2

[2] Chistoph Lameter, "Calcul haute performance extrême ou pourquoi les micro-noyaux sucent", 2007 Linux Symposium, Volume One

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


Je classais XNU et Windows NT comme noyaux "hybrides"
mmk

Merci @DW pour l'accueil. J'ai un peu nettoyé mon message et ajouté des citations.
Ironlenny

@mmk Désolé, vous les avez appelés hybrides, j'étais pressé de publier mon article et de le mal lire.
Ironlenny
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.