Re: elog(DEBUG2 in SpinLocked section.
Robert Haas <robertmhaas@gmail.com>
From: Robert Haas <robertmhaas@gmail.com>
To: Andres Freund <andres@anarazel.de>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Michael Paquier <michael@paquier.xyz>, Kyotaro Horiguchi <horikyota.ntt@gmail.com>,
Fujii Masao <masao.fujii@oss.nttdata.com>, Amit Kapila <amit.kapila16@gmail.com>, pasim@vmware.com, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-06-10T14:45:37Z
Lists: pgsql-hackers
On Tue, Jun 9, 2020 at 8:12 PM Andres Freund <andres@anarazel.de> wrote: > I don't think the size is worth of concern in this case, and I'm not > sure there's any current case where it's really worth spending effort > reducing size. But if there is: It seems possible to reduce the size. Yeah, I don't think it's very important. > First, we could remove the tranche from the lwlock, and instead perform > more work when we need to know it. Which is only when we're going to > sleep, so it'd be ok if it's not that much work. Perhaps we could even > defer determining the tranche to the the *read* side of the wait event > (presumably that'd require making the pgstat side a bit more > complicated). > > Second, it seems like it should be doable to reduce the size of the > waiters list. We e.g. could have a separate 'array of wait lists' array > in shared memory, which gets assigned to an lwlock whenever a backend > wants to wait for an lwlock. The number of processes waiting for lwlocks > is clearly limited by MAX_BACKENDS / 2^18-1 backends waiting, so one 4 > byte integer pointing to a wait list obviously would suffice. > > But again, I'm not sure the current size a real problem anywhere. Honestly, both of these sound more painful than it's worth. We're not likely to have enough LWLocks that using 16 bytes for each one rather than 8 is a major problem. With regard to the first of these ideas, bear in mind that the LWLock might be in a DSM segment that the reader doesn't have mapped. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
Fix instance of elog() called while holding a spinlock
- 4a9809e34d09 9.5.23 landed
- e7a134b5817b 9.6.19 landed
- 5ed8b4a981ed 10.14 landed
- b41a85f53317 11.9 landed
- 03aa25b6e34b 12.4 landed
- c1669fd5812a 13.0 landed
-
Don't call palloc() while holding a spinlock, either.
- 3d474a07934c 12.4 landed
- f88bd3139f3e 13.0 landed
- 7a8cb4a61e7e 11.9 landed
- 0c735c686a90 10.14 landed
-
Don't call elog() while holding spinlock.
- caa3c4242cf8 13.0 landed