pgsql: Introduce dynamic shared memory areas.

From: Robert Haas <rhaas(at)postgresql(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Introduce dynamic shared memory areas.
Date: 2016-12-02 17:36:07
Message-ID: E1cCrkl-0000JT-16@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

Introduce dynamic shared memory areas.

Programmers discovered decades ago that it was useful to have a simple
interface for allocating and freeing memory, which is why malloc() and
free() were invented. Unfortunately, those handy tools don't work
with dynamic shared memory segments because those are specific to
PostgreSQL and are not necessarily mapped at the same address in every
cooperating process. So invent our own allocator instead. This makes
it possible for processes cooperating as part of parallel query
execution to allocate and free chunks of memory without having to
reserve them prior to the start of execution. It could also be used
for longer lived objects; for example, we could consider storing data
for pg_stat_statements or the stats collector in shared memory using
these interfaces, rather than writing them to files. Basically,
anything that needs shared memory but can't predict in advance how
much it's going to need might find this useful.

Thomas Munro and Robert Haas. The original code (of mine) on which
Thomas based his work was actually designed to be a new backend-local
memory allocator for PostgreSQL, but that hasn't gone anywhere - or
not yet, anyway. Thomas took that work and performed major
refactoring and extensive modifications to make it work with dynamic
shared memory, including the addition of appropriate locking.

Discussion: CA+TgmobkeWptGwiNa+SGFWsTLzTzD-CeLz0KcE-y6LFgoUus4A(at)mail(dot)gmail(dot)com
Discussion: CAEepm=1z5WLuNoJ80PaCvz6EtG9dN0j-KuHcHtU6QEfcPP5-qA(at)mail(dot)gmail(dot)com

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/13df76a537cca3b8884911d8fdf7c89a457a8dd3

Modified Files
--------------
src/backend/utils/mmgr/Makefile | 2 +-
src/backend/utils/mmgr/dsa.c | 2202 ++++++++++++++++++++++++++++++++++++++
src/include/utils/dsa.h | 108 ++
src/tools/pgindent/typedefs.list | 6 +
4 files changed, 2317 insertions(+), 1 deletion(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2016-12-02 19:58:11 pgsql: Delete deleteWhatDependsOn() in favor of more performDeletion()
Previous Message Robert Haas 2016-12-02 17:15:59 pgsql: Management of free memory pages.

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Eisentraut 2016-12-02 17:37:49 Re: Logical Replication WIP
Previous Message Robert Haas 2016-12-02 17:24:05 Re: PSQL commands: \quit_if, \quit_unless