From owner-cvs-all@FreeBSD.ORG Mon Oct 29 21:19:56 2007 Return-Path: Delivered-To: cvs-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D587416A418; Mon, 29 Oct 2007 21:19:56 +0000 (UTC) (envelope-from deischen@freebsd.org) Received: from mail.netplex.net (mail.netplex.net [204.213.176.10]) by mx1.freebsd.org (Postfix) with ESMTP id 9508313C49D; Mon, 29 Oct 2007 21:19:56 +0000 (UTC) (envelope-from deischen@freebsd.org) Received: from sea.ntplx.net (sea.ntplx.net [204.213.176.11]) by mail.netplex.net (8.14.1/8.14.1/NETPLEX) with ESMTP id l9TLJUxb010049; Mon, 29 Oct 2007 17:19:30 -0400 (EDT) X-Virus-Scanned: by AMaViS and Clam AntiVirus (mail.netplex.net) X-Greylist: Message whitelisted by DRAC access database, not delayed by milter-greylist-3.0 (mail.netplex.net [204.213.176.10]); Mon, 29 Oct 2007 17:19:30 -0400 (EDT) Date: Mon, 29 Oct 2007 17:19:30 -0400 (EDT) From: Daniel Eischen X-X-Sender: eischen@sea.ntplx.net To: Kris Kennaway In-Reply-To: <200710292101.l9TL1mAE049561@repoman.freebsd.org> Message-ID: References: <200710292101.l9TL1mAE049561@repoman.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: cvs-src@freebsd.org, src-committers@freebsd.org, cvs-all@freebsd.org Subject: Re: cvs commit: src/lib/libthr/thread thr_mutex.c src/lib/libkse/thread thr_mutex.c src/include pthread.h X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Daniel Eischen List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Oct 2007 21:19:56 -0000 On Mon, 29 Oct 2007, Kris Kennaway wrote: > kris 2007-10-29 21:01:47 UTC > > FreeBSD src repository > > Modified files: > lib/libthr/thread thr_mutex.c > lib/libkse/thread thr_mutex.c > include pthread.h > Log: > Add a new "non-portable" mutex type, PTHREAD_MUTEX_ADAPTIVE_NP. This > is also implemented in glibc and is used by a number of existing > applications (mysql, firefox, etc). > > This mutex type is a default mutex with the additional property that > it spins briefly when attempting to acquire a contested lock, doing > trylock operations in userland before entering the kernel to block if > eventually unsuccessful. > > The expectation is that applications requesting this mutex type know > that the mutex is likely to be only held for very brief periods, so it > is faster to spin in userland and probably succeed in acquiring the > mutex, than to enter the kernel and sleep, only to be woken up almost > immediately. This can help significantly in certain cases when > pthread mutexes are heavily contended and held for brief durations > (such as mysql). > > Spin up to 200 times before entering the kernel, which represents only > a few us on modern CPUs. No performance degradation was observed with > this value and it is sufficient to avoid a large performance drop in > mysql performance in the heavily contended pthread mutex case. > > The libkse implementation is a NOP. The libkse implementation already spins for a bit. The default number of spins is 500. I'm not sure that another mutex type is warranted, the default mutex implementation should be adaptive I think. -- DE