From owner-cvs-src@FreeBSD.ORG Mon Oct 29 21:01:48 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 507DE16A46B; Mon, 29 Oct 2007 21:01:48 +0000 (UTC) (envelope-from kris@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 42CCF13C4BB; Mon, 29 Oct 2007 21:01:48 +0000 (UTC) (envelope-from kris@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l9TL1mGl049562; Mon, 29 Oct 2007 21:01:48 GMT (envelope-from kris@repoman.freebsd.org) Received: (from kris@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l9TL1mAE049561; Mon, 29 Oct 2007 21:01:48 GMT (envelope-from kris) Message-Id: <200710292101.l9TL1mAE049561@repoman.freebsd.org> From: Kris Kennaway Date: Mon, 29 Oct 2007 21:01:47 +0000 (UTC) To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org X-FreeBSD-CVS-Branch: HEAD Cc: Subject: 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 List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Oct 2007 21:01:48 -0000 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