diff --git a/src/backend/access/transam/clog.c b/src/backend/access/transam/clog.c
new file mode 100644
index f4aae10..06aff18
*** a/src/backend/access/transam/clog.c
--- b/src/backend/access/transam/clog.c
*************** CLOGShmemInit(void)
*** 457,463 ****
  {
  	ClogCtl->PagePrecedes = CLOGPagePrecedes;
  	SimpleLruInit(ClogCtl, "clog", CLOGShmemBuffers(), CLOG_LSNS_PER_PAGE,
! 				  CLogControlLock, "pg_clog");
  }
  
  /*
--- 457,463 ----
  {
  	ClogCtl->PagePrecedes = CLOGPagePrecedes;
  	SimpleLruInit(ClogCtl, "clog", CLOGShmemBuffers(), CLOG_LSNS_PER_PAGE,
! 				  CLogControlLock, "pg_clog", LWTRANCHE_CLOG_BUFFERS);
  }
  
  /*
diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c
new file mode 100644
index 8942a1d..1713439
*** a/src/backend/access/transam/commit_ts.c
--- b/src/backend/access/transam/commit_ts.c
*************** CommitTsShmemInit(void)
*** 485,491 ****
  
  	CommitTsCtl->PagePrecedes = CommitTsPagePrecedes;
  	SimpleLruInit(CommitTsCtl, "commit_timestamp", CommitTsShmemBuffers(), 0,
! 				  CommitTsControlLock, "pg_commit_ts");
  
  	commitTsShared = ShmemInitStruct("CommitTs shared",
  									 sizeof(CommitTimestampShared),
--- 485,492 ----
  
  	CommitTsCtl->PagePrecedes = CommitTsPagePrecedes;
  	SimpleLruInit(CommitTsCtl, "commit_timestamp", CommitTsShmemBuffers(), 0,
! 				  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
new file mode 100644
index 3334e0c..a677af0
*** a/src/backend/access/transam/multixact.c
--- b/src/backend/access/transam/multixact.c
*************** MultiXactShmemInit(void)
*** 1831,1840 ****
  
  	SimpleLruInit(MultiXactOffsetCtl,
  				  "multixact_offset", NUM_MXACTOFFSET_BUFFERS, 0,
! 				  MultiXactOffsetControlLock, "pg_multixact/offsets");
  	SimpleLruInit(MultiXactMemberCtl,
  				  "multixact_member", NUM_MXACTMEMBER_BUFFERS, 0,
! 				  MultiXactMemberControlLock, "pg_multixact/members");
  
  	/* Initialize our shared state struct */
  	MultiXactState = ShmemInitStruct("Shared MultiXact State",
--- 1831,1842 ----
  
  	SimpleLruInit(MultiXactOffsetCtl,
  				  "multixact_offset", NUM_MXACTOFFSET_BUFFERS, 0,
! 				  MultiXactOffsetControlLock, "pg_multixact/offsets",
! 				  LWTRANCHE_MXACTOFFSET_BUFFERS);
  	SimpleLruInit(MultiXactMemberCtl,
  				  "multixact_member", NUM_MXACTMEMBER_BUFFERS, 0,
! 				  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
new file mode 100644
index fb74915..36a011c
*** a/src/backend/access/transam/slru.c
--- b/src/backend/access/transam/slru.c
*************** SimpleLruShmemSize(int nslots, int nlsns
*** 162,168 ****
  
  void
  SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns,
! 			  LWLock *ctllock, const char *subdir)
  {
  	SlruShared	shared;
  	bool		found;
--- 162,168 ----
  
  void
  SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns,
! 			  LWLock *ctllock, const char *subdir, int tranche_id)
  {
  	SlruShared	shared;
  	bool		found;
*************** SimpleLruInit(SlruCtl ctl, const char *n
*** 215,221 ****
  
  		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.name = shared->lwlock_tranche_name;
  		shared->lwlock_tranche.array_base = shared->buffer_locks;
  		shared->lwlock_tranche.array_stride = sizeof(LWLockPadded);
--- 215,221 ----
  
  		Assert(strlen(name) + 1 < SLRU_MAX_NAME_LENGTH);
  		strlcpy(shared->lwlock_tranche_name, name, SLRU_MAX_NAME_LENGTH);
! 		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
new file mode 100644
index dd5db7c..8170ba3
*** a/src/backend/access/transam/subtrans.c
--- b/src/backend/access/transam/subtrans.c
*************** SUBTRANSShmemInit(void)
*** 179,185 ****
  {
  	SubTransCtl->PagePrecedes = SubTransPagePrecedes;
  	SimpleLruInit(SubTransCtl, "subtrans", NUM_SUBTRANS_BUFFERS, 0,
! 				  SubtransControlLock, "pg_subtrans");
  	/* Override default assumption that writes should be fsync'd */
  	SubTransCtl->do_fsync = false;
  }
--- 179,186 ----
  {
  	SubTransCtl->PagePrecedes = SubTransPagePrecedes;
  	SimpleLruInit(SubTransCtl, "subtrans", NUM_SUBTRANS_BUFFERS, 0,
! 				  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
new file mode 100644
index cf17b01..c39ac3a
*** a/src/backend/commands/async.c
--- b/src/backend/commands/async.c
*************** AsyncShmemInit(void)
*** 480,486 ****
  	 */
  	AsyncCtl->PagePrecedes = asyncQueuePagePrecedes;
  	SimpleLruInit(AsyncCtl, "async", NUM_ASYNC_BUFFERS, 0,
! 				  AsyncCtlLock, "pg_notify");
  	/* Override default assumption that writes should be fsync'd */
  	AsyncCtl->do_fsync = false;
  
--- 480,486 ----
  	 */
  	AsyncCtl->PagePrecedes = asyncQueuePagePrecedes;
  	SimpleLruInit(AsyncCtl, "async", NUM_ASYNC_BUFFERS, 0,
! 				  AsyncCtlLock, "pg_notify", LWTRANCHE_ASYNC_BUFFERS);
  	/* Override default assumption that writes should be fsync'd */
  	AsyncCtl->do_fsync = false;
  
diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c
new file mode 100644
index d9d4e22..026d2b9
*** a/src/backend/storage/lmgr/predicate.c
--- b/src/backend/storage/lmgr/predicate.c
*************** OldSerXidInit(void)
*** 795,801 ****
  	 */
  	OldSerXidSlruCtl->PagePrecedes = OldSerXidPagePrecedesLogically;
  	SimpleLruInit(OldSerXidSlruCtl, "oldserxid",
! 				  NUM_OLDSERXID_BUFFERS, 0, OldSerXidLock, "pg_serial");
  	/* Override default assumption that writes should be fsync'd */
  	OldSerXidSlruCtl->do_fsync = false;
  
--- 795,802 ----
  	 */
  	OldSerXidSlruCtl->PagePrecedes = OldSerXidPagePrecedesLogically;
  	SimpleLruInit(OldSerXidSlruCtl, "oldserxid",
! 				  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
new file mode 100644
index 6c452c8..5fcebc5
*** a/src/include/access/slru.h
--- b/src/include/access/slru.h
*************** typedef SlruCtlData *SlruCtl;
*** 144,150 ****
  
  extern Size SimpleLruShmemSize(int nslots, int nlsns);
  extern void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns,
! 			  LWLock *ctllock, const char *subdir);
  extern int	SimpleLruZeroPage(SlruCtl ctl, int pageno);
  extern int SimpleLruReadPage(SlruCtl ctl, int pageno, bool write_ok,
  				  TransactionId xid);
--- 144,150 ----
  
  extern Size SimpleLruShmemSize(int nslots, int nlsns);
  extern void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns,
! 			  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
new file mode 100644
index 5e8825e..d441f95
*** a/src/include/storage/lwlock.h
--- b/src/include/storage/lwlock.h
*************** extern void LWLockInitialize(LWLock *loc
*** 210,215 ****
--- 210,222 ----
  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,
