Skip to content

bufmgr: remove the buffer freelist#38

Draft
gburd wants to merge 7 commits into
masterfrom
rm-freelist
Draft

bufmgr: remove the buffer freelist#38
gburd wants to merge 7 commits into
masterfrom
rm-freelist

Conversation

@gburd

@gburd gburd commented Jul 12, 2026

Copy link
Copy Markdown
Owner

Draft PR opened to enable OCR AI review on the rm-freelist branch. Title/description are provisional — rename before publishing to pgsql-hackers.

gburd added 7 commits August 12, 2025 16:57
This set of changes removes the list of available buffers and instead
simply uses the clock-sweep algorithm to find and return an available
buffer.  While on the surface this appears to be removing an
optimization it is in fact eliminating code that induces overhead in the
form of synchronization that is problemmatic for multi-core systems.
This also removes the have_free_buffer() function and simply caps the
pg_autoprewarm process to at most NBuffers.
Combine nextVictimBuffer and completePasses into a single uint64 called
clockSweepCounter so as to eliminate the need for the
buffer_strategy_lock that synchronizes their progression. Increment this
counter atomically by 1 at each tick.  The hand's location is the
counter modulo NBuffers, the number of complete passes is the counter
divided by NBuffers. Overflow of the clockSweepCounter would require ~10
years of continuous operation at ~59 billion ticks per-second, so
unlikely that we consider this to be impossible.
Improve the performance of the buffer manager by replacing the modulo
and division operations with a technique described in the paper
"Division by Invariant Integers using Multiplication" [1]. Our
implementation is inspired by the MIT Licensed "fastdiv" [2].  This
algorithm provides accurate division and modulo in constant time that is
pipeline and ALU friendly and estimated to take about ~12-18 cycles (vs
26-90 for hardware division).  Because our divisor (NBuffers) is fixed
at startup so we need only calculate the constant used by it once.

[1] https://gmplib.org/~tege/divcnst-pldi94.pdf
[2] https://github.com/jmtilli/fastdiv
@github-actions github-actions Bot force-pushed the master branch 3 times, most recently from 15913cb to 06a2a69 Compare July 13, 2026 11:54
@gburd gburd force-pushed the master branch 2 times, most recently from 3b49b2a to 0b3e646 Compare July 13, 2026 13:08
@github-actions github-actions Bot force-pushed the master branch 2 times, most recently from 3ed29c4 to e495986 Compare July 14, 2026 02:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant