Skip to content

Commit 418451b

Browse files
committed
bufmgr: Make it easier to change number of buffer state bits
In an upcoming commit I'd like to change the number of bits for the usage count (the current max is 5, fitting in three bits, but we reserve four bits). Until now that required adjusting a bunch of magic constants, now the constants are defined based on the number of bits reserved. Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi> Discussion: https://postgr.es/m/lxzj26ga6ippdeunz6kuncectr5gfuugmm2ry22qu6hcx6oid6@lzx3sjsqhmt6 Discussion: https://postgr.es/m/riivolmg6uzfvpzfn6wjo3ghwt42rcec43ok6mv4oenfg654y7@x7dbposbskwd
1 parent cd3ccf8 commit 418451b

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

src/include/storage/buf_internals.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,19 @@
3939
*
4040
* The definition of buffer state components is below.
4141
*/
42+
#define BUF_REFCOUNT_BITS 18
43+
#define BUF_USAGECOUNT_BITS 4
44+
#define BUF_FLAG_BITS 10
45+
46+
StaticAssertDecl(BUF_REFCOUNT_BITS + BUF_USAGECOUNT_BITS + BUF_FLAG_BITS == 32,
47+
"parts of buffer state space need to equal 32");
48+
4249
#define BUF_REFCOUNT_ONE 1
43-
#define BUF_REFCOUNT_MASK ((1U << 18) - 1)
44-
#define BUF_USAGECOUNT_MASK 0x003C0000U
45-
#define BUF_USAGECOUNT_ONE (1U << 18)
46-
#define BUF_USAGECOUNT_SHIFT 18
47-
#define BUF_FLAG_MASK 0xFFC00000U
50+
#define BUF_REFCOUNT_MASK ((1U << BUF_REFCOUNT_BITS) - 1)
51+
#define BUF_USAGECOUNT_MASK (((1U << BUF_USAGECOUNT_BITS) - 1) << (BUF_REFCOUNT_BITS))
52+
#define BUF_USAGECOUNT_ONE (1U << BUF_REFCOUNT_BITS)
53+
#define BUF_USAGECOUNT_SHIFT BUF_REFCOUNT_BITS
54+
#define BUF_FLAG_MASK (((1U << BUF_FLAG_BITS) - 1) << (BUF_REFCOUNT_BITS + BUF_USAGECOUNT_BITS))
4855

4956
/* Get refcount and usagecount from buffer state */
5057
#define BUF_STATE_GET_REFCOUNT(state) ((state) & BUF_REFCOUNT_MASK)
@@ -77,6 +84,9 @@
7784
*/
7885
#define BM_MAX_USAGE_COUNT 5
7986

87+
StaticAssertDecl(BM_MAX_USAGE_COUNT < (1 << BUF_USAGECOUNT_BITS),
88+
"BM_MAX_USAGE_COUNT doesn't fit in BUF_USAGECOUNT_BITS bits");
89+
8090
/*
8191
* Buffer tag identifies which disk block the buffer contains.
8292
*

0 commit comments

Comments
 (0)