Re: connection establishment versus parallel workers
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: pgsql-hackers@postgresql.org
Date: 2024-12-12T13:29:53Z
Lists: pgsql-hackers
Attachments
- v1-0001-Latches-shouldn-t-starve-socket-event-delivery.patch (text/x-patch) patch v1-0001
On Thu, Dec 12, 2024 at 11:36 AM Thomas Munro <thomas.munro@gmail.com> wrote: > On Thu, Dec 12, 2024 at 9:43 AM Nathan Bossart <nathandbossart@gmail.com> wrote: > > Our theory is that commit 7389aad (and follow-ups like commit 239b175) made > > parallel worker processing much more responsive to the point of contending > > with incoming connections, and that before this change, the kernel balanced > > the execution of the signal handlers and ServerLoop() to prevent this. I > > don't have a concrete proposal yet, but I thought it was still worth > > starting a discussion. TBH I'm not sure we really need to do anything > > since this arguably comes down to a trade-off between connection and worker > > responsiveness. > > One factor is: > > * Check if the latch is set already. If so, leave the loop > * immediately, avoid blocking again. We don't attempt to report any > * other events that might also be satisfied. Here's an experimental patch to try changing that policy. It improves the connection times on my small computer with your test, but I doubt I'm seeing the real issue. But in theory, assuming a backlog of connections and workers to start, I think each server loop should be able to accept and fork one client backend, and fork up to 100 (MAX_BGWORKERS_TO_LAUNCH) background workers.
Commits
-
Fix latch event policy that hid socket events.
- b4b52c911aaf 16.7 landed
- 44f400fbc6a4 17.3 landed
- 73f6b9a3b0fe 18.0 landed
-
Teach WaitEventSetWait() to report multiple events on Windows.
- 04a09ee944ac 17.0 cited
-
Process pending postmaster work before connections.
- 239b1753421c 16.0 cited
-
Use WaitEventSet API for postmaster's event loop.
- 7389aad63666 16.0 cited
-
Replace buffer I/O locks with condition variables.
- d87251048a0f 14.0 cited