Re: Large writable variables
Andres Freund <andres@anarazel.de>
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
Commits
-
Apply unconstify() in more places
- 0a8590b2a09e 12.0 landed
-
Improve unconstify() documentation
- f2898de98a54 12.0 landed
-
Drop const cast from dlsym() calls
- e6f5d1accd3a 12.0 landed
-
Const-ify a few more large static tables.
- 48d818ede15b 12.0 landed
-
Improve tzparse's handling of TZDEFRULES ("posixrules") zone data.
- fb38d9a2e1ed 9.5.15 landed
- ec5fe7f799a4 9.4.20 landed
- e7eb07f70951 12.0 landed
- db4f9c0258be 11.1 landed
- c776cd47245a 9.3.25 landed
- 312f632005f3 10.6 landed
- 1164389e12b0 9.6.11 landed
-
Avoid statically allocating statement cache in ecpglib/prepare.c.
- e15aae829e3e 12.0 landed
-
Reorder FmgrBuiltin members, saving 25% in size.
- 28d750c0cd5b 12.0 landed
-
Add macro to cast away const without allowing changes to underlying type.
- d1211c63f010 12.0 landed
-
Mark constantly allocated dest receiver as const.
- 93ca02e00560 12.0 landed
-
Avoid statically allocating formatting.c's format string caches.
- fd85e9f78d44 12.0 landed
-
Correct constness of system attributes in heap.c & prerequisites.
- 02a30a09f9e5 12.0 landed
-
Avoid statically allocating gmtsub()'s timezone workspace.
- baa94ebe2cc8 9.3.25 landed
- 5ef71d4bd322 9.6.11 landed
- 27ba589b745f 9.4.20 landed
- 18c725413fad 9.5.15 landed
- d64a54fb9c81 10.6 landed
- d11268237378 11.1 landed
- 3dfef0c519de 12.0 landed
-
Correct constness of a few variables.
- 62649bad831f 12.0 landed
-
Move the replication lag tracker into heap memory.
- e73ca79fc78d 12.0 landed