Use a non-locking initial test in TAS_SPIN on x86_64.

Heikki Linnakangas <heikki.linnakangas@iki.fi>

Commit: b03d196be055450c7260749f17347c2d066b4254
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: 2013-08-29T11:04:37Z
Releases: 9.4.0
Use a non-locking initial test in TAS_SPIN on x86_64.

Testing done in 2011 by Tom Lane concluded that this is a win on Intel Xeons
and AMD Opterons, but it was not changed back then, because of an old
comment in tas() that suggested that it's a huge loss on older Opterons.
However, didn't have separate TAS() and TAS_SPIN() macros back then, so the
comment referred to doing a non-locked initial test even on the first
access, in uncontended case. I don't have access to older Opterons, but I'm
pretty sure that doing an initial unlocked test is unlikely to be a loss
while spinning, even though it might be for the first access.

We probably should do the same on 32-bit x86, but I'm afraid of changing it
without any testing. Hence just add a note to the x86 implementation
suggesting that we probably should do the same there.

Files

PathChange+/−
src/include/storage/s_lock.h modified +17 −5