Date: Fri, 11 Jun 1999 19:51:30 -0600 From: Wes Peters <wes@softweyr.com> To: "David E. Cross" <crossd@cs.rpi.edu> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: High syscall overhead? Message-ID: <3761BD22.782508D3@softweyr.com> References: <199906111440.KAA70517@cs.rpi.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
"David E. Cross" wrote:
>
> Just doing some performance testing and I noticed something rather
> disturbing....
>
> Here is the test program:
> int main (void)
> {
> int count=0;
> for(count=0;count <10000000;++count)
> getppid();
>
> return 0;
> }
>
> The time on linux for this program is ~5 seconds (linux "time" reports 3.x, but
> a wall clock clearly shows 5.x, go fig). FreeBSD reports 18.x seconds?!. I
> have a dual processor system and decided to parallel run them... it took
> 52!?! seconds, linux on the same was again about 5. Looking through the
> exception.s it appears that on entry to the kernel an MP lock is obtained...
> I thought we had splX(); to protect concurancy in the kernel.
>
> I am just curious what's the story with this. On some of my other tests it is
> clear that FreeBSD is handling concurancy much better than linux (by an equal
> factor actually, and on "real" tasks like real I/O handling).
My PII/300 reports:
wes@homer$ time ./a.out
real 0m12.490s
user 0m5.898s
sys 0m6.455s
Let's see, that's:
wes@homer$ bc
bc 1.04
Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
10000000/1249
8006
1000000000/1249
800640
800,000 syscalls/sec and you're complaining? Heh. ;^)
I suspect this is one of those "optimizations" where the Linux syscall
mechanism doesn't actually enter the kernel, since the parent pid is
probably stored in the equivalent of the proc struct. True to the
Linux "every cycle is precious" ethic, these optimizations are great
for looking good on meaningless benchmarks like this one, and make no
difference at all in "real life."
Try a more meaningful benchmark, one that actually does something in
the kernel before returning, and see how they do. Try calling kill
or socket/close a few hundred thousand times and see how they do.
--
"Where am I, and what am I doing in this handbasket?"
Wes Peters Softweyr LLC
http://www.softweyr.com/~softweyr wes@softweyr.com
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3761BD22.782508D3>
