Re: common signal handler protection
Nathan Bossart <nathandbossart@gmail.com>
From: Nathan Bossart <nathandbossart@gmail.com>
To: Andres Freund <andres@anarazel.de>
Cc: pgsql-hackers@postgresql.org, noah@leadboat.com
Date: 2024-02-07T17:06:50Z
Lists: pgsql-hackers
On Tue, Feb 06, 2024 at 06:48:53PM -0800, Andres Freund wrote: > On 2024-02-06 20:39:41 -0600, Nathan Bossart wrote: >> I finally spent some time trying to measure this overhead. Specifically, I >> sent many, many SIGUSR2 signals to postmaster, which just uses >> dummy_handler(), i.e., does nothing. I was just barely able to get >> wrapper_handler() to show up in the first page of 'perf top' in this >> extreme case, which leads me to think that the overhead might not be a >> problem. > > That's what I'd expect. Signal delivery is fairly heavyweight, getpid() is one > of the cheapest system calls (IIRC only beat by close() of an invalid FD on > recent-ish linux). If it were to become an issue, we'd much better spend our > time reducing the millions of signals/sec that'd have to involve. Indeed. I'd like to get this committed (to HEAD only) in the next few weeks. TBH I'm not wild about the weird caveats (e.g., race conditions when pqsignal() is called within a signal handler), but I also think it is unlikely that they cause any issues in practice. Please do let me know if you have any concerns about this. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
Commits
-
Remove obsolete check in SIGTERM handler for the startup process.
- 8fd0498de200 17.0 landed
-
Centralize logic for restoring errno in signal handlers.
- 28e46325091d 17.0 landed
-
Check that MyProcPid == getpid() in backend signal handlers.
- 3b00fdba9f20 17.0 landed
-
Avoid calling proc_exit() in processes forked by system().
- 97550c071197 17.0 cited