From owner-cvs-src@FreeBSD.ORG Tue Oct 30 02:29:37 2007 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1B86E16A469; Tue, 30 Oct 2007 02:29:37 +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 B270513C4D1; Tue, 30 Oct 2007 02:29:36 +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 l9U2CSrF016633; Mon, 29 Oct 2007 22:12:29 -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 22:12:29 -0400 (EDT) Date: Mon, 29 Oct 2007 22:12:28 -0400 (EDT) From: Daniel Eischen X-X-Sender: eischen@sea.ntplx.net To: David Xu In-Reply-To: <47268F17.1000106@freebsd.org> Message-ID: References: <200710292101.l9TL1mAE049561@repoman.freebsd.org> <47268F17.1000106@freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: cvs-src@freebsd.org, Kris Kennaway , 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-src@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Daniel Eischen List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Oct 2007 02:29:37 -0000 On Tue, 30 Oct 2007, David Xu wrote: > 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. >> Reviewed by: jeff >> MFC after: 3 days >> Revision Changes Path >> 1.41 +2 -0 src/include/pthread.h >> 1.54 +3 -0 src/lib/libkse/thread/thr_mutex.c >> 1.55 +29 -0 src/lib/libthr/thread/thr_mutex.c >> > > I am not sure PTHREAD_MUTEX_ADAPTIVE_NP is a correct solution, in fact > I think this is Linux crap, shouldn't PTHREAD_PRIO_PROTECT and > PTHREAD_PRIO_INHERIT mutex be adaptivly spinned ? > also this commit does not change mutex_self_lock() to handle the > PTHREAD_MUTEX_ADAPTIVE_NP, what is the PTHREAD_MUTEX_ADAPTIVE_NP > definition when the mutex is already locked by the currect thread ? > deadlock or return error code ? I tend to agree with the "Linux crap" comment, but I hesitate to use those words considering the recent sensor framework incident ;-) As I said in previous email, I would rather see our default mutex implementations improved instead of adding new interfaces. If it's really necessary in the short term, perhaps an environment variable that can be set to force all mutexes to be adaptive (and when kern.smp.cpus > 1 perhaps?). -- DE