Re: Shared memory changes in 9.4? - Mailing list pgsql-hackers
From | Bruce Momjian |
---|---|
Subject | Re: Shared memory changes in 9.4? |
Date | |
Msg-id | 20141011182419.GA20528@momjian.us Whole thread Raw |
In response to | Re: Shared memory changes in 9.4? (Christoph Berg <cb@df7cb.de>) |
List | pgsql-hackers |
Uh, this patch was never applied. Do we want it? --------------------------------------------------------------------------- On Thu, Jun 12, 2014 at 03:39:14PM +0200, Christoph Berg wrote: > Re: Andres Freund 2014-06-12 <20140612094112.GZ8406@alap3.anarazel.de> > > > * Make initdb determine the best shm type for this platform and write > > > it into postgresql.conf as it does now. > > > * If no dynamic_shared_memory_type is found in the config, default to > > > "none". > > > * Modify the three identical error messages concerned about shm > > > segments to include the shm type instead of always just saying > > > "FATAL: could not open shared memory segment" > > > * Add a HINT to the POSIX error message: > > > "HINT: This might indicate that /dev/shm is not mounted, or its > > > permissions do not allow the database user to create files there" > > > > Sounds like a sane plan to me. > > Here are two patches, one that implements the annotated error > messages, and one that selects none as default. > > It might also make sense to add a Note that POSIX depends on /dev/shm, > and also a Note that dynamic_shared_memory_type is not related to > the shared_buffers shm segments, which I didn't include here. > > Christoph > -- > cb@df7cb.de | http://www.df7cb.de/ > diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c > new file mode 100644 > index 0819641..780e3a5 > *** a/src/backend/storage/ipc/dsm_impl.c > --- b/src/backend/storage/ipc/dsm_impl.c > *************** dsm_impl_posix(dsm_op op, dsm_handle han > *** 289,296 **** > if (errno != EEXIST) > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not open shared memory segment \"%s\": %m", > ! name))); > return false; > } > > --- 289,299 ---- > if (errno != EEXIST) > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not open POSIX shared memory segment \"%s\": %m", > ! name), > ! errhint("This error usually means that /dev/shm is not mounted, or its " > ! "permissions do not allow the database user to create files " > ! "there."))); > return false; > } > > *************** dsm_impl_posix(dsm_op op, dsm_handle han > *** 313,319 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not stat shared memory segment \"%s\": %m", > name))); > return false; > } > --- 316,322 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not stat POSIX shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_posix(dsm_op op, dsm_handle han > *** 332,338 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not resize shared memory segment %s to %zu bytes: %m", > name, request_size))); > return false; > } > --- 335,341 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not resize POSIX shared memory segment %s to %zu bytes: %m", > name, request_size))); > return false; > } > *************** dsm_impl_posix(dsm_op op, dsm_handle han > *** 358,364 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not unmap shared memory segment \"%s\": %m", > name))); > return false; > } > --- 361,367 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not unmap POSIX shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_posix(dsm_op op, dsm_handle han > *** 382,388 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not map shared memory segment \"%s\": %m", > name))); > return false; > } > --- 385,391 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not map POSIX shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_sysv(dsm_op op, dsm_handle hand > *** 512,518 **** > errno = save_errno; > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not get shared memory segment: %m"))); > } > return false; > } > --- 515,521 ---- > errno = save_errno; > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not get System V shared memory segment: %m"))); > } > return false; > } > *************** dsm_impl_sysv(dsm_op op, dsm_handle hand > *** 530,536 **** > { > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not unmap shared memory segment \"%s\": %m", > name))); > return false; > } > --- 533,539 ---- > { > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not unmap System V shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_sysv(dsm_op op, dsm_handle hand > *** 540,546 **** > { > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not remove shared memory segment \"%s\": %m", > name))); > return false; > } > --- 543,549 ---- > { > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not remove System V shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_sysv(dsm_op op, dsm_handle hand > *** 556,562 **** > { > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not stat shared memory segment \"%s\": %m", > name))); > return false; > } > --- 559,565 ---- > { > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not stat System V shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_sysv(dsm_op op, dsm_handle hand > *** 577,583 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not map shared memory segment \"%s\": %m", > name))); > return false; > } > --- 580,586 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not map System V shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_windows(dsm_op op, dsm_handle h > *** 645,651 **** > _dosmaperr(GetLastError()); > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not unmap shared memory segment \"%s\": %m", > name))); > return false; > } > --- 648,654 ---- > _dosmaperr(GetLastError()); > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not unmap Windows shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_windows(dsm_op op, dsm_handle h > *** 655,661 **** > _dosmaperr(GetLastError()); > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not remove shared memory segment \"%s\": %m", > name))); > return false; > } > --- 658,664 ---- > _dosmaperr(GetLastError()); > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not remove Windows shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_windows(dsm_op op, dsm_handle h > *** 691,697 **** > _dosmaperr(GetLastError()); > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not create shared memory segment \"%s\": %m", > name))); > return false; > } > --- 694,700 ---- > _dosmaperr(GetLastError()); > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not create Windows shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_windows(dsm_op op, dsm_handle h > *** 718,724 **** > _dosmaperr(GetLastError()); > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not open shared memory segment \"%s\": %m", > name))); > return false; > } > --- 721,727 ---- > _dosmaperr(GetLastError()); > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not open Windows shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_windows(dsm_op op, dsm_handle h > *** 739,745 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not map shared memory segment \"%s\": %m", > name))); > return false; > } > --- 742,748 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not map Windows shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_windows(dsm_op op, dsm_handle h > *** 763,769 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not stat shared memory segment \"%s\": %m", > name))); > return false; > } > --- 766,772 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not stat Windows shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_mmap(dsm_op op, dsm_handle hand > *** 808,814 **** > { > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not unmap shared memory segment \"%s\": %m", > name))); > return false; > } > --- 811,817 ---- > { > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not unmap mmap shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_mmap(dsm_op op, dsm_handle hand > *** 818,824 **** > { > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not remove shared memory segment \"%s\": %m", > name))); > return false; > } > --- 821,827 ---- > { > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not remove mmap shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_mmap(dsm_op op, dsm_handle hand > *** 832,838 **** > if (errno != EEXIST) > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not open shared memory segment \"%s\": %m", > name))); > return false; > } > --- 835,841 ---- > if (errno != EEXIST) > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not open mmap shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_mmap(dsm_op op, dsm_handle hand > *** 856,862 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not stat shared memory segment \"%s\": %m", > name))); > return false; > } > --- 859,865 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not stat mmap shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_mmap(dsm_op op, dsm_handle hand > *** 875,881 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not resize shared memory segment %s to %zu bytes: %m", > name, request_size))); > return false; > } > --- 878,884 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not resize mmap shared memory segment %s to %zu bytes: %m", > name, request_size))); > return false; > } > *************** dsm_impl_mmap(dsm_op op, dsm_handle hand > *** 923,929 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not resize shared memory segment %s to %zu bytes: %m", > name, request_size))); > return false; > } > --- 926,932 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not resize mmap shared memory segment %s to %zu bytes: %m", > name, request_size))); > return false; > } > *************** dsm_impl_mmap(dsm_op op, dsm_handle hand > *** 950,956 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not unmap shared memory segment \"%s\": %m", > name))); > return false; > } > --- 953,959 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not unmap mmap shared memory segment \"%s\": %m", > name))); > return false; > } > *************** dsm_impl_mmap(dsm_op op, dsm_handle hand > *** 974,980 **** > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not map shared memory segment \"%s\": %m", > name))); > return false; > } > --- 977,983 ---- > > ereport(elevel, > (errcode_for_dynamic_shared_memory(), > ! errmsg("could not map mmap shared memory segment \"%s\": %m", > name))); > return false; > } > diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml > new file mode 100644 > index 697cf99..db52c77 > *** a/doc/src/sgml/config.sgml > --- b/doc/src/sgml/config.sgml > *************** include 'filename' > *** 1416,1429 **** > <literal>windows</> (for Windows shared memory), <literal>mmap</> > (to simulate shared memory using memory-mapped files stored in the > data directory), and <literal>none</> (to disable this feature). > ! Not all values are supported on all platforms; the first supported > ! option is the default for that platform. The use of the > ! <literal>mmap</> option, which is not the default on any platform, > is generally discouraged because the operating system may write > modified pages back to disk repeatedly, increasing system I/O load; > however, it may be useful for debugging, when the > <literal>pg_dynshmem</> directory is stored on a RAM disk, or when > other shared memory facilities are not available. > </para> > </listitem> > </varlistentry> > --- 1416,1432 ---- > <literal>windows</> (for Windows shared memory), <literal>mmap</> > (to simulate shared memory using memory-mapped files stored in the > data directory), and <literal>none</> (to disable this feature). > ! Not all values are supported on all platforms. > ! The use of the <literal>mmap</> option > is generally discouraged because the operating system may write > modified pages back to disk repeatedly, increasing system I/O load; > however, it may be useful for debugging, when the > <literal>pg_dynshmem</> directory is stored on a RAM disk, or when > other shared memory facilities are not available. > + <application>initdb</> will select a suitable setting for the system. > + The default, when not configured explicitely in > + <filename>postgresql.conf</>, is to disable the use of dynamic shared > + memory. > </para> > </listitem> > </varlistentry> > diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c > new file mode 100644 > index 1d094f0..e73f6c1 > *** a/src/backend/utils/misc/guc.c > --- b/src/backend/utils/misc/guc.c > *************** static struct config_enum ConfigureNames > *** 3453,3459 **** > NULL > }, > &dynamic_shared_memory_type, > ! DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE, dynamic_shared_memory_options, > NULL, NULL, NULL > }, > > --- 3453,3459 ---- > NULL > }, > &dynamic_shared_memory_type, > ! DSM_IMPL_NONE, dynamic_shared_memory_options, > NULL, NULL, NULL > }, > > diff --git a/src/include/storage/dsm_impl.h b/src/include/storage/dsm_impl.h > new file mode 100644 > index 6e2a013..aa3487a > *** a/src/include/storage/dsm_impl.h > --- b/src/include/storage/dsm_impl.h > *************** > *** 26,41 **** > */ > #ifdef WIN32 > #define USE_DSM_WINDOWS > - #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_WINDOWS > #else > #ifdef HAVE_SHM_OPEN > #define USE_DSM_POSIX > - #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_POSIX > #endif > #define USE_DSM_SYSV > - #ifndef DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE > - #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_SYSV > - #endif > #define USE_DSM_MMAP > #endif > > --- 26,36 ---- > > -- > Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-hackers -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + Everyone has their own god. +
pgsql-hackers by date: