Re: Large writable variables - Mailing list pgsql-hackers

From Andres Freund
Subject Re: Large writable variables
Date
Msg-id 20181016192733.ezbqlr56gt6ae2jq@alap3.anarazel.de
Whole thread Raw
In response to Large writable variables  (Andres Freund <andres@anarazel.de>)
List 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


pgsql-hackers by date:

Previous
From: Dmitry Dolgov
Date:
Subject: Re: Index Skip Scan
Next
From: Andres Freund
Date:
Subject: Re: Large writable variables