Thread: Re: [BUGS] ISM shared memory on solaris
Yikes! We thought we were already using ISM on Solaris. Would you test the attached patch? It uses _solaris_ rather than SHM_SHARE_MMU in the define test. Does that work too? --------------------------------------------------------------------------- Josh Wilmes wrote: > I hope this is the right place to send this.. the FAQ in the > distribution mentions http://www.PostgreSQL.org/bugs/bugs.php, which > doesn't work. > > We've found that postgresql wasn't using ISM shared memory on solaris, > which theoretically would cost performance. The root cause in our case > was that the "solaris" define is not defined by our compilers or by > postgresql itself. > > The patch below simple has it check SHM_SHARE_MMU instead, which should > work fine. I verified (with 'pmap') that the database is now using ISM > on its shared memory, after this patch was applied. > > --Josh > > > > --- sysv_shmem.c.orig 2002-09-04 13:31:24.000000000 -0700 > +++ sysv_shmem.c 2003-10-23 12:52:26.756765000 -0700 > @@ -143,7 +143,7 @@ > on_shmem_exit(IpcMemoryDelete, Int32GetDatum(shmid)); > > /* OK, should be able to attach to the segment */ > -#if defined(solaris) && defined(__sparc__) > +#if defined(SHM_SHARE_MMU) && defined(__sparc__) > /* use intimate shared memory on SPARC Solaris */ > memAddress = shmat(shmid, 0, SHM_SHARE_MMU); > #else > @@ -323,8 +323,8 @@ > shmid = shmget(NextShmemSegID, sizeof(PGShmemHeader), 0); > if (shmid < 0) > continue; /* failed: must > be some other app's */ > - > -#if defined(solaris) && defined(__sparc__) > + > +#if defined(SHM_SHARE_MMU) && defined(__sparc__) > /* use intimate shared memory on SPARC Solaris */ > memAddress = shmat(shmid, 0, SHM_SHARE_MMU); > #else > > > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: src/backend/port/sysv_shmem.c =================================================================== RCS file: /cvsroot/pgsql-server/src/backend/port/sysv_shmem.c,v retrieving revision 1.21 diff -c -c -r1.21 sysv_shmem.c *** src/backend/port/sysv_shmem.c 13 Oct 2003 22:47:15 -0000 1.21 --- src/backend/port/sysv_shmem.c 24 Oct 2003 15:46:03 -0000 *************** *** 133,139 **** on_shmem_exit(IpcMemoryDelete, Int32GetDatum(shmid)); /* OK, should be able to attach to the segment */ ! #if defined(solaris) && defined(__sparc__) /* use intimate shared memory on SPARC Solaris */ memAddress = shmat(shmid, 0, SHM_SHARE_MMU); #else --- 133,139 ---- on_shmem_exit(IpcMemoryDelete, Int32GetDatum(shmid)); /* OK, should be able to attach to the segment */ ! #if defined(__solaris__) && defined(__sparc__) /* use intimate shared memory on SPARC Solaris */ memAddress = shmat(shmid, 0, SHM_SHARE_MMU); #else *************** *** 352,358 **** hdr = (PGShmemHeader *) shmat(*shmid, UsedShmemSegAddr, ! #if defined(solaris) && defined(__sparc__) /* use intimate shared memory on Solaris */ SHM_SHARE_MMU #else --- 352,358 ---- hdr = (PGShmemHeader *) shmat(*shmid, UsedShmemSegAddr, ! #if defined(__solaris__) && defined(__sparc__) /* use intimate shared memory on Solaris */ SHM_SHARE_MMU #else
Nope, __solaris__ is not defined on our system either. --Josh Bruce Momjian wrote: > Yikes! We thought we were already using ISM on Solaris. > > Would you test the attached patch? It uses _solaris_ rather than > SHM_SHARE_MMU in the define test. Does that work too? > > --------------------------------------------------------------------------- > > Josh Wilmes wrote: > >>I hope this is the right place to send this.. the FAQ in the >>distribution mentions http://www.PostgreSQL.org/bugs/bugs.php, which >>doesn't work. >> >>We've found that postgresql wasn't using ISM shared memory on solaris, >>which theoretically would cost performance. The root cause in our case >>was that the "solaris" define is not defined by our compilers or by >>postgresql itself. >> >>The patch below simple has it check SHM_SHARE_MMU instead, which should >>work fine. I verified (with 'pmap') that the database is now using ISM >> on its shared memory, after this patch was applied. >> >>--Josh >> >> >> >>--- sysv_shmem.c.orig 2002-09-04 13:31:24.000000000 -0700 >>+++ sysv_shmem.c 2003-10-23 12:52:26.756765000 -0700 >>@@ -143,7 +143,7 @@ >> on_shmem_exit(IpcMemoryDelete, Int32GetDatum(shmid)); >> >> /* OK, should be able to attach to the segment */ >>-#if defined(solaris) && defined(__sparc__) >>+#if defined(SHM_SHARE_MMU) && defined(__sparc__) >> /* use intimate shared memory on SPARC Solaris */ >> memAddress = shmat(shmid, 0, SHM_SHARE_MMU); >> #else >>@@ -323,8 +323,8 @@ >> shmid = shmget(NextShmemSegID, sizeof(PGShmemHeader), 0); >> if (shmid < 0) >> continue; /* failed: must >>be some other app's */ >>- >>-#if defined(solaris) && defined(__sparc__) >>+ >>+#if defined(SHM_SHARE_MMU) && defined(__sparc__) >> /* use intimate shared memory on SPARC Solaris */ >> memAddress = shmat(shmid, 0, SHM_SHARE_MMU); >> #else >> >> >> >>---------------------------(end of broadcast)--------------------------- >>TIP 3: if posting/reading through Usenet, please send an appropriate >> subscribe-nomail command to majordomo@postgresql.org so that your >> message can get through to the mailing list cleanly >> > > > > ------------------------------------------------------------------------ > > Index: src/backend/port/sysv_shmem.c > =================================================================== > RCS file: /cvsroot/pgsql-server/src/backend/port/sysv_shmem.c,v > retrieving revision 1.21 > diff -c -c -r1.21 sysv_shmem.c > *** src/backend/port/sysv_shmem.c 13 Oct 2003 22:47:15 -0000 1.21 > --- src/backend/port/sysv_shmem.c 24 Oct 2003 15:46:03 -0000 > *************** > *** 133,139 **** > on_shmem_exit(IpcMemoryDelete, Int32GetDatum(shmid)); > > /* OK, should be able to attach to the segment */ > ! #if defined(solaris) && defined(__sparc__) > /* use intimate shared memory on SPARC Solaris */ > memAddress = shmat(shmid, 0, SHM_SHARE_MMU); > #else > --- 133,139 ---- > on_shmem_exit(IpcMemoryDelete, Int32GetDatum(shmid)); > > /* OK, should be able to attach to the segment */ > ! #if defined(__solaris__) && defined(__sparc__) > /* use intimate shared memory on SPARC Solaris */ > memAddress = shmat(shmid, 0, SHM_SHARE_MMU); > #else > *************** > *** 352,358 **** > > hdr = (PGShmemHeader *) shmat(*shmid, > UsedShmemSegAddr, > ! #if defined(solaris) && defined(__sparc__) > /* use intimate shared memory on Solaris */ > SHM_SHARE_MMU > #else > --- 352,358 ---- > > hdr = (PGShmemHeader *) shmat(*shmid, > UsedShmemSegAddr, > ! #if defined(__solaris__) && defined(__sparc__) > /* use intimate shared memory on Solaris */ > SHM_SHARE_MMU > #else