Re: PGPROC alignment (was Re: pgsql: Separate RecoveryConflictReasons from procsignals)
Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
From: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
To: Heikki Linnakangas <hlinnaka@iki.fi>
Cc: Andres Freund <andres@anarazel.de>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2026-02-11T10:58:41Z
Lists: pgsql-hackers
Hi, On Wed, Feb 11, 2026 at 12:03:51PM +0200, Heikki Linnakangas wrote: > On 11/02/2026 06:40, Bertrand Drouvot wrote: > > > With this, sizeof(PGPROC) == 864 without the explicit alignment to > > > PG_CACHE_LINE_SIZE, and 896 with it. > > > > I can see 876 -> 896 on my side: > > > > /* 872 | 4 */ uint32 wait_event_info; > > /* XXX 20-byte padding */ > > > > /* total size (bytes): 896 */ > > } > > Interesting. I've attached 'pahole bin/postgres' output from my laptop. It's > Linux on arm64. Thanks! Got it: I was using "-DCACHEDEBUG -DWAL_DEBUG -DLOCK_DEBUG -DDEBUG_DEADLOCK" so that with LOCK_DEBUG in place then LWLock size is 32 bytes (vs 16 in your case). Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
Commits
-
Use C11 alignas in typedef definitions
- 5c2a8d272b9a 19 (unreleased) landed
-
Align PGPROC to cache line boundary
- 412f78c66eed 19 (unreleased) landed
-
Rearrange fields in PGPROC, for clarity
- 2e0853176f8f 19 (unreleased) landed
-
Split PGPROC 'links' field into two, for clarity
- 36bbcd5be3ff 19 (unreleased) landed
-
Remove useless store to local variable
- ab32a9e21d37 19 (unreleased) landed
-
Separate RecoveryConflictReasons from procsignals
- 17f51ea81875 19 (unreleased) cited