> On Jul 10, 2025, at 8:13 AM, Burd, Greg <g...@burd.me> wrote:
>
>
>> On Jul 9, 2025, at 1:23 PM, Andres Freund <and...@anarazel.de> wrote:
>>
>> Hi,
>>
>> On 2025-07-09 12:55:51 -0400, Greg Burd wrote:
>>> On Jul 9 2025, at 12:35 pm, Andres Freund <and...@anarazel.de> wrote:
>>>
>>>> FWIW, I've started to wonder if we shouldn't just get rid of the freelist
>>>> entirely. While clocksweep is perhaps minutely slower in a single
>>>> thread than
>>>> the freelist, clock sweep scales *considerably* better [1]. As it's rather
>>>> rare to be bottlenecked on clock sweep speed for a single thread
>>>> (rather then
>>>> IO or memory copy overhead), I think it's worth favoring clock sweep.
>>>
>>> Hey Andres, thanks for spending time on this. I've worked before on
>>> freelist implementations (last one in LMDB) and I think you're onto
>>> something. I think it's an innovative idea and that the speed
>>> difference will either be lost in the noise or potentially entirely
>>> mitigated by avoiding duplicate work.
>>
>> Agreed. FWIW, just using clock sweep actually makes things like DROP TABLE
>> perform better because it doesn't need to maintain the freelist anymore...
>>
>>
>>>> Also needing to switch between getting buffers from the freelist and
>>>> the sweep
>>>> makes the code more expensive. I think just having the buffer in the
>>>> sweep,
>>>> with a refcount / usagecount of zero would suffice.
>>>
>>> If you're not already coding this, I'll jump in. :)
>>
>> My experimental patch is literally a four character addition ;), namely
>> adding
>> "0 &&" to the relevant code in StrategyGetBuffer().
>>
>> Obviously a real patch would need to do some more work than that. Feel free
>> to take on that project, I am not planning on tackling that in near term.
>>
>
> I started on this last night, making good progress. Thanks for the
> inspiration. I'll create a new thread to track the work and cross-reference
> when I have something reasonable to show (hopefully later today).
>
>> There's other things around this that could use some attention. It's not hard
>> to see clock sweep be a bottleneck in concurrent workloads - partially due to
>> the shared maintenance of the clock hand. A NUMAed clock sweep would address
>> that.
>
> Working on it.
For archival sake, and to tie up loose ends I'll link from here to a new thread
I just started that proposes the removal of the freelist and the
buffer_strategy_lock [1].
That patch set doesn't address any NUMA-related tasks directly, but it should
remove some pain when working in that direction by removing code that requires
partitioning and locking and...
best.
-greg
[1] https://postgr.es/m/e2d6fcdc-be98-4f95-b45e-699c3e17b...@burd.me