diff --git a/src/backend/access/transam/clog.c b/src/backend/access/transam/clog.c index f4aae10d6b7..06aff181d8d 100644 --- a/src/backend/access/transam/clog.c +++ b/src/backend/access/transam/clog.c @@ -457,7 +457,7 @@ CLOGShmemInit(void) { ClogCtl->PagePrecedes = CLOGPagePrecedes; SimpleLruInit(ClogCtl, "clog", CLOGShmemBuffers(), CLOG_LSNS_PER_PAGE, - CLogControlLock, "pg_clog"); + CLogControlLock, "pg_clog", LWTRANCHE_CLOG_BUFFERS); } /* diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c index 8942a1d2f5b..17134396a4b 100644 --- a/src/backend/access/transam/commit_ts.c +++ b/src/backend/access/transam/commit_ts.c @@ -485,7 +485,8 @@ CommitTsShmemInit(void) CommitTsCtl->PagePrecedes = CommitTsPagePrecedes; SimpleLruInit(CommitTsCtl, "commit_timestamp", CommitTsShmemBuffers(), 0, - CommitTsControlLock, "pg_commit_ts"); + CommitTsControlLock, "pg_commit_ts", + LWTRANCHE_COMMITTS_BUFFERS); commitTsShared = ShmemInitStruct("CommitTs shared", sizeof(CommitTimestampShared), diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 3334e0cdb62..a677af00496 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -1831,10 +1831,12 @@ MultiXactShmemInit(void) SimpleLruInit(MultiXactOffsetCtl, "multixact_offset", NUM_MXACTOFFSET_BUFFERS, 0, - MultiXactOffsetControlLock, "pg_multixact/offsets"); + MultiXactOffsetControlLock, "pg_multixact/offsets", + LWTRANCHE_MXACTOFFSET_BUFFERS); SimpleLruInit(MultiXactMemberCtl, "multixact_member", NUM_MXACTMEMBER_BUFFERS, 0, - MultiXactMemberControlLock, "pg_multixact/members"); + MultiXactMemberControlLock, "pg_multixact/members", + LWTRANCHE_MXACTMEMBER_BUFFERS); /* Initialize our shared state struct */ MultiXactState = ShmemInitStruct("Shared MultiXact State", diff --git a/src/backend/access/transam/slru.c b/src/backend/access/transam/slru.c index fb74915ee44..36a011cc94e 100644 --- a/src/backend/access/transam/slru.c +++ b/src/backend/access/transam/slru.c @@ -162,7 +162,7 @@ SimpleLruShmemSize(int nslots, int nlsns) void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns, - LWLock *ctllock, const char *subdir) + LWLock *ctllock, const char *subdir, int tranche_id) { SlruShared shared; bool found; @@ -215,7 +215,7 @@ SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns, Assert(strlen(name) + 1 < SLRU_MAX_NAME_LENGTH); strlcpy(shared->lwlock_tranche_name, name, SLRU_MAX_NAME_LENGTH); - shared->lwlock_tranche_id = LWLockNewTrancheId(); + shared->lwlock_tranche_id = tranche_id; shared->lwlock_tranche.name = shared->lwlock_tranche_name; shared->lwlock_tranche.array_base = shared->buffer_locks; shared->lwlock_tranche.array_stride = sizeof(LWLockPadded); diff --git a/src/backend/access/transam/subtrans.c b/src/backend/access/transam/subtrans.c index dd5db7c404d..8170ba3e3e7 100644 --- a/src/backend/access/transam/subtrans.c +++ b/src/backend/access/transam/subtrans.c @@ -179,7 +179,8 @@ SUBTRANSShmemInit(void) { SubTransCtl->PagePrecedes = SubTransPagePrecedes; SimpleLruInit(SubTransCtl, "subtrans", NUM_SUBTRANS_BUFFERS, 0, - SubtransControlLock, "pg_subtrans"); + SubtransControlLock, "pg_subtrans", + LWTRANCHE_SUBTRANS_BUFFERS); /* Override default assumption that writes should be fsync'd */ SubTransCtl->do_fsync = false; } diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index cf17b01547a..c39ac3aeef0 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -480,7 +480,7 @@ AsyncShmemInit(void) */ AsyncCtl->PagePrecedes = asyncQueuePagePrecedes; SimpleLruInit(AsyncCtl, "async", NUM_ASYNC_BUFFERS, 0, - AsyncCtlLock, "pg_notify"); + AsyncCtlLock, "pg_notify", LWTRANCHE_ASYNC_BUFFERS); /* Override default assumption that writes should be fsync'd */ AsyncCtl->do_fsync = false; diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c index 757b50eb10b..5af47ec584e 100644 --- a/src/backend/replication/logical/origin.c +++ b/src/backend/replication/logical/origin.c @@ -473,7 +473,7 @@ ReplicationOriginShmemInit(void) { int i; - replication_states_ctl->tranche_id = LWLockNewTrancheId(); + replication_states_ctl->tranche_id = LWTRANCHE_REPLICATION_ORIGIN; replication_states_ctl->tranche.name = "ReplicationOrigins"; replication_states_ctl->tranche.array_base = &replication_states[0].lock; diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c index d9d4e2204a5..026d2b9ab7a 100644 --- a/src/backend/storage/lmgr/predicate.c +++ b/src/backend/storage/lmgr/predicate.c @@ -795,7 +795,8 @@ OldSerXidInit(void) */ OldSerXidSlruCtl->PagePrecedes = OldSerXidPagePrecedesLogically; SimpleLruInit(OldSerXidSlruCtl, "oldserxid", - NUM_OLDSERXID_BUFFERS, 0, OldSerXidLock, "pg_serial"); + NUM_OLDSERXID_BUFFERS, 0, OldSerXidLock, "pg_serial", + LWTRANCHE_OLDSERXID_BUFFERS); /* Override default assumption that writes should be fsync'd */ OldSerXidSlruCtl->do_fsync = false; diff --git a/src/include/access/slru.h b/src/include/access/slru.h index 6c452c8b967..5fcebc52fba 100644 --- a/src/include/access/slru.h +++ b/src/include/access/slru.h @@ -144,7 +144,7 @@ typedef SlruCtlData *SlruCtl; extern Size SimpleLruShmemSize(int nslots, int nlsns); extern void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns, - LWLock *ctllock, const char *subdir); + LWLock *ctllock, const char *subdir, int tranche_id); extern int SimpleLruZeroPage(SlruCtl ctl, int pageno); extern int SimpleLruReadPage(SlruCtl ctl, int pageno, bool write_ok, TransactionId xid); diff --git a/src/include/storage/lwlock.h b/src/include/storage/lwlock.h index 9e4f512e2c8..613df19ad64 100644 --- a/src/include/storage/lwlock.h +++ b/src/include/storage/lwlock.h @@ -210,9 +210,17 @@ extern void LWLockInitialize(LWLock *lock, int tranche_id); typedef enum BuiltinTrancheIds { LWTRANCHE_MAIN, + LWTRANCHE_CLOG_BUFFERS, + LWTRANCHE_COMMITTS_BUFFERS, + LWTRANCHE_SUBTRANS_BUFFERS, + LWTRANCHE_MXACTOFFSET_BUFFERS, + LWTRANCHE_MXACTMEMBER_BUFFERS, + LWTRANCHE_ASYNC_BUFFERS, + LWTRANCHE_OLDSERXID_BUFFERS, LWTRANCHE_WAL_INSERT, LWTRANCHE_BUFFER_CONTENT, LWTRANCHE_BUFFER_IO_IN_PROGRESS, + LWTRANCHE_REPLICATION_ORIGIN, LWTRANCHE_REPLICATION_SLOT_IO_IN_PROGRESS, LWTRANCHE_PROC, LWTRANCHE_FIRST_USER_DEFINED