Before & After Under The Giant Lock

Robert Watson rwatson at
Sun Nov 25 12:34:57 PST 2007

On Sun, 25 Nov 2007, Christopher Chen wrote:

> On Nov 25, 2007 12:05 PM, Christopher Chen <muffaleta at> wrote:
>> On Nov 25, 2007 3:13 AM, Robert Watson <rwatson at> wrote:
>>> At this point, Giant is gradually becoming a lock around the tty, newbus, 
>>> usb, and msdosfs code, and we're largely at diminishing returns in terms 
>>> of making improvements in parallelism through removing Giant.  In FreeBSD 
>>> 7, the focus was on improving parallelism rather than removing Giant, with 
>>> improvements in locking primitives, the scheduler, and lock granularity. 
>>> For example, most of the improvement in MySQL performance in FreeBSD 7 can 
>>> be put down to a small number of changes:
>>> - Conversion to 1:1 threads from M:N threads.
>> I enjoyed reading your overview of changes from FreeBSD 6 to 7 with regards 
>> to MP scalability, but I am a bit confused over this point--Doesn't the 
>> user still have the choice between libthread, which is M:N, and libthr, 
>> which is 1:1?
>> At some point during the 6.x days, it was considered advantageous to use 
>> libthr when running MySQL. Has the project decided to go with libthread 
>> after all?
>> Perhaps we're talking about entirely different things.
> My apologies. I re-read your statement and it makes sense now.
> I thought you were saying we were converting from 1:1 to M:N.
> Sorry for any confusion!

No problem -- just to be clear: in 7, users can still choose between 
libpthread (m:n) and libthr (1:1), but the default is now libthr rather than 
libpthread, as libthr seemed to perform better in most if not all workloads of 
interest.  The libthr in 7.0 is an enhanced version of the libthr that was 
present in 6.x, although I don't have a list of the changes off-hand.

Robert N M Watson
Computer Laboratory
University of Cambridge

More information about the freebsd-hackers mailing list