Re: Large writable variables

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers@postgresql.org, Thomas Munro <thomas.munro@enterprisedb.com>
Date: 2018-10-16T06:33:17Z
Lists: pgsql-hackers
Hi,

On 2018-10-16 01:59:00 -0400, Tom Lane wrote:
> I wrote:
> > Andres Freund <andres@anarazel.de> writes:
> >> top unitialized allocations:
> >> 0000000008435040 0000000000085280 b DCHCache
> >> 0000000008391168 0000000000043840 b NUMCache
> 
> > Here's a patch to improve that situation.
> 
> Hm, looking at that more closely, there's a problem with the idea of
> allocating the cache slots one-at-a-time.  Currently,
> sizeof(DCHCacheEntry) and sizeof(NUMCacheEntry) are each just a bit more
> than a power of 2, which would cause palloc to waste nearly 50% of the
> allocation it makes for them.

Hm, that's a bit annoying...


> We could forget the one-at-a-time idea and just allocate the whole
> array on first use, but I feel like that's probably not a good answer.

I suspect it'd be fine, but obviously we can do better.


> Also, I noticed that the biggest part of those structs are arrays of
> FormatNode, which has been designed with complete lack of thought about
> size or padding issues.  We can very easily cut it in half on 64-bit
> machines.

Heh, neat. I feel like we've paid very little attention to that in a
myriad of places :(

Greetings,

Andres Freund


Commits

  1. Apply unconstify() in more places

  2. Improve unconstify() documentation

  3. Drop const cast from dlsym() calls

  4. Const-ify a few more large static tables.

  5. Improve tzparse's handling of TZDEFRULES ("posixrules") zone data.

  6. Avoid statically allocating statement cache in ecpglib/prepare.c.

  7. Reorder FmgrBuiltin members, saving 25% in size.

  8. Add macro to cast away const without allowing changes to underlying type.

  9. Mark constantly allocated dest receiver as const.

  10. Avoid statically allocating formatting.c's format string caches.

  11. Correct constness of system attributes in heap.c & prerequisites.

  12. Avoid statically allocating gmtsub()'s timezone workspace.

  13. Correct constness of a few variables.

  14. Move the replication lag tracker into heap memory.