From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>, Song Liu <song@kernel.org>,
Hao Luo <haoluo@google.com>, Juri Lelli <juri.lelli@redhat.com>,
Will Deacon <will@kernel.org>, Waiman Long <longman@redhat.com>,
Boqun Feng <boqun.feng@gmail.com>,
Stephane Eranian <eranian@google.com>,
LKML <linux-kernel@vger.kernel.org>,
linux-perf-users@vger.kernel.org, bpf@vger.kernel.org
Subject: Re: [PATCH 0/4] perf lock contention: Improve lock symbol display (v1)
Date: Mon, 13 Mar 2023 18:45:53 -0300 [thread overview]
Message-ID: <ZA+ZkRYADwtFEsPt@kernel.org> (raw)
In-Reply-To: <20230313204825.2665483-1-namhyung@kernel.org>
Em Mon, Mar 13, 2023 at 01:48:21PM -0700, Namhyung Kim escreveu:
> Hello,
>
> This patchset improves the symbolization of locks for -l/--lock-addr mode.
> As of now it only shows global lock symbols present in the kallsyms. But
> we can add some more lock symbols by traversing pointers in the BPF program.
>
> For example, mmap_lock can be reached from the mm_struct of the current task
> (task_struct->mm->mmap_lock) and we can compare the address of the give lock
> with it. Similarly I've added 'siglock' for current->sighand->siglock.
>
> On the other hand, we can traverse some of semi-global locks like per-cpu,
> per-device, per-filesystem and so on. I've added 'rqlock' for each cpu's
> runqueue lock.
>
> It cannot cover all types of locks in the system but it'd be fairly usefule
> if we can add many of often contended locks. I tried to add futex locks
> but it failed to find the __futex_data symbol from BTF. I'm not sure why but
> I guess it's because the struct doesn't have a tag name.
>
> Those locks are added just because they got caught during my test.
> It'd be nice if you suggest which locks to add and how to do that. :)
> I'm thinking if there's a way to track file-based locks (like epoll, etc).
>
> Finally I also added a lock type name after the symbols (if any) so that we
> can get some idea even though it has no symbol. The example output looks
> like below:
>
> $ sudo ./perf lock con -abl -- sleep 1
> contended total wait max wait avg wait address symbol
>
> 44 6.13 ms 284.49 us 139.28 us ffffffff92e06080 tasklist_lock (rwlock)
> 159 983.38 us 12.38 us 6.18 us ffff8cc717c90000 siglock (spinlock)
> 10 679.90 us 153.35 us 67.99 us ffff8cdc2872aaf8 mmap_lock (rwsem)
> 9 558.11 us 180.67 us 62.01 us ffff8cd647914038 mmap_lock (rwsem)
> 78 228.56 us 7.82 us 2.93 us ffff8cc700061c00 (spinlock)
> 5 41.60 us 16.93 us 8.32 us ffffd853acb41468 (spinlock)
> 10 37.24 us 5.87 us 3.72 us ffff8cd560b5c200 siglock (spinlock)
> 4 11.17 us 3.97 us 2.79 us ffff8d053ddf0c80 rq_lock (spinlock)
> 1 7.86 us 7.86 us 7.86 us ffff8cd64791404c (spinlock)
> 1 4.13 us 4.13 us 4.13 us ffff8d053d930c80 rq_lock (spinlock)
> 7 3.98 us 1.67 us 568 ns ffff8ccb92479440 (mutex)
> 2 2.62 us 2.33 us 1.31 us ffff8cc702e6ede0 (rwlock)
>
> The tasklist_lock is global so it's from the kallsyms. But others like
> siglock, mmap_lock and rq_lock are from the BPF.
Beautiful :-)
And the csets are _so_ small and demonstrate techniques that should be
used in more and more tools.
Applied, testing.
- Arnaldo
> You get get the code at 'perf/lock-symbol-v1' branch in
>
> git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git
>
> Thanks,
> Namhyung
>
> Namhyung Kim (4):
> perf lock contention: Track and show mmap_lock with address
> perf lock contention: Track and show siglock with address
> perf lock contention: Show per-cpu rq_lock with address
> perf lock contention: Show lock type with address
>
> tools/perf/builtin-lock.c | 46 +++++++----
> tools/perf/util/bpf_lock_contention.c | 35 ++++++++-
> .../perf/util/bpf_skel/lock_contention.bpf.c | 77 +++++++++++++++++++
> tools/perf/util/bpf_skel/lock_data.h | 14 ++++
> 4 files changed, 152 insertions(+), 20 deletions(-)
>
>
> base-commit: b8fa3e3833c14151a47ebebbc5427dcfe94bb407
> --
> 2.40.0.rc1.284.g88254d51c5-goog
>
--
- Arnaldo
next prev parent reply other threads:[~2023-03-13 21:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-13 20:48 [PATCH 0/4] perf lock contention: Improve lock symbol display (v1) Namhyung Kim
2023-03-13 20:48 ` [PATCH 1/4] perf lock contention: Track and show mmap_lock with address Namhyung Kim
2023-03-13 20:48 ` [PATCH 2/4] perf lock contention: Track and show siglock " Namhyung Kim
2023-03-13 20:48 ` [PATCH 3/4] perf lock contention: Show per-cpu rq_lock " Namhyung Kim
2023-03-13 20:48 ` [PATCH 4/4] perf lock contention: Show lock type " Namhyung Kim
2023-03-13 21:45 ` Arnaldo Carvalho de Melo [this message]
2023-03-14 12:23 ` [PATCH 0/4] perf lock contention: Improve lock symbol display (v1) Arnaldo Carvalho de Melo
2023-03-14 17:55 ` Namhyung Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZA+ZkRYADwtFEsPt@kernel.org \
--to=acme@kernel.org \
--cc=boqun.feng@gmail.com \
--cc=bpf@vger.kernel.org \
--cc=eranian@google.com \
--cc=haoluo@google.com \
--cc=jolsa@kernel.org \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=song@kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox