Hello everybody,
I was looking for a similar mechanism,
I need to trace an event on map update/delete, I have tried with
tracepoint but I can recover only the file descriptor of map and I
need the map id too (or the map name).
Is there some other solution to trace this event and recover this data?
I prefer to avoid to modify the kernel code.
Thank You,
Best Regards
Raffaele
Il giorno sab 17 feb 2018 alle ore 18:41 Jesper Dangaard Brouer via
iovisor-dev <[email protected]> ha scritto:
>
>
>
> On Sat, 17 Feb 2018 13:49:22 +0000 Teng Qin via iovisor-dev 
> <[email protected]> wrote:
>
> > > We were looking for a mechanism transparent to the eBPF program, though.
> > > A possible rational is to have an hot-standby copy of the program
> > > (including the state) in some other location, but I don't want my
> > > dataplane to be aware of that.
> > > Thanks,
> > >
> > >         fulvio
> >
> >
> > You could also (use another BPF program or ftrace) to trace the
> > bpf_map_update_elem Tracepoint. But in that case you get all update calls
> > and would need to filter for the one you are interested on your own:)
>
> That is a good idea.
>
> Try it out via perf-record to see if it contains what you need:
>
>  $ perf record -e bpf:bpf_map_update_elem -a
>
>  $ perf script
>  xdp_redirect_ma  2273 [011] 261187.968223: bpf:bpf_map_update_elem: map 
> type= ufd=4 key=[00 00 00 00] val=[07 00 00 00]
>
>
> Looking at the above output and tracepoint kernel code, we should
> extend that with a map_id to easily identify/filter what map you are
> interested in.
>
> See patch below signature (not even compile tested).
>
> Example for attaching to tracepoints see:
>  samples/bpf/xdp_monitor_*.c
>
> --
> Best regards,
>   Jesper Dangaard Brouer
>   MSc.CS, Principal Kernel Engineer at Red Hat
>   LinkedIn: http://www.linkedin.com/in/brouer
>
> tracepoint: add map id to bpf tracepoints
>
> From: Jesper Dangaard Brouer <[email protected]>
>
>
> ---
>  include/trace/events/bpf.h |   12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/include/trace/events/bpf.h b/include/trace/events/bpf.h
> index 150185647e6b..e6479ba45261 100644
> --- a/include/trace/events/bpf.h
> +++ b/include/trace/events/bpf.h
> @@ -140,7 +140,7 @@ TRACE_EVENT(bpf_map_create,
>                 __entry->flags       = map->map_flags;
>                 __entry->ufd         = ufd;
>         ),
> -
> +// TODO also add map_id here
>         TP_printk("map type=%s ufd=%d key=%u val=%u max=%u flags=%x",
>                   __print_symbolic(__entry->type, __MAP_TYPE_SYM_TAB),
>                   __entry->ufd, __entry->size_key, __entry->size_value,
> @@ -199,15 +199,18 @@ DECLARE_EVENT_CLASS(bpf_obj_map,
>                 __field(u32, type)
>                 __field(int, ufd)
>                 __string(path, pname->name)
> +               __field(u32, map_id)
>         ),
>
>         TP_fast_assign(
>                 __assign_str(path, pname->name);
>                 __entry->type = map->map_type;
>                 __entry->ufd  = ufd;
> +               __entry->map_id = map->id;
>         ),
>
> -       TP_printk("map type=%s ufd=%d path=%s",
> +       TP_printk("map id=%u type=%s ufd=%d path=%s",
> +                 __entry->map_id,
>                   __print_symbolic(__entry->type, __MAP_TYPE_SYM_TAB),
>                   __entry->ufd, __get_str(path))
>  );
> @@ -244,6 +247,7 @@ DECLARE_EVENT_CLASS(bpf_map_keyval,
>                 __dynamic_array(u8, val, map->value_size)
>                 __field(bool, val_trunc)
>                 __field(int, ufd)
> +               __field(u32, map_id)
>         ),
>
>         TP_fast_assign(
> @@ -255,9 +259,11 @@ DECLARE_EVENT_CLASS(bpf_map_keyval,
>                 __entry->val_len   = min(map->value_size, 16U);
>                 __entry->val_trunc = map->value_size != __entry->val_len;
>                 __entry->ufd       = ufd;
> +               __entry->map_id    = map->id;
>         ),
>
> -       TP_printk("map type=%s ufd=%d key=[%s%s] val=[%s%s]",
> +       TP_printk("map id=%d type=%s ufd=%d key=[%s%s] val=[%s%s]",
> +                 __entry->map_id,
>                   __print_symbolic(__entry->type, __MAP_TYPE_SYM_TAB),
>                   __entry->ufd,
>                   __print_hex(__get_dynamic_array(key), __entry->key_len),
> _______________________________________________
> iovisor-dev mailing list
> [email protected]
> https://lists.iovisor.org/mailman/listinfo/iovisor-dev



-- 
________________________________
Raffaele Sommese
Mail:[email protected]
About me:https://about.me/r4ffy
Gpg Key:http://www.r4ffy.info/Openpgp.asc
GPG key ID: 0x830b1428cf91db2a on http://pgp.mit.edu:11371/

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#1411): https://lists.iovisor.org/g/iovisor-dev/message/1411
Mute This Topic: https://lists.iovisor.org/mt/21386293/21656
Group Owner: [email protected]
Unsubscribe: https://lists.iovisor.org/g/iovisor-dev/unsub  
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to