From owner-freebsd-arch@FreeBSD.ORG Wed Mar 19 19:52:02 2008 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F3755106566B for ; Wed, 19 Mar 2008 19:52:01 +0000 (UTC) (envelope-from bright@elvis.mu.org) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.freebsd.org (Postfix) with ESMTP id E080F8FC18 for ; Wed, 19 Mar 2008 19:52:01 +0000 (UTC) (envelope-from bright@elvis.mu.org) Received: by elvis.mu.org (Postfix, from userid 1192) id D4CD31A4D7E; Wed, 19 Mar 2008 12:33:22 -0700 (PDT) Date: Wed, 19 Mar 2008 12:33:22 -0700 From: Alfred Perlstein To: John Baldwin Message-ID: <20080319193322.GC67856@elvis.mu.org> References: <20080307020626.G920@desktop> <20080318235125.G910@desktop> <20080319172344.GX67856@elvis.mu.org> <200803191526.56761.jhb@freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200803191526.56761.jhb@freebsd.org> User-Agent: Mutt/1.4.2.3i Cc: Daniel Eischen , arch@freebsd.org, David Xu , freebsd-arch@freebsd.org Subject: Re: Getting rid of the static msleep priority boost X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Mar 2008 19:52:02 -0000 * John Baldwin [080319 12:28] wrote: > On Wednesday 19 March 2008 01:23:44 pm Alfred Perlstein wrote: > > * Jeff Roberson [080319 02:51] wrote: > > > On Wed, 19 Mar 2008, David Xu wrote: > > > > > > >Daniel Eischen wrote: > > > > > > > >>I'm not sure if any of the above remove the priority from the API, > > > >>but it would be nice to get rid of msleep totally and replace it > > > >>with an equivalent cv_wait(). > > > >> > > > > > > > >And create sleep queue in each cv to get rid of shared sleep queue > > > >lock ? > > > > > > Some spinlock is required to interlock with the scheduler lock via > > > thread_lock(). So I don't think you can get rid of that layer. You also > > > wouldn't want to have the cost of a 'struct sleepqueue' everywhere you > > > want a msleep/condvar. > > > > > > I personally don't see any real advantage to using condvar everywhere. > > > The only thing you really get is protection against spurious wakeups. > > > > In theory can't you protect the waitq hung off of condvars with > > the mutex/spinlock used for the condvar instead of a global > > (hashed) lock on the global waitq? > > Right now we let people invoke cv_wakeup/signal w/o holding the lock. I > actually took the thread queue out of condvar's back when doing the original > sleep queue stuff since it is cheaper space wise. Instead of each possible > condvar having its own set of queue pointers you just have a set of queue > pointers for each thread in the system. Similar to only have a turnstile per > thread rather than per lock. Ok, thank you, need to think about it. -- - Alfred Perlstein