pahole-PGPROC.txt

text/plain

Filename: pahole-PGPROC.txt
Type: text/plain
Part: 0
Message: Re: PGPROC alignment (was Re: pgsql: Separate RecoveryConflictReasons from procsignals)
struct PGPROC {
	dlist_head *               procgloballist;       /*     0     8 */
	dlist_node                 freeProcsLink;        /*     8    16 */
	int                        pid;                  /*    24     4 */
	BackendType                backendType;          /*    28     4 */
	Oid                        databaseId;           /*    32     4 */
	Oid                        roleId;               /*    36     4 */
	Oid                        tempNamespaceId;      /*    40     4 */
	int                        pgxactoff;            /*    44     4 */
	uint8                      statusFlags;          /*    48     1 */

	/* XXX 3 bytes hole, try to pack */

	struct {
		ProcNumber         procNumber;           /*    52     4 */
		LocalTransactionId lxid;                 /*    56     4 */
	} vxid;                                          /*    52     8 */
	TransactionId              xid;                  /*    60     4 */
	/* --- cacheline 1 boundary (64 bytes) --- */
	TransactionId              xmin;                 /*    64     4 */
	XidCacheStatus             subxidStatus;         /*    68     2 */

	/* XXX 2 bytes hole, try to pack */

	struct XidCache            subxids;              /*    72   256 */
	/* --- cacheline 5 boundary (320 bytes) was 8 bytes ago --- */
	Latch                      procLatch;            /*   328    16 */
	PGSemaphore                sem;                  /*   344     8 */
	int                        delayChkptFlags;      /*   352     4 */
	pg_atomic_uint32           pendingRecoveryConflicts; /*   356     4 */
	uint8                      lwWaiting;            /*   360     1 */
	uint8                      lwWaitMode;           /*   361     1 */

	/* XXX 2 bytes hole, try to pack */

	proclist_node              lwWaitLink;           /*   364     8 */
	proclist_node              cvWaitLink;           /*   372     8 */

	/* XXX 4 bytes hole, try to pack */

	/* --- cacheline 6 boundary (384 bytes) --- */
	PGPROC *                   lockGroupLeader;      /*   384     8 */
	dlist_head                 lockGroupMembers;     /*   392    16 */
	dlist_node                 lockGroupLink;        /*   408    16 */
	LOCK *                     waitLock;             /*   424     8 */
	dlist_node                 waitLink;             /*   432    16 */
	/* --- cacheline 7 boundary (448 bytes) --- */
	PROCLOCK *                 waitProcLock;         /*   448     8 */
	LOCKMODE                   waitLockMode;         /*   456     4 */
	LOCKMASK                   heldLocks;            /*   460     4 */
	pg_atomic_uint64           waitStart __attribute__((__aligned__(8))); /*   464     8 */
	ProcWaitStatus             waitStatus;           /*   472     4 */

	/* XXX 4 bytes hole, try to pack */

	dlist_head                 myProcLocks[16];      /*   480   256 */
	/* --- cacheline 11 boundary (704 bytes) was 32 bytes ago --- */
	LWLock                     fpInfoLock;           /*   736    16 */
	uint64 *                   fpLockBits;           /*   752     8 */
	Oid *                      fpRelId;              /*   760     8 */
	/* --- cacheline 12 boundary (768 bytes) --- */
	_Bool                      fpVXIDLock;           /*   768     1 */

	/* XXX 3 bytes hole, try to pack */

	LocalTransactionId         fpLocalTransactionId; /*   772     4 */
	XLogRecPtr                 waitLSN;              /*   776     8 */
	int                        syncRepState;         /*   784     4 */

	/* XXX 4 bytes hole, try to pack */

	dlist_node                 syncRepLinks;         /*   792    16 */
	_Bool                      procArrayGroupMember; /*   808     1 */

	/* XXX 3 bytes hole, try to pack */

	pg_atomic_uint32           procArrayGroupNext;   /*   812     4 */
	TransactionId              procArrayGroupMemberXid; /*   816     4 */
	_Bool                      clogGroupMember;      /*   820     1 */

	/* XXX 3 bytes hole, try to pack */

	pg_atomic_uint32           clogGroupNext;        /*   824     4 */
	TransactionId              clogGroupMemberXid;   /*   828     4 */
	/* --- cacheline 13 boundary (832 bytes) --- */
	XidStatus                  clogGroupMemberXidStatus; /*   832     4 */

	/* XXX 4 bytes hole, try to pack */

	int64                      clogGroupMemberPage;  /*   840     8 */
	XLogRecPtr                 clogGroupMemberLsn;   /*   848     8 */
	uint32                     wait_event_info;      /*   856     4 */

	/* size: 864, cachelines: 14, members: 51 */
	/* sum members: 828, holes: 10, sum holes: 32 */
	/* padding: 4 */
	/* forced alignments: 1 */
	/* last cacheline: 32 bytes */
} __attribute__((__aligned__(8)));