Kinerja microkernel vs kernel monolitik

14

Sebuah microkernel mengimplementasikan semua driver sebagai program ruang pengguna, dan mengimplementasikan fitur-fitur inti seperti IPC di dalam kernel itu sendiri. Kernel monolitik, bagaimanapun, mengimplementasikan driver sebagai bagian dari kernel (misalnya berjalan dalam mode kernel).

Saya telah membaca beberapa klaim bahwa microkernels lebih lambat dari kernel monolithic, karena mereka perlu menangani pengiriman pesan antar driver di ruang pengguna. Apakah ini benar?

Untuk waktu yang lama, kebanyakan kernel monolitik karena perangkat kerasnya terlalu lambat untuk menjalankan kernel mikro dengan cepat. Namun, sekarang ada banyak microkernels dan kernel hybrid, seperti GNU / Hurd, Mac OS X, Windows NT line, dll.

Jadi, apakah ada yang berubah tentang kinerja microkernels? Apakah kritik terhadap kernel mikro ini masih berlaku hari ini?

mmk
sumber

Jawaban:

11

Seperti selalu merupakan jawaban (atau setidaknya kata pengantar) untuk pertanyaan terkait kinerja: ketahui domain masalah Anda, jalankan tolok ukur komparatif, dan ingat apa itu optimasi prematur .

Pertama, tidak ada uji coba pembandingan yang komprehensif yang membandingkan kernel monolitik dengan sistem kernel generasi terbaru yang beroperasi dengan cara yang setara. Jadi, walaupun mungkin ada uji coba yang membandingkan elemen spesifik dari kernel tersebut, mereka tidak akan mewakili "gambaran besar" yang ingin dilukis oleh pertanyaan Anda.

Dengan itu, ada pengamatan yang sangat berbeda dari kinerja kernel di microkernels; misalnya, keluarga microkernel L4 dapat dikatakan memiliki kinerja IPC urutan besarnya lebih tinggi dari kernel Mach. Tetapi setiap perangkat Apple dari dekade ini menjalankan Mach, dan mereka tampaknya bekerja sangat cepat, bukan?

Moral dari cerita ini adalah bahwa siapa pun yang memutuskan apa arsitektur kernel untuk digunakan perlu terlebih dahulu memutuskan apa tujuan akhir mereka. Sistem mikrokernel (bila diterapkan dengan benar, tentu saja) lebih aman, dapat dipelihara, dan modular. Namun, mereka bisa sulit untuk arsitek dengan benar, dan mungkin memiliki kinerja overhead daripada implementasi monolitik. Kernel monolitik akan lebih cepat, tetapi keamanan akan lebih sulit untuk diterapkan dan itu akan kurang modular dan kurang mudah untuk disesuaikan.

Arsitektur kernel Anda harus didasarkan pada apa tujuan akhir Anda.

(Dan ketika semuanya gagal, cobalah keduanya dan lihat apa yang terjadi.)

Adam Maras
sumber
"Tapi setiap perangkat Apple dari dekade ini menjalankan Mach, dan mereka tampaknya bekerja sangat cepat, kan?" Itu hanya sebagian benar. "Kernel Darwin adalah XNU, sebuah kernel hybrid yang menggunakan OSFMK 7.3 (Open Software Foundation Mach Kernel) dari OSF, berbagai elemen BSD (termasuk model proses, tumpukan jaringan, dan sistem file virtual), dan berorientasi objek API driver perangkat yang disebut I / O Kit. Desain kernel hybrid memberikan fleksibilitas mikrokernel dan kinerja kernel monolitik. "
Behrang Saeedzadeh
4

Saya lebih suka menyebut Windows NT dan Apple XNU kernel monolithic daripada hybrid. Saya tidak menemukan klasifikasi hibrida memiliki banyak makna dalam praktiknya. Bahkan salah satu insinyur asli XNU menyebutnya monolitik [1].

Pada masalah kinerja, satu-satunya perbandingan monolitik vs mikro yang dapat saya temukan adalah "Komputasi Kinerja Tinggi Ekstrim atau Mengapa Microkerenels Sedot" [2] dan presentasi bantahan "Do Microkernels Suck?" [3].

Modularitas dan customizablity lebih banyak masalah desain daripada keterbatasan yang melekat dalam kernel monolitik. Kernel Linux, misalnya, dapat berkisar dari beberapa megabyte hingga sekitar satu megabyte dalam ukuran tergantung pada opsi waktu kompilasi dan penerapan tambalan tertentu. Sebagian besar dari 15 juta baris kode Linux ditambah adalah modul kernel yang dapat dimuat. Mereka dikompilasi secara terpisah dari kernel dasar dan hanya dimuat ketika dibutuhkan. Modul-modul itu dapat mengimplementasikan driver dan panggilan sistem (bahkan mengesampingkan panggilan sistem dasar).

Dua area di mana microkernels memiliki keunggulan yang tidak perlu dipersoalkan adalah dalam memori rendah (<= 512k ram) atau sistem operasi "keras" Real-time, seperti sistem penerbangan maskapai atau sistem kontrol reaktor nuklir.

Sunting: Berbicara lebih lanjut tentang kelebihan dan kekurangan dari kedua arsitektur kernel, Gernot Heiser dengan bebas mengakui pada akhir presentasinya [3] bahwa kernel monolitik secara inheren lebih berkinerja karena sebuah microkernel selalu memiliki beberapa overhead tambahan. Padahal, overhead tambahan itu mengarah pada peningkatan keandalan, karenanya dominasi kernel mikro RTOS.

[1] Louis G. Gerbarg, "Sinkronisasi Lanjutan di Mac OS X: Memperluas Unix ke SMP dan Real-Time", Prosiding Konferensi BSDCon 2002, hlm. 2

[2] Chistoph Lameter, "Komputasi Kinerja Tinggi Ekstrim atau Mengapa Microkernels Sedot", Simposium Linux 2007, Volume One

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

Ironlenny
sumber
Saya mengklasifikasikan XNU dan Windows NT sebagai kernel "hybrid"
mmk
Terima kasih @DW atas sambutannya. Saya telah sedikit membersihkan posting saya, dan menambahkan kutipan.
Ironlenny
@mmk Maaf, Anda menyebut mereka hibrida, saya hanya terburu-buru untuk membuat posting saya dan salah baca.
Ironlenny