Re: Large writable variables

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-hackers(at)postgresql(dot)org, Thomas Munro <thomas(dot)munro(at)enterprisedb(dot)com>
Subject: Re: Large writable variables
Date: 2018-10-16 19:27:33
Message-ID: 20181016192733.ezbqlr56gt6ae2jq@alap3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On 2018-10-15 13:07:54 -0700, Andres Freund wrote:
> Hi,
>
> while briefly thinking about the per-process overhead of postgres, I
> looked at the section sizes of a modern postgres. In particular which
> memory areas are *not* shared between processes.
>
> If you look at the section sizes that are mapped read-write:
>
> $ size --format=sysv src/backend/postgres
> src/backend/postgres :
> section size addr
> .rodata 1593617 5730304 (read-only, for reference)
> .data.rel.ro 134944 8039904 (read only after start)
> .data 53888 8178912 (read-write, initialized)
> .bss 510416 8232800 (read-write, uninitialized)
> Total 52417197

We improve a fair bit over the last two days:

text data bss dec hex filename
8030289 191888 227024 8449201 80ecb1 src/backend/postgres
8029097 192880 510416 8732393 853ee9 src/backend/postgres.before

breakdown:
section size addr
.rodata 1594577 5730304 (read-only, for reference)
.data.rel.ro 136928 8037920 (read only after start)
.data 50912 8178912 (read-write, initialized)
.bss 227024 8229824 (read-write, uninitialized)

As to be expected .rodata and .data.rel.ro gained a bit in size (as they
contain constant data and we made more vars constant), whereas .data
shrunk a bit, and .bss shrunk drastically by moving things to be
dynamically allocated.

Nice progress, thanks everyone!

The top .bss entries (uninitialized modifyable vars) are now:
.bss 0000000000020020 hist_entries
.bss 0000000000005b90 tzdefrules_s
.bss 0000000000004000 hist_start
.bss 0000000000002000 PqRecvBuffer
.bss 0000000000001410 BackendWritebackContext
.bss 0000000000000c80 held_lwlocks
.bss 0000000000000b00 re_array
.bss 0000000000000800 buffer_lists
.bss 0000000000000600 syscache_callback_list
.bss 0000000000000560 reverse_dispatch_table
.bss 0000000000000400 tzdir.7228
.bss 0000000000000400 pkglib_path
.bss 0000000000000400 OutputFileName
.bss 0000000000000400 my_exec_path
.bss 0000000000000400 ExtraOptions
.bss 0000000000000398 errordata
.bss 0000000000000320 seq_scan_tables

The top .data entries (initialized modifyable vars) are now:
.data 0000000000004380 ConfigureNamesInt
.data 0000000000003570 ConfigureNamesBool
.data 0000000000002140 ConfigureNamesString
.data 00000000000010e0 ConfigureNamesEnum
.data 0000000000000d20 ConfigureNamesReal
.data 0000000000000420 intRelOpts
.data 00000000000001c0 realRelOpts
.data 0000000000000118 boolRelOpts
.data 00000000000000a8 stringRelOpts
.data 0000000000000068 SnapshotSelfData
.data 0000000000000068 SnapshotAnyData
.data 0000000000000068 SecondarySnapshotData
.data 0000000000000068 CurrentSnapshotData
.data 0000000000000068 CatalogSnapshotData

- Andres

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2018-10-16 19:33:03 Re: Large writable variables
Previous Message Dmitry Dolgov 2018-10-16 19:22:18 Re: Index Skip Scan