10.12.2024 17:07, Dilip Kumar wrote:
On Tue, 10 Dec 2024 at 6:32 PM, Andrey M. Borodin <x4...@yandex-team.ru <mailto:x4...@yandex-team.ru>> wrote:



     > On 10 Dec 2024, at 15:39, Yura Sokolov <y.soko...@postgrespro.ru
    <mailto:y.soko...@postgrespro.ru>> wrote:
     >
     > It is not critical bug, since it doesn't hurt correctness just
    performance. In worst case only one bank will be used.

    Ugh... yeah. IMO the problem is that we do not have protection that
    rejects values that are not power of 2.
    If other values given system operates as if there are
    2^(popcount(n)-1) banks. So if we just round down value to nearest
    power of 2 - we will help incorrectly configured systems to use
    proper amount of memory and keep performance of properly configured
    systems.


+1



    IMO doing modulo is not necessary. And hash function is pure waste
    of CPU cycles.


I agree

I did some measurement "divide-modulo" vs "modulo using multiplication by
reciprocal" vs "simple binary and" using simple C program [0].
(Note: loop is made to be dependent on previous iteration result so no
parallel computation happens).

Results on Ryzen 7 5825U:

    $ time ./div 100000000 15 3 # binary and
    real    0m0,943s
    $ time ./div 100000000 15 1 # multiply by reciprocal
    real    0m3,123s
    $ time ./div 100000000 15 0 # just plain `%`
    real    0m4,540s

It means:
- `&` takes 0.69ns
- `mult-rec` takes 2.94ns
- `%` takes 3.24ns.

I believe, compared to further memory accesses it could be count as
negligible.

(Certainly, it could be worse on some older processors. But I still doubt
it will be measurably worse on top of all other things SLRU does.)

[0] https://gist.github.com/funny-falcon/173923b4fea7ffdf9e02595a0f99aa74


Regards,
Yura Sokolov aka funny-falcon


Reply via email to