Messages in this thread | | | Date | Mon, 23 Nov 2015 19:20:09 +0800 | From | "Wangnan (F)" <> | Subject | Re: [RFC PATCH 1/7] perf tools: Add API to config maps in bpf object |
| |
On 2015/10/17 18:48, Wang Nan wrote: > bpf__config_obj() is introduced as a core API to config BPF object > after loading. One configuration option of maps is introduced. After > this patch BPF object can accept configuration like: > > maps.my_map.value=1234 > > This patch is more complex than the work it really does because the > consideration of extension. In designing of BPF map configuration, > following things should be considered: > > 1. Array indics selection: perf should allow user setting different > value to different slots in an array, with syntax like: > maps.my_map.value[0,3-6]=1234; > > 2. Type of value: integer is not the only valid value type. Perf > event can also be put into a map after commit 35578d7984003097af2b1e3 > (bpf: Implement function bpf_perf_event_read() that get the selected > hardware PMU conuter); > > 3. For hash table, it is possible to use string or other as key; > > 4. It is possible that map configuration is unable to be setup > during parsing. Perf event is an example. > > Therefore, this patch does tie following thing for extension: > > 1. Instead of update map element during parsing, this patch stores > map config options in 'struct bpf_map_priv'. Following patches > would apply those configs at proper time;
Because of this delay-updating manner, current implementation forbid setting a map with different configuration. For example:
# perf record -e test_bpf.c/maps:channel:value[0...9]=1,maps:channel:value[10...19]=2/ ...
is equal to # perf record -e test_bpf.c/maps:channel:value[10...19]=2/ ...
because [see follow]
> 2. Make 'struct bpf_map_priv' extensible so following patches can > add new key and value operations; > > 3. Use bpf_config_map_funcs array to support more maps configuration. > > Signed-off-by: Wang Nan <wangnan0@huawei.com> > Signed-off-by: He Kuang <hekuang@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 > Link: http://lkml.kernel.org/n/ebpf-36xcrahy9n0ayc05mu7aajpk@git.kernel.org > --- >
[SNIP]
> > +enum bpf_map_priv_key_type { > + BPF_MAP_PRIV_KEY_ALL, > +}; > + > +enum bpf_map_priv_value_type { > + BPF_MAP_PRIV_VAL_VALUE, > +}; > + > +struct bpf_map_priv { > + struct { > + enum bpf_map_priv_key_type type; > + } key; > + > + struct { > + enum bpf_map_priv_value_type type; > + union { > + u64 val; > + }; > + } value; > +}; > +
... because this structure holds only one config term.
In next version I'd like to save multiple setting operations in this structure.
Thank you.
| |