Linked by David Adams on Wed 13th Aug 2008 16:57 UTC, submitted by irbis
Thread beginning with comment 326881
To view parent comment, click here.
To read all comments associated with this story, please click here.
To view parent comment, click here.
To read all comments associated with this story, please click here.
microkernels are a total waste of time in all but a very small context of uses, and their use is even debatable there.
I don't think that just theory and debates via e-mail are the best way to benchmark this claims... benchmarks and real-world usage are probably a lot more relevant.
Some things should be in the table too... like the fact that we're living in a world where the type of information processed and the way processors (CPU and GPU/GPGPU) work, and also how this processing is done (not just predictable data, but live data from the network and the internet... where scheduling has a really large hole in the final performance.)
As for the benchmark, BeOS/Haiku is a nice contender for the tests.
BeOS/Haiku example is even nicer, because originally, its Network stack was all user space, but eventually got changed to a kernel space one.
The thing is, there's no one answer for everything, but better answers for each situation. If you have a highly predictable use scenario, a monolithic kernel could be the best answer, as is complexity will probably be smaller. If you have a highly complex system, with hundreds of different software connecting together, and complexity is your main issue... you may prefer to isolate each process, run as much as you can in user space... depending of you use scenario, you may not see any performance loss, but you may find the hole system a lot easier of maintain and a lot easier to find bugs, extend, etc...
Again, BeOS/Haiku may show you the kind of "perceivable performance" gains and harmonic utilization of system resources by various processes...
QNX is a fabulously successful microkernel OS that is used in the embedded market, where up times have to be tremendously long (like never crash). That's where microkernels come into use.
Also, AFAIK, Symbian is a microkernel.
But true, for general server and desktop usage, monolithic kernels are more practical.
But microkernels have their place.






Member since:
2005-07-06
It's funny. Even after all this time (eighteen years after Torvalds's and Tanenbaum's e-mail exchange) people just don't get that IPC in a kernel is colossally expensive. Until we get hardware that has unlimited resources and where there is no cost in increasing the layers in a system, microkernels are a total waste of time in all but a very small context of uses, and their use is even debatable there. Embedded devices with limited resources, such as Tanenbaum's TV example in the argument, is even funnier. It still matters, and will matter for a very, very long time.
IPC and distributed system are also unbelievably complex to get right as anyone knows, which means I have always laughed at the simplicity arguments of microkernel proponents. You also have to do lots of ludicrously expensive things such as copy data. There are lots of implications involved.
Think about this: the reason why people talk about microkernels as great is because they are assuming that they'll fail, and assuming failure, before a single line of code is written and assuming that everything will be fine because they have a microkernel. Kernels are a unique piece of software (it's where everything starts, obviously) where that kind of attitude is a tad dangerous. It's really a self-fulfilling prophecy.
I have never seen one piece of evidence that shows me that in all the uses that kernels have in the world, microkernels make an appreciable positive difference in reliability, especially versus more immediate performance concerns.
That really strikes at the heart of the matter - there is no evidence that microkernels actually matter or make a difference in pretty much all the uses out there. The part of the article where we get to see that Tanenbaum still has no practical sense whatsoever is where he talks about using a microkernel to keep a TV running. It's one of those hypothetical, academic things of no practical use. Well, people have been doing that for a long time now, and what they generally do is cut down a kernel (usually Linux these days) to the bare minimum to run on hardware that has a limited set of uses - which is how QNX is used anyway. If we saw a microkernel run on systems that do many different things, then we'd see how reliable it really is - but we don't.
Certainly in a device like a TV, of more paramount importance is the general responsiveness of the system, and the failure of a TV set is almost always a result of the software running on top (or the hardware), not the kernel, and that's the part with all the functionality. Even then though, if one part of your kernel fails it is still a failure (it's a kernel!) which usually takes down most of the system regardless, and this is what Andrew still fails to get conceptually about them. You just end up going round in large circles of complexity looking for mythical holy grails of simplicity, reliability and security.
I actually feel pretty sad for him that he still thinks that way after all this time, and sad for most microkernel components who haven't paid attention to practice rather than academic theory.