From: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
---|---|
To: | Chris Campbell <chris(at)bignerdranch(dot)com> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "Jim C(dot) Nasby" <jnasby(at)pervasive(dot)com>, pgsql-patches(at)postgresql(dot)org |
Subject: | Re: OS X shared memory documentation |
Date: | 2006-03-02 20:32:42 |
Message-ID: | 200603022032.k22KWgH00660@candle.pha.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-patches |
Great. I have applied the following documentation patch for CVS HEAD
and 8.1.X.
It seems you are saying that shmmax and shmall must be multiples of 4k,
and I added that to the docs. It previously only mentioned shmmax in
that regard.
---------------------------------------------------------------------------
Chris Campbell wrote:
> The definitive answer can be found in the source code for the Darwin
> kernel, xnu (links are below):
>
> 1. The shmmax, shmmin, shmmni, shmseg, and shmall settings cannot be
> changed after the shared memory system is initialized
>
> 2. The shared memory system is initialized immediately after all 5
> settings have been configured
>
> 3. The shmall setting must be a multiple of the page size (on both
> 10.3 and 10.4)
>
> Here are excerpts from the sysctl_shminfo() function found in
> sysv_shm.c:
>
> [1]
> /* Set the values only if shared memory is not initialised */
> if (!shm_inited) {
> if ((error = SYSCTL_IN(req, arg1, sizeof(user_ssize_t)))
> != 0) {
> sysctl_shminfo_ret = error;
> goto sysctl_shminfo_out;
> }
>
> [2]
> /* Initialize only when all values are set */
> if ((shminfo.shmmax != (user_ssize_t)-1) &&
> (shminfo.shmmin != (user_ssize_t)-1) &&
> (shminfo.shmmni != (user_ssize_t)-1) &&
> (shminfo.shmseg != (user_ssize_t)-1) &&
> (shminfo.shmall != (user_ssize_t)-1)) {
> shminit(NULL);
> }
>
>
> [3]
> (10.3)
> if (arg1 == &shminfo.shmmax) {
> if (shminfo.shmmax & PAGE_MASK) {
> shminfo.shmmax = -1;
> return(EINVAL);
> }
> }
>
> (10.4)
> if (arg1 == &shminfo.shmmax) {
> if (shminfo.shmmax & PAGE_MASK_64) {
> shminfo.shmmax = -1;
> return(EINVAL);
> }
> }
>
> PAGE_MASK is "(PAGE_SIZE - 1)", and PAGE_MASK_64 is simply "(unsigned
> long long)PAGE_MASK"
>
>
> /etc/rc contains commands to set all 5 of the parameters. In 10.3.9
> and later, you can place your own customized settings inside /etc/
> sysctl.conf that will be executed before /etc/rc's commands. But if
> you don't set them all, the shared memory system isn't initialized,
> and /etc/rc will overwrite them.
>
> Does that make sense?
>
> In a nutshell, if you want to customize the shared memory settings,
> you must:
>
> (On 10.3.9 and later)
> Set ALL 5 settings inside /etc/sysctl.conf, and make sure that shmmax
> is a multiple of the page size (4096?). The page size is a runtime
> variable that's set by kernel bootstrap mechanisms calling
> vm_set_page_size() (I haven't tracked those down yet).
>
> (On earlier systems)
> Modify the desired settings inside /etc/rc, and be aware that OS
> updates will overwrite your changes. If you upgrade to 10.3.9,
> migrate to using /etc/sysctl.conf.
>
> In my own OS X products that use a PostgreSQL server, I install an /
> etc/sysctl.conf file on all servers. If installing on anything
> earlier than 10.3, my installer modifies /etc/rc. That way, when the
> customer upgrades their server to 10.3.9 and the /etc/rc file is
> overwritten, the /etc/sysctl.conf file is already in place.
>
> Thanks!
>
> - Chris
>
>
> Referenced source code:
>
> Mac OS X 10.4.4:
> http://www.opensource.apple.com/darwinsource/10.4.4.ppc/
> xnu-792.6.56/bsd/kern/sysv_shm.c
>
> Mac OS X 10.3.9:
> http://www.opensource.apple.com/darwinsource/10.3.9/xnu-517.12.7/
> bsd/kern/sysv_shm.c
>
> Mac OS X 10.3:
> http://www.opensource.apple.com/darwinsource/10.3/xnu-517/bsd/
> kern/sysv_shm.c
>
--
Bruce Momjian http://candle.pha.pa.us
SRA OSS, Inc. http://www.sraoss.com
+ If your life is a hard drive, Christ can be your backup. +
Attachment | Content-Type | Size |
---|---|---|
unknown_filename | text/plain | 1.8 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2006-03-02 20:41:23 | Re: ALTER CONSTRAINT RENAME patch reverted |
Previous Message | Bruce Momjian | 2006-03-02 20:17:38 | Re: Native-win32 patch |