Re: LogwrtResult contended spinlock
Jeff Davis <pgsql@j-davis.com>
From: Jeff Davis <pgsql@j-davis.com>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>, Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Andres Freund <andres@anarazel.de>,
pgsql-hackers@lists.postgresql.org, Jaime Casanova
<jcasanov@systemguards.com.ec>
Date: 2024-04-05T18:22:40Z
Lists: pgsql-hackers
On Fri, 2024-04-05 at 13:54 +0200, Alvaro Herrera wrote: > Couldn't push: I tested with --disable-atomics --disable-spinlocks > and > the tests fail because the semaphore for the atomic variables is not > always initialized. This is weird -- it's like a client process is > running at a time when StartupXLOG has not initialized the variable > ... > so the initialization in the other place was not completely wrong. It looks like you solved the problem and pushed the first patch. Looks good to me. Patch 0002 also looks good to me, after a mostly-trivial rebase (just remember to initialize logCopyResult). Minor comments: * You could consider using a read barrier before reading the Copy ptr, or using the pg_atomic_read_membarrier_u64() variant. I don't see a correctness problem, but it might be slightly more clear and I don't see a lot of downside. * Also, I assume that the Max() call in pg_atomic_monotonic_advance_u64() is just for clarity? Surely the currval cannot be less than _target when it returns. I'd probably just do Assert(currval >= _target) and then return currval. Regards, Jeff Davis
Commits
-
Remove bogus assertion in pg_atomic_monotonic_advance_u64
- 768f0c3e21b3 18.0 landed
- 3a9d0d774d90 17.0 landed
-
Add XLogCtl->logInsertResult
- f3ff7bf83bce 17.0 cited
-
Operate XLogCtl->log{Write,Flush}Result with atomics
- ee1cbe806dad 17.0 landed
-
Split XLogCtl->LogwrtResult into separate struct members
- c9920a9068ea 17.0 landed
-
Introduce atomic read/write functions with full barrier semantics.
- bd5132db558b 17.0 cited
-
Reduce the number of GetFlushRecPtr() calls done by walsenders.
- e369f3708636 13.0 cited
-
Remove most volatile qualifiers from xlog.c
- 6ba4ecbf477e 9.5.0 cited