> > > The patch below adds:
> > >
> > > - acinclude.m4: A new macro A_FUNC_SMMAP to check that sharing
> > pages
> > > through mmap() works. This is taken from Joerg Schilling's star.
> > > - configure.in: A_FUNC_SMMAP
> > > - ogg123/buffer.c: If we have a working mmap(), use it to create
> > > a region of shared memory instead of using System V IPC.
> > >
> > > Works on BSD. Should also work on SVR4 and offspring (Solaris),
> > > and Linux.
>
> This is a really bad idea performance wise. Solaris has a special
> code path for SYSV shared memory that doesn't require tons of swap
> tracking structures per-page/per-process. FreeBSD also has this
> optimization (it's off by default, but should work since FreeBSD
> 4.2 via the sysctl kern.ipc.shm_use_phys=1)
>
> Both OS's use a trick of making the pages non-pageable, this allows
> signifigant savings in kernel space required for each attached
> process, as well as the use of large pages which reduce the amount
> of TLB faults your processes will incurr.
That is interesting. BSDi has SysV shared memory as non-pagable, and I
always thought of that as a bug. Seems you are saying that having it
pagable has a significant performance penalty. Interesting.
-- 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,
Pennsylvania19026