Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Nov 1999 07:35:54 -0800
From:      David Greenman <dg@root.com>
To:        remy@synx.com
Cc:        bmilekic@dsuper.net, julian@whistle.com, freebsd-hackers@FreeBSD.ORG
Subject:   Re: mbuf wait code (revisited) -- review? 
Message-ID:  <199911181535.HAA15679@implode.root.com>
In-Reply-To: Your message of "Thu, 18 Nov 1999 16:13:25 %2B0100." <199911181513.QAA38881@gw0.boostworks.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
>On 18 Nov, Bosko Milekic wrote:
>> 
>> Although I've presently received little feedback on this...
>> 
>> I found a potential problem with the patch, so I am taking the following
>> approach to bypass it. I have a feeling that there's another way, though
>> (perhaps better, conceptually).
>> 
>> Consider a case where there are 40 instances of tsleep all waiting for an mbuf
>> to be freed. Consider a single mbuf beeing freed, this would awake _all_ the
>> sleepers, the first one "queued" would succeed in the [retried] MGET whereas the
>> other 39 will fail and return NULL (not necessarily having waited the designated
>> mbuf_wait time).
>> 
>> I am replacing the wakeup() in the wakeup procedure with a wakeup_one and adding
>>......
>
>Another place where a wakeup_one would be of great interest is the
>point where multiple processes are select()ing on a listen socket. Every
>incoming connection wakes every process to have them returning to user
>mode, have one succeeding in accept() and N-1 failling and returning to
>select(). It have been identified as a key improvement for, eg Apache,
>but, AFAIK, there where no proposal to provide a solving feature
>(sysctl-ized) in FBSD (Some work have been done in Linux, since a
>well-known comparative benchmark offense). Would be even more usefull
>in SMP context.

   FreeBSD has used wakeup_one() for this purpose since I wrote wakeup_one().
In fact, it was the main reason I wrote it. Shortly after doing this the Apache
Group changed to using file locking to coordinate access to the socket and
we ended up back at square one in terms of the thundering herd. Someone needs
to modify the file locking to use wakeup_one(), but that is not as trivial
as it might first seem (think shared/exclusive locks and priority inversion).

-DG

David Greenman
Co-founder/Principal Architect, The FreeBSD Project - http://www.freebsd.org
Creator of high-performance Internet servers - http://www.terasolutions.com
Pave the road of life with opportunities.


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?199911181535.HAA15679>