Re: xlc atomics

Noah Misch <noah@leadboat.com>

From: Noah Misch <noah@leadboat.com>
To: Andres Freund <andres@anarazel.de>
Cc: Robert Haas <robertmhaas@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Peter Geoghegan <pg@heroku.com>, Pg Hackers <pgsql-hackers@postgresql.org>, Ants Aasma <ants@cybertec.at>
Date: 2015-07-05T00:07:49Z
Lists: pgsql-hackers

Attachments

On Sun, Jul 05, 2015 at 12:54:43AM +0200, Andres Freund wrote:
> On 2015-07-04 18:40:41 -0400, Noah Misch wrote:
> > (1) "IBM XL C/C++ for AIX, V12.1 (5765-J02, 5725-C72)".  Getting it working
> > required the attached patch.

> Will you apply? Having the ability to test change seems to put you in a
> much better spot then me.

I will.

> > (2) "IBM XL C/C++ for Linux, V13.1.2 (5725-C73, 5765-J08)" for ppc64le,
> > http://www-01.ibm.com/support/docview.wss?uid=swg27044056&aid=1.  This
> > compiler has a Clang-derived C frontend.  It defines __GNUC__ and offers
> > GCC-style __sync_* atomics.
> 
> Phew. I don't see much reason to try to support this. Why would that be
> interesting?
> 
> > Therefore, PostgreSQL selects generic-gcc.h.
> > test_atomic_ops() fails because __sync_lock_test_and_set() of one-byte types
> > segfaults at runtime.  I have reported this to the vendor.  Adding
> > "pgac_cv_gcc_sync_char_tas=no" to the "configure" invocation is a good
> > workaround.  I could add a comment about that to src/test/regress/sql/lock.sql
> > for affected folks to see in regression.diffs.  To do better, we could make
> > PGAC_HAVE_GCC__SYNC_CHAR_TAS perform a runtime test where possible.  Yet
> > another option is to force use of generic-xlc.h on this compiler.
> 
> It seems fair enough to simply add another test and include
> generic-xlc.h in that case. If it's indeed xlc, why not?

Works for me.  I'll do that as attached.

Commits

  1. Avoid the use of a separate spinlock to protect a LWLock's wait queue.

  2. Improve LWLock scalability.

  3. Reduce the number of semaphores used under --disable-spinlocks.

  4. Alter the configure script to fail immediately if the C compiler does not