From: Bruce Momjian Date: Sat, 13 Apr 2002 19:52:51 +0000 (+0000) Subject: Patch against 7.2.1 sources. Uses Solaris Intimate Shared Memory X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=593168bf3673b9460faa68b484caddf7c576b31d;p=users%2Fbernd%2Fpostgres.git Patch against 7.2.1 sources. Uses Solaris Intimate Shared Memory for Solaris on SPARC. Scott Brunza (sbrunza@sonalysts.com) gets credit for identifying the issue, making the change, and doing the regression tests. Earlier testing on 7.2rc2 and 7.2 showed performance gains of 1% to 10% on pgbench, osdb-pg, and some locally developed apps. Solaris Intimate Shared Memory is described in "SOLARIS INTERNALS Core Kernel Components" by Jim Mauro and Richard McDougall, Copyright 2001 Sun Microsystem, Inc. ISBN 0-13-022496-0 P.J. "Josh" Rovero --- diff --git a/src/backend/storage/ipc/ipc.c b/src/backend/storage/ipc/ipc.c index 4dde2a19af..fd6d38f9e9 100644 --- a/src/backend/storage/ipc/ipc.c +++ b/src/backend/storage/ipc/ipc.c @@ -632,7 +632,12 @@ InternalIpcMemoryCreate(IpcMemoryKey memKey, uint32 size, int permission) on_shmem_exit(IpcMemoryDelete, Int32GetDatum(shmid)); /* OK, should be able to attach to the segment */ - memAddress = shmat(shmid, 0, 0); +#if defined(solaris) && defined(__sparc__) + /* use intimate shared memory on SPARC Solaris */ + memAddress = shmat(shmid, 0, SHM_SHARE_MMU); +#else + memAddress = shmat(shmid, 0, 0); +#endif if (memAddress == (void *) -1) { @@ -812,7 +817,14 @@ IpcMemoryCreate(uint32 size, bool makePrivate, int permission) shmid = shmget(NextShmemSegID, sizeof(PGShmemHeader), 0); if (shmid < 0) continue; /* failed: must be some other app's */ - memAddress = shmat(shmid, 0, 0); + +#if defined(solaris) && defined(__sparc__) + /* use intimate shared memory on SPARC Solaris */ + memAddress = shmat(shmid, 0, SHM_SHARE_MMU); +#else + memAddress = shmat(shmid, 0, 0); +#endif + if (memAddress == (void *) -1) continue; /* failed: must be some other app's */ hdr = (PGShmemHeader *) memAddress;