Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit be58282

Browse files
committed
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 Joubert
1 parent e5e5de8 commit be58282

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/include/port/osf.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
#define USE_POSIX_TIME
22
#define DISABLE_XOPEN_NLS
33
#define HAS_TEST_AND_SET
4-
#include <sys/mman.h> /* for msemaphore */
5-
typedef msemaphore slock_t;
4+
/*#include <sys/mman.h>*/ /* for msemaphore */
5+
/*typedef msemaphore slock_t;*/
6+
#include <alpha/builtins.h>
7+
typedef volatile long slock_t;
68

79
/* some platforms define __alpha, but not __alpha__ */
810
#if defined(__alpha) && !defined(__alpha__)

src/include/storage/s_lock.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.71 2000/07/05 16:09:31 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.72 2000/10/08 04:38:21 momjian Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -270,10 +270,15 @@ tas(slock_t *s_lock)
270270
* Note that slock_t on the Alpha AXP is msemaphore instead of char
271271
* (see storage/ipc.h).
272272
*/
273+
#include <alpha/builtins.h>
274+
#if 0
273275
#define TAS(lock) (msem_lock((lock), MSEM_IF_NOWAIT) < 0)
274276
#define S_UNLOCK(lock) msem_unlock((lock), 0)
275277
#define S_INIT_LOCK(lock) msem_init((lock), MSEM_UNLOCKED)
276278
#define S_LOCK_FREE(lock) (!(lock)->msem_state)
279+
#else
280+
#define TAS(lock) (__INTERLOCKED_TESTBITSS_QUAD((lock),0))
281+
#endif
277282

278283
#else /* i.e. not __osf__ */
279284

0 commit comments

Comments
 (0)