Prestazioni di microkernel vs kernel monolitico


14

Un microkernel implementa tutti i driver come programmi per lo spazio utente e implementa funzionalità di base come IPC nel kernel stesso. Un kernel monolitico, tuttavia, implementa i driver come parte del kernel (ad es. Gira in modalità kernel).

Ho letto alcune affermazioni secondo cui i microkernel sono più lenti dei kernel monolitici, poiché devono gestire il passaggio dei messaggi tra i driver nello spazio utente. È vero?

Per molto tempo, la maggior parte dei kernel era monolitica perché l'hardware era troppo lento per eseguire rapidamente i micro-kernel. Tuttavia, ora ci sono molti micro-kernel e kernel ibridi, come GNU / Hurd, Mac OS X, Windows NT line, ecc.

Quindi, è cambiato qualcosa riguardo alle prestazioni dei microkernel? Questa critica ai microkernels è ancora valida oggi?

Risposte:


11

Come sempre è la risposta (o almeno la prefazione) alle domande relative alle prestazioni: conoscere il dominio del problema, eseguire benchmark comparativi e ricordare cos'è l'ottimizzazione prematura .

Innanzitutto, nessuno studio comparativo completo ha confrontato i kernel monolitici con i sistemi di microkernel di generazione attuale che funzionano in modo equivalente. Quindi, mentre potrebbero esserci delle prove che mettono a confronto elementi specifici di quei kernel, non saranno rappresentativi del "quadro generale" che la tua domanda sta cercando di dipingere.

Detto questo, ci sono osservazioni selvaggiamente divergenti sulle prestazioni del kernel attraverso i micro kernel; per esempio, si può dire che la famiglia di microkernel L4 abbia prestazioni IPC di un ordine di grandezza superiore al kernel Mach. Ma tutti i dispositivi Apple di questo decennio utilizzano Mach e sembrano funzionare molto velocemente, giusto?

La morale della storia è che chiunque decida quale architettura del kernel usare deve prima decidere quale sia il suo obiettivo finale. I sistemi di microkernel sono (se correttamente implementati, ovviamente) più sicuri, gestibili e modulari. Tuttavia, possono essere difficili da progettare correttamente e possono avere un sovraccarico di prestazioni rispetto a un'implementazione monolitica. Un kernel monolitico sarà più veloce, ma la sicurezza sarà più difficile da implementare e sarà meno modulare e meno facile da personalizzare.

L'architettura del kernel dovrebbe essere basata sull'obiettivo finale.

(E quando tutto il resto fallisce, provalo in entrambi i modi e vedi cosa succede.)


"Ma tutti i dispositivi Apple di questo decennio utilizzano Mach e sembrano funzionare molto velocemente, giusto?" Questo è solo parzialmente corretto. "Il kernel di Darwin è XNU, un kernel ibrido che utilizza OSFMK 7.3 (Open Software Foundation Mach Kernel) dell'OSF, vari elementi di BSD (inclusi il modello di processo, lo stack di rete e il file system virtuale) e un oggetto orientato agli oggetti API del driver di dispositivo denominata I / O Kit. Il design del kernel ibrido offre la flessibilità di un microkernel e le prestazioni di un kernel monolitico. "
Behrang Saeedzadeh

4

Preferisco chiamare Windows NT e il kernel XNU di Apple monolitico anziché ibrido. Non trovo che la classificazione dell'ibrido abbia molto significato nella pratica. In effetti uno degli ingegneri originali di XNU lo chiama monolitico [1].

Per quanto riguarda le prestazioni, l'unico confronto davvero approfondito tra monolitico e micro che posso trovare è "Calcolo delle prestazioni estreme o Perché i microkerenels succhiano" [2] e una presentazione di confutazione "Do Microkernels Suck?" [3].

La modularità e la personalizzazione sono più problemi di progettazione che limitazioni intrinseche nei kernel monolitici. Il kernel Linux, ad esempio, può variare da diversi megabyte a circa un megabyte di dimensioni in base alle opzioni di compilazione e all'applicazione di alcune patch. La stragrande maggioranza delle oltre 15 milioni di righe di codice di Linux sono moduli kernel caricabili. Sono compilati separatamente dal kernel di base e caricati solo quando necessario. Tali moduli possono implementare driver e chiamate di sistema (anche ignorando le chiamate di sistema di base).

Le due aree in cui i microkernel presentano un vantaggio indiscusso sono la memoria insufficiente (<= 512k ram) o i sistemi operativi "hard" in tempo reale, come i sistemi di volo delle compagnie aeree o i sistemi di controllo dei reattori nucleari.

Modifica: Parlando ulteriormente dei vantaggi e degli svantaggi dell'architettura del kernel, Gernot Heiser ammette liberamente alla fine della sua presentazione [3] che i kernel monolitici sono intrinsecamente più performanti perché un microkernel ha sempre qualche sovraccarico in più. Tuttavia, quel sovraccarico aggiuntivo comporta una maggiore affidabilità, quindi il dominio dei microkernels di RTOS.

[1] Louis G. Gerbarg, "Sincronizzazione avanzata in Mac OS X: estensione di Unix a SMP e in tempo reale", Atti della conferenza BSDCon 2002, pagg. 2

[2] Chistoph Lameter, "Elaborazione ad alte prestazioni estreme o perché i microkernels fanno schifo", Symposium Linux 2007, Volume One

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


Stavo classificando XNU e Windows NT come kernel "ibridi"
mmk

Grazie @DW per il benvenuto. Ho ripulito un po 'il mio post e aggiunto citazioni.
Ironlenny,

@mmk Mi dispiace, li hai chiamati ibridi, avevo solo fretta di scrivere e leggere male il mio post.
Ironlenny,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.