> On 6 Nov 2023, at 09:09, Dilip Kumar <dilipbal...@gmail.com> wrote:
> 
> 
>> Having hashtable to find SLRU page in the buffer IMV is too slow. Some 
>> comments on this approach can be found here [0].
>> I'm OK with having HTAB for that if we are sure performance does not degrade 
>> significantly, but I really doubt this is the case.
>> I even think SLRU buffers used HTAB in some ancient times, but I could not 
>> find commit when it was changed to linear search.
> 
> The main intention of having this buffer mapping hash is to find the
> SLRU page faster than sequence search when banks are relatively bigger
> in size, but if we find the cases where having hash creates more
> overhead than providing gain then I am fine to remove the hash because
> the whole purpose of adding hash here to make the lookup faster.  So
> far in my test I did not find the slowness.  Do you or anyone else
> have any test case based on the previous research on whether it
> creates any slowness?
PFA test benchmark_slru_page_readonly(). In this test we run 
SimpleLruReadPage_ReadOnly() (essential part of TransactionIdGetStatus())
before introducing HTAB for buffer mapping I get
Time: 14837.851 ms (00:14.838)
with buffer HTAB I get
Time: 22723.243 ms (00:22.723)

This hash table makes getting transaction status ~50% slower.

Benchmark script I used:
make -C $HOME/postgresMX -j 8 install && (pkill -9 postgres; rm -rf test; 
./initdb test && echo "shared_preload_libraries = 'test_slru'">> 
test/postgresql.conf && ./pg_ctl -D test start && ./psql -c 'create extension 
test_slru' postgres && ./pg_ctl -D test restart && ./psql -c "SELECT 
count(test_slru_page_write(a, 'Test SLRU'))
  FROM generate_series(12346, 12393, 1) as a;" -c '\timing' -c "SELECT 
benchmark_slru_page_readonly(12377);" postgres)

> 
>> Maybe we could decouple locks and counters from SLRU banks? Banks were meant 
>> to be small to exploit performance of local linear search. Lock partitions 
>> have to be bigger for sure.
> 
> Yeah, that could also be an idea if we plan to drop the hash.  I mean
> bank-wise counter is fine as we are finding a victim buffer within a
> bank itself, but each lock could cover more slots than one bank size
> or in other words, it can protect multiple banks.  Let's hear more
> opinion on this.
+1

> 
>> 
>> On 30 Oct 2023, at 09:20, Dilip Kumar <dilipbal...@gmail.com> wrote:
>> 
>> I have taken 0001 and 0002 from [1], done some bug fixes in 0001
>> 
>> 
>> BTW can you please describe in more detail what kind of bugs?
> 
> Yeah, actually that patch was using the same GUC
> (multixact_offsets_buffers) in SimpleLruInit for MultiXactOffsetCtl as
> well as for  MultiXactMemberCtl, see the below patch snippet from the
> original patch.

Ouch. We were running this for serveral years with this bug... Thanks!


Best regards, Andrey Borodin.

Attachment: 0001-Implement-benchmark_slru_page_readonly-to-assess-SLR.patch
Description: Binary data


Reply via email to