Re: slow startup due to LWLockAssign() spinlock - Mailing list pgsql-hackers

From Andres Freund
Subject Re: slow startup due to LWLockAssign() spinlock
Date
Msg-id 20140203163559.GA6729@awork2.anarazel.de
Whole thread Raw
In response to Re: slow startup due to LWLockAssign() spinlock  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
On 2014-02-03 11:22:45 -0500, Tom Lane wrote:
> Andres Freund <andres@2ndquadrant.com> writes:
> > On larger, multi-socket, machines, startup takes a fair bit of time. As
> > I was profiling anyway I looked into it and noticed that just about all
> > of it is spent in LWLockAssign() called by InitBufferPool(). Starting
> > with shared_buffers=48GB on the server Nate Boley provided, takes about
> > 12 seconds. Nearly all of it spent taking the ShmemLock spinlock.
> > Simply modifying LWLockAssign() to not take the spinlock when
> > !IsUnderPostmaster speeds it up to 2 seconds. While certainly not making
> > LWLockAssign() prettier it seems enough of a speedup to be worthwile
> > nonetheless.
> 
> Hm.  This patch only works if the postmaster itself never assigns any
> LWLocks except during startup.  That's *probably* all right, but it
> seems a bit scary.  Is there any cheap way to make the logic actually
> be what your comment claims, namely "Interlocking is not necessary during
> postmaster startup"?  I guess we could invent a ShmemInitInProgress global
> flag ...

I'd be fine with inventing such a flag, I couldn't find one and decided
that this alone didn't merit it, since it seems to be really unlikely
that we will start to allocate such resources after startup in the
postmaster. Unless we're talking about single user mode obviously, but
the spinlock isn't necessary there anyway.

Greetings,

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services



pgsql-hackers by date:

Previous
From: Antonin Houska
Date:
Subject: Re: Backup throttling
Next
From: Andrew Dunstan
Date:
Subject: Re: bugfix patch for json_array_elements