Re: Re: Alpha spinlock - Mailing list pgsql-ports

From Bruce Momjian
Subject Re: Re: Alpha spinlock
Date
Msg-id 200010080438.AAA04756@candle.pha.pa.us
Whole thread Raw
In response to Re: Alpha spinlock  (Adriaan Joubert <a.joubert@albourne.com>)
List pgsql-ports
Applied, but include/port/alpha.h is now include/port/osf.h.

>
>
> Tom Lane wrote:
>
> > > For a while I though it might be because we are using an alpha TAS in
> > > the spinlock rather than the old semaphore. I replaced our spinlock
> > > with the standard one and it made no difference. We have been running
> > > with our spinlock implementation for nearly 2 months on a production
> > > database now without a hitch, so I think it is ok. Did I ever submit
> > > any patches for the Alpha spinlock?
> >
> > Not that I recall.  We did get some advice from some Alpha gurus at DEC
> > who seemed to think the existing TAS code is OK.  What was it that you
> > felt needed to be improved?
>
> The current code uses semaphores, which has the advantage that it works
> well even on multi-processor machines, but the disadvantage that it is not
> the fastest way possible. Writing a spinlock on Alpha for SMP machines is
> very difficult, as you need to deal with memory barriers. A real mess. But
> then one of the people at Compaq pointed out to us that there is a
> ready-made routine on Alpha. We implemented it with the two patches below.
> I ran tests with lots of parallel back-ends and got around a 10% speed
> increase. I include the two patches. Perhaps some of the other people
> running Tru64 can have a look at these as well.
>
> Cheers,
>
> Adriaan

> *** src/include/storage/s_lock.h    Sat Sep 30 12:13:42 2000
> --- src/include/storage/s_lock.h-    Sat Sep 30 12:13:42 2000
> ***************
> *** 252,266 ****
>    * Note that slock_t on the Alpha AXP is msemaphore instead of char
>    * (see storage/ipc.h).
>    */
> - #include <alpha/builtins.h>
> - #if 0
>   #define TAS(lock)      (msem_lock((lock), MSEM_IF_NOWAIT) < 0)
>   #define S_UNLOCK(lock) msem_unlock((lock), 0)
>   #define S_INIT_LOCK(lock)        msem_init((lock), MSEM_UNLOCKED)
>   #define S_LOCK_FREE(lock)      (!(lock)->msem_state)
> - #else
> - #define TAS(lock)         (__INTERLOCKED_TESTBITSS_QUAD((lock),0))
> - #endif
>
>   #else /* i.e. not __osf__ */
>
> --- 252,261 ----

> *** src/include/port/alpha.h    Sat Sep 30 12:13:21 2000
> --- src/include/port/alpha.h-    Sat Sep 30 12:13:21 2000
> ***************
> *** 1,10 ****
>   #define USE_POSIX_TIME
>   #define DISABLE_XOPEN_NLS
>   #define HAS_TEST_AND_SET
> ! /*#include <sys/mman.h>*/            /* for msemaphore */
> ! /*typedef msemaphore slock_t;*/
> ! #include <alpha/builtins.h>
> ! typedef volatile long slock_t;
>
>   /* some platforms define __alpha, but not __alpha__ */
>   #if defined(__alpha) && !defined(__alpha__)
> --- 1,8 ----
>   #define USE_POSIX_TIME
>   #define DISABLE_XOPEN_NLS
>   #define HAS_TEST_AND_SET
> ! #include <sys/mman.h>            /* for msemaphore */
> ! typedef msemaphore slock_t;
>
>   /* some platforms define __alpha, but not __alpha__ */
>   #if defined(__alpha) && !defined(__alpha__)


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

pgsql-ports by date:

Previous
From: Tom Lane
Date:
Subject: Re: Re: Alpha spinlock
Next
From: "Billy G. Allie"
Date:
Subject: Patch to FAQ_SCO for PostgreSQL 7.1