pgsql: Add transparent block-level memory accounting

From: Tomas Vondra <tomas(dot)vondra(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Add transparent block-level memory accounting
Date: 2019-10-01 01:53:18
Message-ID: E1iF7Lq-0008Sg-FC@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Add transparent block-level memory accounting

Adds accounting of memory allocated in a memory context. Compared to
various ad hoc solutions, the main advantage is that the accounting is
transparent and does not require direct control over allocations (this
matters for use cases where the allocations happen in user code, like
for example aggregate states allocated in a transition functions).

To reduce overhead, the accounting happens at the block level (not for
individual chunks) and only the context immediately owning the block is
updated. When inquiring about amount of memory allocated in a context,
we have to recursively walk all children contexts.

This "lazy" accounting works well for cases with relatively small number
of contexts in the relevant subtree and/or with infrequent inquiries.

Author: Jeff Davis
Reivewed-by: Tomas Vondra, Melanie Plageman, Soumyadeep Chakraborty
Discussion: https://www.postgresql.org/message-id/flat/027a129b8525601c6a680d27ce3a7172dab61aab(dot)camel(at)j-davis(dot)com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/5dd7fc1519461548eebf26c33eac6878ea3e8788

Modified Files
--------------
src/backend/utils/mmgr/README | 34 +++++++++++++++++++++++++++++++++
src/backend/utils/mmgr/aset.c | 38 +++++++++++++++++++++++++++++++++++++
src/backend/utils/mmgr/generation.c | 12 ++++++++++++
src/backend/utils/mmgr/mcxt.c | 25 ++++++++++++++++++++++++
src/backend/utils/mmgr/slab.c | 10 ++++++++++
src/include/nodes/memnodes.h | 1 +
src/include/utils/memutils.h | 1 +
7 files changed, 121 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2019-10-01 02:03:48 pgsql: Fix confusing error caused by connection parameter channel_bindi
Previous Message Michael Paquier 2019-10-01 00:43:42 Re: pgsql: Add libpq parameter 'channel_binding'.