Re: Large writable variables
Andres Freund <andres@anarazel.de>
Hi, On 2018-10-16 15:13:43 -0400, Robert Haas wrote: > On Mon, Oct 15, 2018 at 4:08 PM Andres Freund <andres@anarazel.de> wrote: > > So we have 500kb of not-initialized memory mapped into every > > process. That's, uh, not nothing. > > Thinking about this a bit more, why is this bad? I mean, if the > memory is never touched, the OS does not really need to allocate or > zero any pages, or even make any page table entries. If somebody > actually accesses the data, then we'll take a page fault and have to > really allocate, but otherwise I would think we could have 50MB of > unused bss floating around and it wouldn't really matter, let alone > 500kB. > > What am I missing? For one the OS will actually reserve all that memory when you use memory overcommit = 2 (which you should). There's no need to reserve memory for data that's guaranteed to be shared. It also reduces the frequency of page faults when looking at other global variables laid out nearby - we could do something about that by giving the linker placement instructions, but that's also work. The size of the pagetable also has performance effects, although it'll often be dwarfed by the shared buffers entry if not using huge pages. WRT .data entries, marking them as const where appropriate both reduces memory usage, possibly allows more compiler optimizations, and allows to catch bugs. There's also the fact that not every OS has COW pagetables, or we use processes in a way that don't allow that (say windows, where we don't fork). Greetings, Andres Freund
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