[PATCHSET 0/5] perf lock contention: Add cgroup support (v1)

From: Namhyung Kim
Date: Wed Aug 30 2023 - 19:01:56 EST


Hello,

The cgroup support comes with two flavors. One is to aggregate the
result by cgroups and the other is to filter result for the given
cgroups. For now, it only works in BPF mode.

The first one is -g/--lock-cgroup option to show lock stats by cgroups
like below. The cgroup names were shortened for brevity:

$ sudo perf lock con -abg perf bench sched messaging
contended total wait max wait avg wait cgroup

1052 3.34 ms 84.71 us 3.17 us /app-org.gnome.Terminal.slice/vte-spawn-52221fb8-b33f-4a52-b5c3-e35d1e6fc0e0.scope
13 106.60 us 11.48 us 8.20 us /session.slice/org.gnome.Shell@x11.service
12 21.20 us 4.93 us 1.77 us /
3 12.10 us 8.80 us 4.03 us /session-4.scope
2 10.98 us 7.50 us 5.49 us /app-gnome-firefox\x2desr-34054.scope
2 6.04 us 4.88 us 3.02 us /app-gnome-google\x2dchrome-6442.scope
1 5.63 us 5.63 us 5.63 us /app-org.gnome.Terminal.slice/gnome-terminal-server.service
1 3.51 us 3.51 us 3.51 us /pipewire.service
1 2.15 us 2.15 us 2.15 us /pipewire-pulse.service
1 742 ns 742 ns 742 ns /dbus.service

The other is -G/--cgroup-filter option to show lock stats only from the
given cgroups. It doesn't support cgroup hierarchy and regex matching.

$ sudo perf lock con -abt -G / perf bench sched messaging
contended total wait max wait avg wait pid comm

2 10.58 us 8.39 us 5.29 us 257552 kworker/4:1
2 9.76 us 7.96 us 4.88 us 0 swapper
4 5.36 us 2.09 us 1.34 us 255462 kworker/0:2
3 3.33 us 1.48 us 1.11 us 257680 kworker/3:1
2 2.59 us 1.46 us 1.29 us 257478 kworker/2:2
1 1.50 us 1.50 us 1.50 us 15 rcu_preempt

You can also use these two options together. :)

The two more test cases were added to the existing lock contention test.

The code is available at 'perf/lock-cgroup-v1' branch in the tree below.

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


Thanks,
Namhyung


Namhyung Kim (5):
perf tools: Add read_all_cgroups() and __cgroup_find()
perf lock contention: Prepare to handle cgroups
perf lock contention: Add -g/--lock-cgroup option
perf lock contention: Add -G/--cgroup-filter option
perf test: Improve perf lock contention test

tools/perf/Documentation/perf-lock.txt | 8 ++
tools/perf/builtin-lock.c | 99 ++++++++++++++++++-
tools/perf/tests/shell/lock_contention.sh | 45 +++++++++
tools/perf/util/bpf_lock_contention.c | 51 +++++++++-
.../perf/util/bpf_skel/lock_contention.bpf.c | 48 ++++++++-
tools/perf/util/bpf_skel/lock_data.h | 3 +-
tools/perf/util/cgroup.c | 63 ++++++++++--
tools/perf/util/cgroup.h | 5 +
tools/perf/util/lock-contention.h | 10 +-
9 files changed, 312 insertions(+), 20 deletions(-)


base-commit: d2045f87154bf67a50ebefe28d2ca0e1e3f8eef1
--
2.42.0.283.g2d96d420d3-goog