[RFC/PATCH 0/3] perf lock contention: Track lock owner (v2)

From: Namhyung Kim
Date: Mon Feb 06 2023 - 19:24:17 EST


Hello,

When there're many lock contentions in the system, people sometimes
want to know who caused the contention, IOW who's the owner of the
locks.

This patchset adds -o/--lock-owner option to track the owner info
if it's available. Right now, it supports mutex and rwsem as they
have the owner fields in themselves. Please see the patch 2 for the
details.

Changes in v2)
* fix missing callstacks
* support old rwsem type with recent clang (>= 15.0)

The patch 1 is a fix for missing callstacks and the patch 2 is the
main change. The patch 3 adds support for old kernels when compiler
supports a recent builtin to check field type in a struct (Thanks
to Hao).

Example output (for mutex only):

$ sudo ./perf lock con -abo -Y mutex -- ./perf bench sched pipe
# Running 'sched/pipe' benchmark:
# Executed 1000000 pipe operations between two processes

Total time: 4.910 [sec]

4.910435 usecs/op
203647 ops/sec
contended total wait max wait avg wait pid owner

2 15.50 us 8.29 us 7.75 us 1582852 sched-pipe
7 7.20 us 2.47 us 1.03 us -1 Unknown
1 6.74 us 6.74 us 6.74 us 1582851 sched-pipe

You can get it from 'perf/lock-owner-v2' branch in

git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git

Thanks,
Namhyung

Namhyung Kim (3):
perf lock contention: Fix to save callstack for the default modified
perf lock contention: Add -o/--lock-owner option
perf lock contention: Support old rw_semaphore type

tools/perf/Documentation/perf-lock.txt | 5 +
tools/perf/builtin-lock.c | 52 +++++++++--
tools/perf/util/bpf_lock_contention.c | 1 +
.../perf/util/bpf_skel/lock_contention.bpf.c | 91 ++++++++++++++++++-
tools/perf/util/lock-contention.h | 1 +
5 files changed, 136 insertions(+), 14 deletions(-)


base-commit: 17f248aa8664ff5b3643491136283e73b5c18166
--
2.39.1.519.gcb327c4b5f-goog