Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Apr 2001 16:31:56 -0700 (PDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Alfred Perlstein <bright@wintelcom.net>
Cc:        freebsd-hackers@FreeBSD.org, Dan Phoenix <dphoenix@bravenet.com>, Doug White <dwhite@resnet.uoregon.edu>
Subject:   Re: lockf in apache
Message-ID:  <XFMail.010411163156.jhb@FreeBSD.org>
In-Reply-To: <20010411161858.T15938@fw.wintelcom.net>

next in thread | previous in thread | raw e-mail | index | archive | help

On 11-Apr-01 Alfred Perlstein wrote:
> * Doug White <dwhite@resnet.uoregon.edu> [010411 16:07] wrote:
>> On Tue, 10 Apr 2001, Alfred Perlstein wrote:
>> 
>> > Basically, when apache is listening on multiple IPs/ports it needs
>> > to select() on several filedescriptors.  The problem (under FreeBSD
>> > at least) is that whenever you have some process select()'ing on
>> > a descriptor and another process wants to do the same you get a
>> > "select collision", a collision requires that all processes waiting
>> > on the same select channel wake up then reassert thier desire to
>> > select.  So... if you have 500 apache processes select()'ing and
>> > one wakes up to service a request, finished serving, then goes to
>> > select again, all the rest (499) have to wake up and reaffirm thier
>> > desire to select().
>> 
>> We haven't applied wakeup_one() to select() yet? (I think I've argued
>> about this before.)
>> 
>> Someone get cracking! :)
> 
> I'm not sure it's possible without redesigning the way select works.

Select does a wakeup_one() if there's not a collision on a fd.  If there is a
collision, you need to do a full wakeup() since wakeup_one() on &selwait could
easily just wake up a process waiting on some other fd and not a process
waiting on the fd in question.  xref. sys/kern/sys_generic.c, specifically
selrecord() and selwakeup().

-- 

John Baldwin <jhb@FreeBSD.org> -- http://www.FreeBSD.org/~jhb/
PGP Key: http://www.baldwin.cx/~john/pgpkey.asc
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

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?XFMail.010411163156.jhb>