From: Arnaldo Carvalho de Melo <acme@redhat.com>
To: Song Liu <songliubraving@fb.com>, Jiri Olsa <jolsa@kernel.org>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
ast@kernel.org, daniel@iogearbox.net, kernel-team@fb.com,
peterz@infradead.org, namhyung@kernel.org, acme@kernel.org
Subject: Re: [PATCH v2 perf,bpf 08/11] perf, bpf: save btf information as headers to perf.data
Date: Fri, 15 Feb 2019 12:26:43 -0200 [thread overview]
Message-ID: <20190215142643.GC5784@redhat.com> (raw)
In-Reply-To: <20190215000010.2590505-7-songliubraving@fb.com>
Em Thu, Feb 14, 2019 at 04:00:09PM -0800, Song Liu escreveu:
> This patch enables perf-record to save btf information as headers to
> perf.data A new header type HEADER_BTF is introduced for this data.
Jiri,
Wouldn't it be better for this HEADER_BTF to be introduced
already as an user space event, Song, see:
tools/perf/util/event.h
and:
tools/perf/util/event.c
perf_event__synthesize_cpu_map()
- Arnaldo
> Signed-off-by: Song Liu <songliubraving@fb.com>
> ---
> tools/perf/util/header.c | 99 +++++++++++++++++++++++++++++++++++++++-
> tools/perf/util/header.h | 1 +
> 2 files changed, 99 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
> index 2ae76a9d06f6..3f1562afe8e5 100644
> --- a/tools/perf/util/header.c
> +++ b/tools/perf/util/header.c
> @@ -1125,6 +1125,45 @@ static int write_bpf_prog_info(struct feat_fd *ff,
> return ret;
> }
>
> +static int write_btf(struct feat_fd *ff,
> + struct perf_evlist *evlist __maybe_unused)
> +{
> + struct perf_env *env = &ff->ph->env;
> + struct rb_root *root;
> + struct rb_node *next;
> + u32 count = 0;
> + int ret;
> +
> + down_read(&env->bpf_info_lock);
> +
> + root = &env->btfs;
> + next = rb_first(root);
> + while (next) {
> + ++count;
> + next = rb_next(next);
> + }
> +
> + ret = do_write(ff, &count, sizeof(count));
> +
> + if (ret < 0)
> + goto out;
> +
> + next = rb_first(root);
> + while (next) {
> + struct btf_node *node;
> +
> + node = rb_entry(next, struct btf_node, rb_node);
> + next = rb_next(&node->rb_node);
> + ret = do_write(ff, node,
> + sizeof(struct btf_node) + node->data_size);
> + if (ret < 0)
> + goto out;
> + }
> +out:
> + up_read(&env->bpf_info_lock);
> + return ret;
> +}
> +
> static int cpu_cache_level__sort(const void *a, const void *b)
> {
> struct cpu_cache_level *cache_a = (struct cpu_cache_level *)a;
> @@ -1628,6 +1667,28 @@ static void print_bpf_prog_info(struct feat_fd *ff, FILE *fp)
> up_read(&env->bpf_info_lock);
> }
>
> +static void print_btf(struct feat_fd *ff, FILE *fp)
> +{
> + struct perf_env *env = &ff->ph->env;
> + struct rb_root *root;
> + struct rb_node *next;
> +
> + down_read(&env->bpf_info_lock);
> +
> + root = &env->btfs;
> + next = rb_first(root);
> +
> + while (next) {
> + struct btf_node *node;
> +
> + node = rb_entry(next, struct btf_node, rb_node);
> + next = rb_next(&node->rb_node);
> + fprintf(fp, "# bpf_prog_info of id %u\n", node->id);
> + }
> +
> + up_read(&env->bpf_info_lock);
> +}
> +
> static void free_event_desc(struct perf_evsel *events)
> {
> struct perf_evsel *evsel;
> @@ -2723,6 +2784,41 @@ static int process_bpf_prog_info(struct feat_fd *ff,
> return err;
> }
>
> +static int process_btf(struct feat_fd *ff, void *data __maybe_unused)
> +{
> + struct perf_env *env = &ff->ph->env;
> + u32 count, i;
> +
> + if (do_read_u32(ff, &count))
> + return -1;
> +
> + down_write(&env->bpf_info_lock);
> +
> + for (i = 0; i < count; ++i) {
> + struct btf_node btf_node;
> + struct btf_node *node;
> +
> + if (__do_read(ff, &btf_node, sizeof(struct btf_node)))
> + return -1;
> +
> + node = malloc(sizeof(struct btf_node) + btf_node.data_size);
> + if (!node)
> + return -1;
> +
> + node->id = btf_node.id;
> + node->data_size = btf_node.data_size;
> +
> + if (__do_read(ff, node->data, btf_node.data_size)) {
> + free(node);
> + return -1;
> + }
> + perf_env__insert_btf(env, node);
> + }
> +
> + up_write(&env->bpf_info_lock);
> + return 0;
> +}
> +
> struct feature_ops {
> int (*write)(struct feat_fd *ff, struct perf_evlist *evlist);
> void (*print)(struct feat_fd *ff, FILE *fp);
> @@ -2783,7 +2879,8 @@ static const struct feature_ops feat_ops[HEADER_LAST_FEATURE] = {
> FEAT_OPR(SAMPLE_TIME, sample_time, false),
> FEAT_OPR(MEM_TOPOLOGY, mem_topology, true),
> FEAT_OPR(CLOCKID, clockid, false),
> - FEAT_OPR(BPF_PROG_INFO, bpf_prog_info, false)
> + FEAT_OPR(BPF_PROG_INFO, bpf_prog_info, false),
> + FEAT_OPR(BTF, btf, false)
> };
>
> struct header_print_data {
> diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h
> index 0785c91b4c3a..ba51d8e43c53 100644
> --- a/tools/perf/util/header.h
> +++ b/tools/perf/util/header.h
> @@ -40,6 +40,7 @@ enum {
> HEADER_MEM_TOPOLOGY,
> HEADER_CLOCKID,
> HEADER_BPF_PROG_INFO,
> + HEADER_BTF,
> HEADER_LAST_FEATURE,
> HEADER_FEAT_BITS = 256,
> };
> --
> 2.17.1
next prev parent reply other threads:[~2019-02-15 14:26 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-14 23:56 [PATCH v2 perf,bpf 00/11] perf annotation of BPF programs Song Liu
2019-02-14 23:58 ` [PATCH v2 perf,bpf 01/11] perf, bpf: consider events with attr.bpf_event as side-band events Song Liu
2019-02-15 14:14 ` Arnaldo Carvalho de Melo
2019-02-15 17:02 ` Song Liu
2019-02-15 18:04 ` Arnaldo Carvalho de Melo
2019-02-15 0:00 ` [PATCH v2 perf,bpf 02/11] bpf: libbpf: introduce bpf_program__get_prog_info_linear() Song Liu
2019-02-15 0:00 ` [PATCH v2 perf,bpf 03/11] bpf: bpftool: use bpf_program__get_prog_info_linear() in prog.c:do_dump() Song Liu
2019-02-15 0:00 ` [PATCH v2 perf,bpf 04/11] perf, bpf: synthesize bpf events with bpf_program__get_prog_info_linear() Song Liu
2019-02-15 0:00 ` [PATCH v2 perf,bpf 05/11] perf, bpf: save bpf_prog_info in a rbtree in perf_env Song Liu
2019-02-15 14:21 ` Arnaldo Carvalho de Melo
2019-02-15 17:04 ` Song Liu
2019-02-15 0:00 ` [PATCH v2 perf,bpf 06/11] perf, bpf: save bpf_prog_info information as headers to perf.data Song Liu
2019-02-15 0:00 ` [PATCH v2 perf,bpf 07/11] perf, bpf: save btf in a rbtree in perf_env Song Liu
2019-02-15 14:30 ` Arnaldo Carvalho de Melo
2019-02-15 0:00 ` [PATCH v2 perf,bpf 08/11] perf, bpf: save btf information as headers to perf.data Song Liu
2019-02-15 14:26 ` Arnaldo Carvalho de Melo [this message]
2019-02-15 17:25 ` Song Liu
2019-02-15 17:40 ` Arnaldo Carvalho de Melo
2019-02-15 17:47 ` Song Liu
2019-02-15 18:20 ` Arnaldo Carvalho de Melo
2019-02-15 18:59 ` Song Liu
2019-02-15 0:00 ` [PATCH v2 perf,bpf 09/11] perf-top: add option --bpf-event Song Liu
2019-02-15 14:27 ` Arnaldo Carvalho de Melo
2019-02-15 17:06 ` Song Liu
2019-02-15 18:05 ` Arnaldo Carvalho de Melo
2019-02-15 0:00 ` [PATCH v2 perf,bpf 10/11] perf, bpf: enable annotation of bpf program Song Liu
2019-02-15 0:00 ` [PATCH v2 perf,bpf 11/11] perf, bpf: save information about short living bpf programs Song Liu
2019-02-15 14:41 ` Arnaldo Carvalho de Melo
2019-02-15 17:13 ` Song Liu
2019-02-15 18:09 ` Arnaldo Carvalho de Melo
2019-02-15 18:13 ` Song Liu
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=20190215142643.GC5784@redhat.com \
--to=acme@redhat.com \
--cc=acme@kernel.org \
--cc=ast@kernel.org \
--cc=daniel@iogearbox.net \
--cc=jolsa@kernel.org \
--cc=kernel-team@fb.com \
--cc=linux-kernel@vger.kernel.org \
--cc=namhyung@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=songliubraving@fb.com \
/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.