pgsql: Dramatically reduce System V shared memory consumption.

Started by Robert Haasabout 14 years ago3 messagescomitters
Jump to latest
#1Robert Haas
robertmhaas@gmail.com

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(-)

#2Andres Freund
andres@anarazel.de
In reply to: Robert Haas (#1)
Re: pgsql: Dramatically reduce System V shared memory consumption.

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

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andres Freund (#2)
Re: pgsql: Dramatically reduce System V shared memory consumption.

Andres Freund <andres@2ndquadrant.com> writes:

Hi Robert,
You have a small typo in the patch:

Fixed, thanks for the report.

regards, tom lane