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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.