Subject: Re: Fix bank selection logic in SLRU

From: Dilip Kumar <[email-masked]>
Date: Tue, 10 Dec 2024 18:56:20 +0530

On Tue, Dec 10, 2024 at 6:32 PM Andrey M. Borodin <[email-masked]> wrote:
>
>
>
> > On 10 Dec 2024, at 15:39, Yura Sokolov <[email-masked]> 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.
>
> IMO doing modulo is not necessary. And hash function is pure waste of CPU cycles.

IIUC, we do check that it should be in multiple of bank size (i.e.)
which is multiple of 2, right?  Am I missing something?

/*
* Helper function for GUC check_hook to check whether slru buffers are in
* multiples of SLRU_BANK_SIZE.
*/
bool
check_slru_buffers(const char *name, int *newval)
{
/* Valid values are multiples of SLRU_BANK_SIZE */
if (*newval % SLRU_BANK_SIZE == 0)
return true;

GUC_check_errdetail("\"%s\" must be a multiple of %d", name,
SLRU_BANK_SIZE);
return false;
}

-- 
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com