On Fri, Jul 29, 2022 at 01:55:10PM -0400, Tom Lane wrote:
> Nathan Bossart <nathandbossart@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