From: | Craig Ringer <craig(dot)ringer(at)enterprisedb(dot)com> |
---|---|
To: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | [PATCH] Identify LWLocks in tracepoints |
Date: | 2020-12-19 05:00:01 |
Message-ID: | CAGRY4nxJo+-HCC2i5H93ttSZ4gZO-FSddCwvkb-qAfQ1zdXd1w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi all
The attached patch set follows on from the discussion in [1] "Add LWLock
blocker(s) information" by adding the actual LWLock* and the numeric
tranche ID to each LWLock related TRACE_POSTGRESQL_foo tracepoint.
This does not provide complete information on blockers, because it's not
necessarily valid to compare any two LWLock* pointers between two process
address spaces. The locks could be in DSM segments, and those DSM segments
could be mapped at different addresses.
I wasn't able to work out a sensible way to map a LWLock* to any sort of
(tranche-id, lock-index) because there's no requirement that locks in a
tranche be contiguous or known individually to the lmgr.
Despite that, the patches improve the information available for LWLock
analysis significantly.
Patch 1 fixes a bogus tracepoint where an lwlock__acquire event would be
fired from LWLockWaitForVar, despite that function never actually acquiring
the lock.
Patch 2 adds the tranche id and lock pointer for each trace hit. This makes
it possible to differentiate between individual locks within a tranche, and
(so long as they aren't tranches in a DSM segment) compare locks between
processes. That means you can do lock-order analysis etc, which was not
previously especially feasible. Traces also don't have to do userspace
reads for the tranche name all the time, so the trace can run with lower
overhead.
Patch 3 adds a single-path tracepoint for all lock acquires and releases,
so you only have to probe the lwlock__acquired and lwlock__release events
to see all acquires/releases, whether conditional or otherwise. It also
adds start markers that can be used for timing wallclock duration of LWLock
acquires/releases.
Patch 4 adds some comments on LWLock tranches to try to address some points
I found confusing and hard to understand when investigating this topic.
Attachment | Content-Type | Size |
---|---|---|
v1-0004-Comments-on-LWLock-tranches.patch | application/x-patch | 5.6 KB |
v1-0001-Remove-bogus-lwlock__acquire-tracepoint-from-LWLo.patch | application/x-patch | 1002 bytes |
v1-0002-Pass-the-target-LWLock-and-tranche-ID-to-LWLock-t.patch | application/x-patch | 7.2 KB |
v1-0003-Add-to-the-tracepoints-in-LWLock-routines.patch | application/x-patch | 5.7 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2020-12-19 05:00:15 | Re: Commit fest manager for 2021-01 |
Previous Message | Amit Kapila | 2020-12-19 04:33:47 | Re: Commit fest manager for 2021-01 |