From 8f54aefb9e3e83973d0a8adf6dc84fe876a0f858 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Sat, 22 Mar 2025 15:23:43 +0100 Subject: [PATCH v20250324 6/6] add cacheline padding back --- src/backend/storage/lmgr/proc.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index f7957eb008b..e9c22f03f27 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -136,8 +136,11 @@ PGProcShmemSize(void) size = TotalProcs * sizeof(PGPROC); size = add_size(size, TotalProcs * sizeof(*ProcGlobal->xids)); + size = add_size(size, PG_CACHE_LINE_SIZE); size = add_size(size, TotalProcs * sizeof(*ProcGlobal->subxidStates)); + size = add_size(size, PG_CACHE_LINE_SIZE); size = add_size(size, TotalProcs * sizeof(*ProcGlobal->statusFlags)); + size = add_size(size, PG_CACHE_LINE_SIZE); return size; } @@ -242,26 +245,22 @@ InitProcGlobal(void) * Allocate arrays mirroring PGPROC fields in a dense manner. See * PROC_HDR. * - * XXX: It might make sense to increase padding for these arrays, given - * how hotly they are accessed. - * - * review: does the padding comment still make sense with PG_CACHE_LINE_SIZE? - * presumably that's the padding mentioned by the comment? + * review: shouldn't the first cacheline padding be right after "procs", before "xids"? * * review: those lines are too long / not comprehensible, let's define some * macros to calculate stuff? */ ProcGlobal->xids = (TransactionId *) ptr; MemSet(ProcGlobal->xids, 0, TotalProcs * sizeof(*ProcGlobal->xids)); - ptr += TotalProcs * sizeof(*ProcGlobal->xids); + ptr += TotalProcs * sizeof(*ProcGlobal->xids) + PG_CACHE_LINE_SIZE; ProcGlobal->subxidStates = (XidCacheStatus *) ptr; MemSet(ProcGlobal->subxidStates, 0, TotalProcs * sizeof(*ProcGlobal->subxidStates)); - ptr += TotalProcs * sizeof(*ProcGlobal->subxidStates); + ptr += TotalProcs * sizeof(*ProcGlobal->subxidStates) + PG_CACHE_LINE_SIZE; ProcGlobal->statusFlags = (uint8 *) ptr; MemSet(ProcGlobal->statusFlags, 0, TotalProcs * sizeof(*ProcGlobal->statusFlags)); - ptr += TotalProcs * sizeof(*ProcGlobal->statusFlags); + ptr += TotalProcs * sizeof(*ProcGlobal->statusFlags) + PG_CACHE_LINE_SIZE; /* make sure wer didn't overflow */ Assert((ptr > (char *) procs) && (ptr <= (char *) procs + requestSize)); -- 2.49.0