Thread: pgsql: Dramatically reduce System V shared memory consumption.

pgsql: Dramatically reduce System V shared memory consumption.

From
Robert Haas
Date:
Dramatically reduce System V shared memory consumption.

Except when compiling with EXEC_BACKEND, we'll now allocate only a tiny
amount of System V shared memory (as an interlock to protect the data
directory) and allocate the rest as anonymous shared memory via mmap.
This will hopefully spare most users the hassle of adjusting operating
system parameters before being able to start PostgreSQL with a
reasonable value for shared_buffers.

There are a bunch of documentation updates needed here, and we might
need to adjust some of the HINT messages related to shared memory as
well.  But it's not 100% clear how portable this is, so before we
write the documentation, let's give it a spin on the buildfarm and
see what turns red.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/b0fc0df9364d2d2d17c0162cf3b8b59f6cb09f67

Modified Files
--------------
src/backend/port/sysv_shmem.c |   89 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 86 insertions(+), 3 deletions(-)


Re: pgsql: Dramatically reduce System V shared memory consumption.

From
Andres Freund
Date:
Hi Robert,

You have a small typo in the patch:


+       /*
+        * pagesize will, for practical purposes, always be a power of two.
+        * But just in case it isn't, we do it this way instead of using
+        * TYPEALIGN().
+        */
+       AnonymousShmemSize = size;
+       if (size % pagesize != 0)
+           AnonymousShmemSize += pagesize - (size % pagesize);
+
+       /*
+        * We assume that no one will attempt to run PostgreSQL 9.3 or later
+        * on systems that are ancient enough that anonymous shared memory is
+        * not supported, such as pre-2.4 versions of Linux.  If that turns
out
+        * to be false, we might need to add a run-time test here and do this
+        * only if the running kernel supports it.
+        */
+       AnonymousShmem = mmap(NULL, size, PROT_READ|PROT_WRITE, PG_MMAP_FLAGS,
+                             -1, 0);

Note that you use size in the mmap...

Andres
--
 Andres Freund                       http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services

Re: pgsql: Dramatically reduce System V shared memory consumption.

From
Tom Lane
Date:
Andres Freund <andres@2ndquadrant.com> writes:
> Hi Robert,
> You have a small typo in the patch:

Fixed, thanks for the report.

            regards, tom lane