Re: SLRU optimization - configurable buffer pool and partitioning the SLRU lock
x4mmm@yandex-team.ru
From: "Andrey M. Borodin" <x4mmm@yandex-team.ru>
To: Dilip Kumar <dilipbalaut@gmail.com>
Cc: Alvaro Herrera <alvherre@alvh.no-ip.org>,
tender wang <tndrwang@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2024-02-23T11:02:23Z
Lists: pgsql-hackers
> On 23 Feb 2024, at 12:36, Dilip Kumar <dilipbalaut@gmail.com> wrote: > >> Another thing I've been thinking is that perhaps it would be useful to >> make the banks smaller, when the total number of buffers is small. For >> example, if you have 16 or 32 buffers, it's not really clear to me that >> it makes sense to have just 1 bank or 2 banks. It might be more >> sensible to have 4 banks with 4 or 8 buffers instead. That should make >> the algorithm scale down as well as up ... > > It might be helpful to have small-size banks when SLRU buffers are set > to a very low value and we are only accessing a couple of pages at a > time (i.e. no buffer replacement) because in such cases most of the > contention will be on SLRU Bank lock. Although I am not sure how > practical such a use case would be, I mean if someone is using > multi-xact very heavily or creating frequent subtransaction overflow > then wouldn't they should set this buffer limit to some big enough > value? By doing this we would lose some simplicity of the patch I > mean instead of using the simple macro i.e. SLRU_BANK_SIZE we would > need to compute this and store it in SlruShared. Maybe that's not that > bad. I'm sure anyone with multiple CPUs should increase, not decrease previous default of 128 buffers (with 512MB shared buffers). Having more CPUs (the only way to benefit from more locks) implies bigger transaction buffers. IMO making bank size variable adds unneeded computation overhead, bank search loops should be unrollable by compiler etc. Originally there was a patch set step, that packed bank's page addresses together in one array. It was done to make bank search a SIMD instruction. Best regards, Andrey Borodin.
Commits
-
Fix zeroing of pg_serial page without SLRU bank lock
- be2f07310063 17.0 landed
-
Fix misspelled assertions
- 0d3a71d0c8a7 17.0 landed
-
GUC table: Add description to computed variables
- 30b8d6e4ce11 17.0 landed
-
Improve performance of subsystems on top of SLRU
- 53c2a97a9266 17.0 landed
-
Rename SLRU elements in view pg_stat_slru
- bcdfa5f2e2f2 17.0 landed
-
Use atomic access for SlruShared->latest_page_number
- d172b717c6f4 17.0 landed
-
Split use of SerialSLRULock, creating SerialControlLock
- 7b745d85b80d 17.0 landed
-
Index SLRUs by 64-bit integers rather than by 32-bit integers
- 4ed8f0913bfd 17.0 cited
-
Add a macro templatized hashtable.
- b30d3ea824c5 10.0 cited