Re: Bad COMPACT_ALLOC_CHUNK size in tsearch/spell.c?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Merlin Moncure <mmoncure(at)gmail(dot)com>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Bad COMPACT_ALLOC_CHUNK size in tsearch/spell.c?
Date: 2011-04-26 18:48:08
Message-ID: 11065.1303843688@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

I wrote:
> A different angle of attack on the issue is that aset.c's use of
> exact-power-of-2 sizes for both malloc requests and the available space
> in chunks is inefficient when maxBlockSize is constrained to be not much
> larger than common chunk request sizes. Maybe we should try to fix that
> instead of asking other code to choose request sizes to dodge the
> inefficiency.

After chewing on that thought for a bit, it seems like an easy fix is to
modify AllocSetContextCreate (around line 390 in HEAD's aset.c) so that
allocChunkLimit is not just constrained to be less than maxBlockSize,
but significantly less than maxBlockSize --- say an eighth or so. When
using ALLOCSET_SMALL_MAXSIZE this would result in requests of 1K or more
being treated as separate malloc blocks, in turn guaranteeing that not
more than 1K of each 8K request block could go to waste in the face of a
stream of allocChunkLimit-sized requests.

Of course, this might just result in the fragmentation problem getting
tossed over the fence into malloc's playground ... but offhand it seems
that it would remove the issue that spell.c is concerned about.

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dann Corbit 2011-04-26 18:58:35 Re: What was the exact version of PostgreSQL where the column name length changed from 31 to 63 characters?
Previous Message Merlin Moncure 2011-04-26 18:47:17 Re: What was the exact version of PostgreSQL where the column name length changed from 31 to 63 characters?