On Mon, 8 Apr 2024 at 00:37, David Rowley <dgrowleyml@gmail.com> wrote:
> I've now pushed all 3 patches. Thank you for all the reviews on
> these and for the extra MemoryContextMethodID bit, Matthias.
I realised earlier today when working on [1] that bump makes a pretty
brain-dead move when adding dedicated blocks to the blocks list. The
problem is that I opted to not have a current block field in
BumpContext and just rely on the head pointer of the blocks list to be
the "current" block. The head block is the block we look at to see if
we've any space left when new allocations come in. The problem there
is when adding a dedicated block in BumpAllocLarge(), the code adds
this to the head of the blocks list so that when a new allocation
comes in that's normal-sized, the block at the top of the list is full
and we have to create a new block for the allocation.
The attached fixes this by pushing these large/dedicated blocks to the
*tail* of the blocks list. This means the partially filled block
remains at the head and is available for any new allocation which will
fit. This behaviour is evident by the regression test change that I
added earlier today when working on [1]. The 2nd and smaller
allocation in that text goes onto the keeper block rather than a new
block.
I plan to push this tomorrow.
David
[1] https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=bea97cd02ebb347ab469b78673c2b33a72109669