On Fri, Jul 29, 2022 at 01:55:10PM -0400, Tom Lane wrote: > Nathan Bossart <nathandboss...@gmail.com> writes: >> On Fri, Jul 29, 2022 at 12:43:45PM -0400, Reid Thompson wrote: >>> slab.c >>> does not in SlabContextCreate(). Is this intentional, it seems to be an >>> oversight to me. > >> IIUC this is because the header is tracked separately from the first >> regular block, unlike aset.c. > > That doesn't make it not an oversight, though. It looks like aset.c > thinks that mem_allocated includes all the context's overhead, whereas > this implementation doesn't seem to have that result. The comments > associated with mem_allocated are sufficiently vague that it's impossible > to tell which implementation is correct. Maybe we don't really care, > but ...
Hm. mmgr/README indicates the following note about mem_allocated: * inquire about the total amount of memory allocated to the context (the raw memory from which the context allocates chunks; not the chunks themselves) AFAICT MemoryContextMemAllocated() is only used for determining when to spill to disk for hash aggegations at the moment. I don't know whether I'd classify this as an oversight or if it even makes any meaningful difference, but consistency among the different implementations is probably desirable either way. So, I guess I'm +1 for including the memory context header in mem_allocated in this case. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com