From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>, Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
linux-perf-users@vger.kernel.org, Song Liu <song@kernel.org>,
Blake Jones <blakejones@google.com>,
bpf@vger.kernel.org
Subject: Re: [PATCH 1/4] perf lock contention: Add lock_data.h for common data
Date: Mon, 12 Dec 2022 16:42:29 -0300 [thread overview]
Message-ID: <Y5eEJd/AhSzUfILO@kernel.org> (raw)
In-Reply-To: <20221209190727.759804-2-namhyung@kernel.org>
Em Fri, Dec 09, 2022 at 11:07:24AM -0800, Namhyung Kim escreveu:
> Accessing BPF maps should use the same data types. Add bpf_skel/lock_data.h
> to define the common data structures. No functional changes.
You forgot to update one of the stack_id users, that field got renamed:
util/bpf_skel/lock_contention.bpf.c:144:6: error: no member named 'stack_id' in 'struct contention_key'
key.stack_id = pelem->stack_id;
~~~ ^
1 error generated.
make[2]: *** [Makefile.perf:1075: /tmp/build/perf/util/bpf_skel/.tmp/lock_contention.bpf.o] Error 1
make[1]: *** [Makefile.perf:236: sub-make] Error 2
make: *** [Makefile:113: install-bin] Error 2
make: Leaving directory '/var/home/acme/git/perf/tools/perf'
Performance counter stats for 'make -k NO_LIBTRACEEVENT=1 BUILD_BPF_SKEL=1 CORESIGHT=1 O=/tmp/build/perf -C tools/perf install-bin':
7,005,216,342 cycles:u
11,851,225,594 instructions:u # 1.69 insn per cycle
3.168945139 seconds time elapsed
1.730964000 seconds user
1.578932000 seconds sys
⬢[acme@toolbox perf]$ git log --oneline -4
f6e7a5f1db49dc8e (HEAD) perf lock contention: Add lock_data.h for common data
5d9b55713c5c037f perf python: Account for multiple words in CC
d9078bf3f3320457 perf off_cpu: Fix a typo in BTF tracepoint name, it should be 'btf_trace_sched_switch'
3b7ea76f0f7844f5 perf test: Update event group check for support of uncore event
⬢[acme@toolbox perf]$
After some point it builds.
I'm fixing this to keep it bisectable.
- Arnaldo
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
> tools/perf/util/bpf_lock_contention.c | 19 ++++--------
> .../perf/util/bpf_skel/lock_contention.bpf.c | 17 ++---------
> tools/perf/util/bpf_skel/lock_data.h | 30 +++++++++++++++++++
> 3 files changed, 38 insertions(+), 28 deletions(-)
> create mode 100644 tools/perf/util/bpf_skel/lock_data.h
>
> diff --git a/tools/perf/util/bpf_lock_contention.c b/tools/perf/util/bpf_lock_contention.c
> index f4ebb9a2e380..b6a8eb7164b3 100644
> --- a/tools/perf/util/bpf_lock_contention.c
> +++ b/tools/perf/util/bpf_lock_contention.c
> @@ -12,17 +12,10 @@
> #include <bpf/bpf.h>
>
> #include "bpf_skel/lock_contention.skel.h"
> +#include "bpf_skel/lock_data.h"
>
> static struct lock_contention_bpf *skel;
>
> -struct lock_contention_data {
> - u64 total_time;
> - u64 min_time;
> - u64 max_time;
> - u32 count;
> - u32 flags;
> -};
> -
> int lock_contention_prepare(struct lock_contention *con)
> {
> int i, fd;
> @@ -110,8 +103,8 @@ int lock_contention_stop(void)
> int lock_contention_read(struct lock_contention *con)
> {
> int fd, stack, err = 0;
> - s32 prev_key, key;
> - struct lock_contention_data data = {};
> + struct contention_key *prev_key, key;
> + struct contention_data data = {};
> struct lock_stat *st = NULL;
> struct machine *machine = con->machine;
> u64 *stack_trace;
> @@ -126,8 +119,8 @@ int lock_contention_read(struct lock_contention *con)
> if (stack_trace == NULL)
> return -1;
>
> - prev_key = 0;
> - while (!bpf_map_get_next_key(fd, &prev_key, &key)) {
> + prev_key = NULL;
> + while (!bpf_map_get_next_key(fd, prev_key, &key)) {
> struct map *kmap;
> struct symbol *sym;
> int idx = 0;
> @@ -184,7 +177,7 @@ int lock_contention_read(struct lock_contention *con)
> }
>
> hlist_add_head(&st->hash_entry, con->result);
> - prev_key = key;
> + prev_key = &key;
>
> /* we're fine now, reset the values */
> st = NULL;
> diff --git a/tools/perf/util/bpf_skel/lock_contention.bpf.c b/tools/perf/util/bpf_skel/lock_contention.bpf.c
> index 9681cb59b0df..0f63cc28ccba 100644
> --- a/tools/perf/util/bpf_skel/lock_contention.bpf.c
> +++ b/tools/perf/util/bpf_skel/lock_contention.bpf.c
> @@ -5,24 +5,11 @@
> #include <bpf/bpf_tracing.h>
> #include <bpf/bpf_core_read.h>
>
> -/* maximum stack trace depth */
> -#define MAX_STACKS 8
> +#include "lock_data.h"
>
> /* default buffer size */
> #define MAX_ENTRIES 10240
>
> -struct contention_key {
> - __s32 stack_id;
> -};
> -
> -struct contention_data {
> - __u64 total_time;
> - __u64 min_time;
> - __u64 max_time;
> - __u32 count;
> - __u32 flags;
> -};
> -
> struct tstamp_data {
> __u64 timestamp;
> __u64 lock;
> @@ -34,7 +21,7 @@ struct tstamp_data {
> struct {
> __uint(type, BPF_MAP_TYPE_STACK_TRACE);
> __uint(key_size, sizeof(__u32));
> - __uint(value_size, MAX_STACKS * sizeof(__u64));
> + __uint(value_size, sizeof(__u64));
> __uint(max_entries, MAX_ENTRIES);
> } stacks SEC(".maps");
>
> diff --git a/tools/perf/util/bpf_skel/lock_data.h b/tools/perf/util/bpf_skel/lock_data.h
> new file mode 100644
> index 000000000000..dbdf4caedc4a
> --- /dev/null
> +++ b/tools/perf/util/bpf_skel/lock_data.h
> @@ -0,0 +1,30 @@
> +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +/* Data structures shared between BPF and tools. */
> +#ifndef UTIL_BPF_SKEL_LOCK_DATA_H
> +#define UTIL_BPF_SKEL_LOCK_DATA_H
> +
> +struct contention_key {
> + s32 stack_or_task_id;
> +};
> +
> +#define TASK_COMM_LEN 16
> +
> +struct contention_task_data {
> + char comm[TASK_COMM_LEN];
> +};
> +
> +struct contention_data {
> + u64 total_time;
> + u64 min_time;
> + u64 max_time;
> + u32 count;
> + u32 flags;
> +};
> +
> +enum lock_aggr_mode {
> + LOCK_AGGR_ADDR = 0,
> + LOCK_AGGR_TASK,
> + LOCK_AGGR_CALLER,
> +};
> +
> +#endif /* UTIL_BPF_SKEL_LOCK_DATA_H */
> --
> 2.39.0.rc1.256.g54fd8350bd-goog
--
- Arnaldo
next prev parent reply other threads:[~2022-12-12 19:42 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-09 19:07 [PATCH 0/4] perf lock contention: Support task/addr aggregation mode (v1) Namhyung Kim
2022-12-09 19:07 ` [PATCH 1/4] perf lock contention: Add lock_data.h for common data Namhyung Kim
2022-12-12 19:42 ` Arnaldo Carvalho de Melo [this message]
2022-12-12 19:43 ` Arnaldo Carvalho de Melo
2022-12-12 19:45 ` Arnaldo Carvalho de Melo
2022-12-12 20:04 ` Namhyung Kim
2022-12-09 19:07 ` [PATCH 2/4] perf lock contention: Implement -t/--threads option for BPF Namhyung Kim
2022-12-09 19:07 ` [PATCH 3/4] perf lock contention: Add -l/--lock-addr option Namhyung Kim
2022-12-09 19:07 ` [PATCH 4/4] perf test: Update perf lock contention test Namhyung Kim
2022-12-12 19:58 ` [PATCH 0/4] perf lock contention: Support task/addr aggregation mode (v1) Arnaldo Carvalho de Melo
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=Y5eEJd/AhSzUfILO@kernel.org \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=blakejones@google.com \
--cc=bpf@vger.kernel.org \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=song@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;
as well as URLs for NNTP newsgroup(s).