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:38:34 |
Message-ID: | 200010080438.AAA04756@candle.pha.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers 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(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
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2000-10-08 04:50:53 | Re: Reimplementing UNION/INTERSECT/EXCEPT |
Previous Message | Tom Lane | 2000-10-08 04:34:30 | Re: Re: Alpha spinlock |
From | Date | Subject | |
---|---|---|---|
Next Message | pierre.aussourd | 2000-10-08 13:12:19 | [ PGSQL for WIN] |
Previous Message | Tom Lane | 2000-10-08 04:34:30 | Re: Re: Alpha spinlock |