Date: Tue, 30 Oct 2007 16:54:08 +0800 From: David Xu <davidxu@FreeBSD.org> To: Kris Kennaway <kris@FreeBSD.org> Cc: Daniel Eischen <deischen@FreeBSD.org>, 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 Message-ID: <4726F130.2060709@freebsd.org> In-Reply-To: <4726E9AB.4050209@FreeBSD.org> References: <200710292101.l9TL1mAE049561@repoman.freebsd.org> <47268F17.1000106@freebsd.org> <Pine.GSO.4.64.0710292207140.19572@sea.ntplx.net> <4726E9AB.4050209@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Kris Kennaway wrote: > > Yes, but only if we can do it in a way that does not reduce performance > in other cases. As you know, and as I mentioned already to Dan, this is > architecturally hard. > >>> 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 ? > > > As I mentioned in the commit, it is defined to be the same as the > default "errorcheck" type in all other aspects than the adaptive > spinning. However I see I missed a case: > > Index: thread/thr_mutex.c > =================================================================== > RCS file: /home/ncvs/src/lib/libthr/thread/thr_mutex.c,v > retrieving revision 1.55 > diff -u -r1.55 thr_mutex.c > --- thread/thr_mutex.c 29 Oct 2007 21:01:47 -0000 1.55 > +++ thread/thr_mutex.c 30 Oct 2007 08:16:18 -0000 > @@ -558,6 +558,7 @@ > > switch (m->m_type) { > case PTHREAD_MUTEX_ERRORCHECK: > + case PTHREAD_MUTEX_ADAPTIVE_NP: > if (abstime) { > clock_gettime(CLOCK_REALTIME, &ts1); > TIMESPEC_SUB(&ts2, abstime, &ts1); > >> 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?). > > > There might be a case for adding that for people who want to experiment, > but it's not appropriate as a replacement since it's highly application > specific, and the application already knows whether it wants this > property or not. It is also often not appropriate to use this behaviour > on every mutex used by an application. > I do think many application writters do not know what should be done for his mutexes, generic spinning may be OK, but can be turned off. > When arguing about this commit, keep in mind that with this simple > change mysql performs 30% better out of the box at high loads (without > requiring any patches). That is not something that should be lightly > dismissed until you have a better replacement ready. > > Kris > I object adding PTHREAD_MUTEX_ADAPTIVE_NP, because there is no corresponding PTHREAD_ADPATIVE_MUTEX_INITIALIZER, but normal pthread mutex has macro PTHREAD_MUTEX_INITIALIZER, so it is inconsistent, maybe adding pthread_mutexattr_setspin() etcs are better than this hack for our implementation, it is not portable though. I remembered mysql uses this macro to initialize spin mutex, and you indead needs a patch to let it work, in fact spin mutex in libthr is arguable, normally you can use pthread_mutex_trylock() in application to simulate spinning, adding such mutex type it in libthr just simplified it, but it is not portable. Regards, David Xu
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4726F130.2060709>