Re: Re: Alpha spinlock

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: a(dot)joubert(at)albourne(dot)com
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Arrigo Triulzi <arrigo(at)albourne(dot)com>, pgsql-ports(at)postgresql(dot)org
Subject: Re: Re: Alpha spinlock
Date: 2000-10-08 04:25:29
Message-ID: 200010080425.AAA04041@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-ports

Tom, what do you want to do with this patch?

>
>
> 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(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 2000-10-08 04:28:07 Re: Note about include files]
Previous Message Bruce Momjian 2000-10-08 04:11:28 Re: pg_dump, BLOBs and single-table dumps - RFC

Browse pgsql-ports by date

  From Date Subject
Next Message Tom Lane 2000-10-08 04:34:30 Re: Re: Alpha spinlock
Previous Message Peter Eisentraut 2000-10-07 21:59:39 [PORTS] To the Beos folks