From owner-freebsd-hackers Thu Nov 18 7:42:48 1999 Delivered-To: freebsd-hackers@freebsd.org Received: from implode.root.com (root.com [209.102.106.178]) by hub.freebsd.org (Postfix) with ESMTP id 5932415098 for ; Thu, 18 Nov 1999 07:42:39 -0800 (PST) (envelope-from dg@implode.root.com) Received: from implode.root.com (localhost [127.0.0.1]) by implode.root.com (8.8.8/8.8.5) with ESMTP id HAA15679; Thu, 18 Nov 1999 07:35:54 -0800 (PST) Message-Id: <199911181535.HAA15679@implode.root.com> To: remy@synx.com Cc: bmilekic@dsuper.net, julian@whistle.com, freebsd-hackers@FreeBSD.ORG Subject: Re: mbuf wait code (revisited) -- review? In-reply-to: Your message of "Thu, 18 Nov 1999 16:13:25 +0100." <199911181513.QAA38881@gw0.boostworks.com> From: David Greenman Reply-To: dg@root.com Date: Thu, 18 Nov 1999 07:35:54 -0800 Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG >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