v6-0006-Add-cacheline-padding-between-heavily-accessed-ar.patch
text/x-patch
Filename: v6-0006-Add-cacheline-padding-between-heavily-accessed-ar.patch
Type: text/x-patch
Part: 5
Patch
Format: format-patch
Series: patch v6-0006
Subject: Add cacheline padding between heavily accessed arrays
| File | + | − |
|---|---|---|
| src/backend/storage/lmgr/proc.c | 6 | 3 |
From 2a266c6115dca6ad32f7dbb136b63cf8d278504d Mon Sep 17 00:00:00 2001 From: Tomas Vondra <tomas@vondra.me> Date: Thu, 27 Mar 2025 21:23:05 +0100 Subject: [PATCH v6 6/7] Add cacheline padding between heavily accessed arrays --- src/backend/storage/lmgr/proc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index c08e3bb3d56..6e0fc6a08e6 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -135,8 +135,11 @@ PGProcShmemSize(void) TotalProcs = MaxBackends + NUM_AUXILIARY_PROCS + max_prepared_xacts; size = TotalProcs * sizeof(PGPROC); + size = add_size(size, PG_CACHE_LINE_SIZE); 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)); return size; @@ -232,7 +235,7 @@ InitProcGlobal(void) &found); procs = (PGPROC *) ptr; - ptr = (char *) ptr + TotalProcs * sizeof(PGPROC); + ptr = (char *) ptr + TotalProcs * sizeof(PGPROC) + PG_CACHE_LINE_SIZE; MemSet(procs, 0, TotalProcs * sizeof(PGPROC)); ProcGlobal->allProcs = procs; @@ -245,11 +248,11 @@ InitProcGlobal(void) */ ProcGlobal->xids = (TransactionId *) ptr; MemSet(ProcGlobal->xids, 0, TotalProcs * sizeof(*ProcGlobal->xids)); - ptr = (char *) ptr + (TotalProcs * sizeof(*ProcGlobal->xids)); + ptr = (char *) ptr + TotalProcs * sizeof(*ProcGlobal->xids) + PG_CACHE_LINE_SIZE; ProcGlobal->subxidStates = (XidCacheStatus *) ptr; MemSet(ProcGlobal->subxidStates, 0, TotalProcs * sizeof(*ProcGlobal->subxidStates)); - ptr = (char *) ptr + (TotalProcs * sizeof(*ProcGlobal->subxidStates)); + ptr = (char *) ptr + (TotalProcs * sizeof(*ProcGlobal->subxidStates)) + PG_CACHE_LINE_SIZE; ProcGlobal->statusFlags = (uint8 *) ptr; MemSet(ProcGlobal->statusFlags, 0, TotalProcs * sizeof(*ProcGlobal->statusFlags)); -- 2.49.0