Re: [OT] Comments to WinNT Mag !!

Ingo Molnar (mingo@chiara.csoma.elte.hu)
Fri, 30 Apr 1999 23:05:26 +0200 (CEST)


On Fri, 30 Apr 1999, Linux Lists wrote:

> As I don't have the technical expertise to discuss with this gentleman
> (although I think somebody _must_), I'm forwarding this URL to the list:
>
> http://www.winntmag.com/Magazine/Article.cfm?ArticleID=5048
>
> I hope you guys can address this article's issues properly. Please contact
> the author !!

While he (Mark Russinovich) does have valid points (no OS is perfect), he
is exagerating things alot at the expense of Linux, to make NT appear in a
better light. He also forgets to mention lots powerful mechanisms and
features present in the Linux kernel that give it an edge over NT, and he
forgets to mention shortcomings of NT in the same areas. But i think his
main mistake is that he is trying to find the NT API in Linux. No, Linux
is Linux. I'll try to address most of his technical points briefly:

'asynchron IO'
--------------

first he claims Linux has only select(), and then he continues to bash
select(). (without providing measurements or benchmark numbers) Then he
says that Linux _does_ have asynchron IO events implemented in 2.2 but
says that they have 'two major limitations'. Both 'limitations' he
mentions are in fact a pure implementation matter and not a mechanism or
API limitation. Mark also forgot to mention that Linux asynchron IO is
superior to NT because we do not have to poll the completion port for
events, we can have the IO event delivered _immediately_ to the target
thread (which is preempted by a signal if it's running). This gives more
flexibility of using asynchron events. (i have pointed out this difference
to him in private discussions, he left this argument unanswered)

'overscheduling'
----------------

here he again forgets to _prove_ that overscheduling happens in Linux.
Measurements have been done on big busy Linux webservers (much bigger than
the typical 'enterprise' category), and the runqueue lenghth (number of
threads competing for requests) was 3-4 typically. Enuff said ...

'kernel reentrancy'
-------------------

his example is a clear red herring. If any Linux application is
read()/write() intensive to the page cache, it should better use mmap(). I
can understand Mark did not mention mmap(), NT has a rather inferior
mmap() implementation. (eg. read()/write() and mmap()-ed modifications
done to the same file are not guaranteed to be data-coherent by NT ...)
His threading point is correct, there is still code left to be threaded
for SMP operation. Just as NT has one single big lock in it's networking
stack in NT4 SP4. (only SP5 has fixed this, which is not yet out of the
beta status.)

'sendfile'
----------

sendfile() is a new system call. The copying problem he noticed is true,
but it's a matter of the networking code, not some conceptual problem with
sendfile(). If the networking code does zero-copy then sendfile() will do
zero-copy as well. (without the user ever noticing) sendfile() will
certainly be further optimized in 2.3.

in private discussions with Mark i have pointed out most of these
counter-arguments, which he unfortunately failed to answer. He also didnt
answer my questions about NT's shortcomings in the above areas. (as
always, seemingly powerful concepts can often open up ugly ratholes)
Different OS, different approach. Let the numbers talk.

-- mingo

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/