1 On Solaris/illumos we want to use DISM or ISM e.g. Dynamic Intimate Shared Memory or Intimate Shared Memory
2 which is available via sysv SHM only. This patch changes the default shared memory system to be sysv
3 on Solaris/illumos based systems e.g. which have SHM_SHARE_MMU (which translates to ISM) and when SHM_PAGEABLE
4 is defined in sys/shm.h we set the default PG_SHMAT_FLAGS to SHM_PAGEABLE which will lead to DISM being
5 used. The patch to the postgresql.conf.sample is to show that sysv is the default for Solaris and the
6 ordering is changed as by default it used to be mmap and posix for the defaults and you could always
7 override things using the sysv setting.
9 --- postgresql-16.2/src/include/portability/mem.h.orig 2024-02-05 22:41:37.000000000 +0100
10 +++ postgresql-16.2/src/include/portability/mem.h 2024-03-02 16:06:23.000890754 +0100
13 #define IPCProtection (0600) /* access/modify by user only */
15 +#ifdef SHM_PAGEABLE /* use dynamic intimate shared memory on Solaris */
16 +#define PG_SHMAT_FLAGS SHM_PAGEABLE
18 #ifdef SHM_SHARE_MMU /* use intimate shared memory on Solaris */
19 #define PG_SHMAT_FLAGS SHM_SHARE_MMU
21 #define PG_SHMAT_FLAGS 0
25 /* Linux prefers MAP_ANONYMOUS, but the flag is called MAP_ANON on other systems. */
27 --- postgresql-16.2/src/include/storage/pg_shmem.h.orig 2024-02-05 22:41:37.000000000 +0100
28 +++ postgresql-16.2/src/include/storage/pg_shmem.h 2024-03-02 16:06:23.001219767 +0100
31 extern PGDLLIMPORT void *UsedShmemSegAddr;
33 -#if !defined(WIN32) && !defined(EXEC_BACKEND)
34 +#if defined(SHM_SHARE_MMU)
35 +#define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_SYSV
36 +#elif !defined(WIN32) && !defined(EXEC_BACKEND)
37 #define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_MMAP
39 #define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_SYSV
40 --- postgresql-16.2/src/include/storage/dsm_impl.h.orig 2024-02-05 22:41:37.000000000 +0100
41 +++ postgresql-16.2/src/include/storage/dsm_impl.h 2024-03-02 16:06:23.001054296 +0100
43 #define DSM_IMPL_WINDOWS 3
44 #define DSM_IMPL_MMAP 4
46 +#ifdef HAVE_SYS_SHM_H
48 + * For SHM_SHARE_MMU.
54 * Determine which dynamic shared memory implementations will be supported
55 * on this platform, and which one will be the default.
58 #ifndef DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE
59 #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_SYSV
62 +#undef DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE
63 +#define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_SYSV
68 --- postgresql-16.2/src/backend/utils/misc/postgresql.conf.sample.orig 2024-02-05 22:41:37.000000000 +0100
69 +++ postgresql-16.2/src/backend/utils/misc/postgresql.conf.sample 2024-03-02 16:06:23.000657525 +0100
71 #autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
72 #logical_decoding_work_mem = 64MB # min 64kB
73 #max_stack_depth = 2MB # min 100kB
74 -#shared_memory_type = mmap # the default is the first option
75 +#shared_memory_type = sysv # the default is the first option
76 # supported by the operating system:
81 # (change requires restart)
82 -#dynamic_shared_memory_type = posix # the default is usually the first option
83 +#dynamic_shared_memory_type = sysv # the default is usually the first option
84 # supported by the operating system:
90 # (change requires restart)