Re: Re: Alpha spinlock - Mailing list pgsql-ports
From | Bruce Momjian |
---|---|
Subject | Re: Re: Alpha spinlock |
Date | |
Msg-id | 200010080425.AAA04041@candle.pha.pa.us Whole thread Raw |
In response to | Re: Alpha spinlock (Adriaan Joubert <a.joubert@albourne.com>) |
Responses |
Re: Re: Alpha spinlock
|
List | 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@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: