From: "Wangnan (F)" <wangnan0@huawei.com>
To: <acme@kernel.org>, <ast@plumgrid.com>, <brendan.d.gregg@gmail.com>
Cc: <a.p.zijlstra@chello.nl>, <daniel@iogearbox.net>,
<dsahern@gmail.com>, <hekuang@huawei.com>, <jolsa@kernel.org>,
<lizefan@huawei.com>, <masami.hiramatsu.pt@hitachi.com>,
<namhyung@kernel.org>, <paulus@samba.org>,
<linux-kernel@vger.kernel.org>, <pi3orama@163.com>,
<xiakaixu@huawei.com>, Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: Re: [RFC PATCH 5/7] perf tools: Support setting different slots in a BPF map separately
Date: Fri, 20 Nov 2015 21:25:36 +0800 [thread overview]
Message-ID: <564F1F50.9000807@huawei.com> (raw)
In-Reply-To: <1445078910-73699-6-git-send-email-wangnan0@huawei.com>
On 2015/10/17 18:48, Wang Nan wrote:
> This patch introduces basic facilities to support config different
> slots in a BPF map one by one.
>
> nr_indics and indics are introduced into 'struct parse_events_term',
> where indics is an array of indics which will be configured by this
> config term, nr_indics is the size of the array. The array is passed
> to 'struct bpf_map_priv'. To indicate the new type of configuration,
> BPF_MAP_PRIV_KEY_INDICS is added as a new key type.
> bpf_map_config_foreach_key() is extended to iterate over those indics
> instead of all possible keys.
>
> Signed-off-by: Wang Nan <wangnan0@huawei.com>
> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> Cc: Alexei Starovoitov <ast@plumgrid.com>
> Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
> Cc: Daniel Borkmann <daniel@iogearbox.net>
> Cc: David Ahern <dsahern@gmail.com>
> Cc: He Kuang <hekuang@huawei.com>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Kaixu Xia <xiakaixu@huawei.com>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Paul Mackerras <paulus@samba.org>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Zefan Li <lizefan@huawei.com>
> Cc: pi3orama@163.com
> ---
> tools/perf/util/bpf-loader.c | 68 +++++++++++++++++++++++++++++++++++++++++-
> tools/perf/util/parse-events.c | 4 ++-
> tools/perf/util/parse-events.h | 2 ++
> 3 files changed, 72 insertions(+), 2 deletions(-)
>
> diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c
> index 15cf27a..023fc12 100644
> --- a/tools/perf/util/bpf-loader.c
> +++ b/tools/perf/util/bpf-loader.c
> @@ -638,6 +638,7 @@ int bpf__foreach_tev(struct bpf_object *obj,
>
> enum bpf_map_priv_key_type {
> BPF_MAP_PRIV_KEY_ALL,
> + BPF_MAP_PRIV_KEY_INDICS,
> };
>
> enum bpf_map_priv_value_type {
> @@ -647,6 +648,12 @@ enum bpf_map_priv_value_type {
> struct bpf_map_priv {
> struct {
> enum bpf_map_priv_key_type type;
> + union {
> + struct {
> + size_t nr_indics;
> + u64 *indics;
> + } indics;
> + };
> } key;
>
> struct {
> @@ -663,6 +670,8 @@ bpf_map_priv__clear(struct bpf_map *map __maybe_unused,
> {
> struct bpf_map_priv *priv = _priv;
>
> + if (priv->key.type == BPF_MAP_PRIV_KEY_INDICS)
> + zfree(&priv->key.indics.indics);
> free(priv);
> }
>
> @@ -718,6 +727,20 @@ bpf_map_config_foreach_key(struct bpf_map *map,
> }
> }
> return 0;
> + case BPF_MAP_PRIV_KEY_INDICS:
> + for (i = 0; i < priv->key.indics.nr_indics; i++) {
> + u64 _idx = priv->key.indics.indics[i];
> + unsigned int idx = (unsigned int)(_idx);
> +
> + err = (*func)(name, map_fd, &def,
> + priv, &idx, arg);
> + if (err) {
> + pr_debug("ERROR: failed to insert value to %s[%u]\n",
> + name, idx);
> + return err;
> + }
> + }
This for-loop has a potential problem that, if perf's user want to
set a very big array using indices, for example:
# perf record -e
mybpf.c/maps:mymap:values[1,2,3,10-100000,200000-400000]=3/
mybpf.c/maps:mymap:values[100000-200000]=3/ ...
Perf would alloc nearly 300000 slots for indices array, consume too much
memory.
I will fix this problem by reinterprete indices array, makes negative
value represent range start and use next slot to store range size. For
example, the above perf cmdline can be converted to:
{1,2,3,-10, 99991,-200000,200001} and {-100000,100001}.
Thank you.
next prev parent reply other threads:[~2015-11-20 13:29 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-17 10:48 [RFC PATCH 0/7] perf tools: Config BPF maps through perf cmdline Wang Nan
2015-10-17 10:48 ` [RFC PATCH 1/7] perf tools: Add API to config maps in bpf object Wang Nan
2015-11-20 8:13 ` Wangnan (F)
2015-11-23 11:20 ` Wangnan (F)
2015-10-17 10:48 ` [RFC PATCH 2/7] perf tools: Add API to apply config to BPF map Wang Nan
2015-10-17 10:48 ` [RFC PATCH 3/7] perf record: Apply config to BPF objects before recording Wang Nan
2015-10-17 10:48 ` [RFC PATCH 4/7] perf tools: Enable BPF object configure syntax Wang Nan
2015-10-23 4:48 ` Wangnan (F)
2015-10-17 10:48 ` [RFC PATCH 5/7] perf tools: Support setting different slots in a BPF map separately Wang Nan
2015-11-20 13:25 ` Wangnan (F) [this message]
2015-11-20 15:34 ` Arnaldo Carvalho de Melo
2015-11-23 2:01 ` Wangnan (F)
2015-11-23 5:45 ` Wangnan (F)
2015-10-17 10:48 ` [RFC PATCH 6/7] perf tools: Enable indics setting syntax for BPF maps Wang Nan
2015-10-17 10:48 ` [RFC PATCH 7/7] perf tools: Enable passing event to BPF object Wang Nan
2015-10-17 20:35 ` [RFC PATCH 0/7] perf tools: Config BPF maps through perf cmdline Alexei Starovoitov
2015-10-17 23:58 ` Wangnan (F)
2015-10-18 0:07 ` Alexei Starovoitov
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=564F1F50.9000807@huawei.com \
--to=wangnan0@huawei.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@kernel.org \
--cc=acme@redhat.com \
--cc=ast@plumgrid.com \
--cc=brendan.d.gregg@gmail.com \
--cc=daniel@iogearbox.net \
--cc=dsahern@gmail.com \
--cc=hekuang@huawei.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizefan@huawei.com \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=namhyung@kernel.org \
--cc=paulus@samba.org \
--cc=pi3orama@163.com \
--cc=xiakaixu@huawei.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 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).