lkml.org 
[lkml]   [2015]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 13/13] perf tools: Use same BPF program if arguments are identical
Em Tue, Nov 17, 2015 at 11:05:41AM +0800, Wangnan (F) escreveu:
>
>
> On 2015/11/16 20:10, Wang Nan wrote:
> >This patch allows creating only one BPF program for different
> >'probe_trace_event'(tev) generated by one 'perf_probe_event'(pev), if
> >their prologues are identical.
> >
> >This is done by comparing argument list of different tev, and maps type
> >of prologue and tev using a mapping array. This patch utilizes qsort to
> >sort tevs. After sorting, tevs with identical argument list will be
> >grouped together.
> >
> >Test result:
> >
> >Sample BPF program:
> >
> > SEC("inlines=no\n"
> > "func=SyS_dup? oldfd")
> > int func(void *ctx)
> > {
> > return 1;
> > }
> >
> >It would probe at SyS_dup2 and SyS_dup3, extracts oldfd as its argument.
> >
> >Following cmdline shows BPF program loaded into kernel by perf:
> >
> > # ./perf record -e ./test_bpf_arg.c sleep 4 & sleep 1 && ls /proc/$!/fd/ -l | grep bpf-prog
> >
> >Before this patch:
> >
> > # ./perf record -e ./test_bpf_arg.c sleep 4 & sleep 1 && ls /proc/$!/fd/ -l | grep bpf-prog
> > [1] 24858
> > lrwx------ 1 root root 64 Nov 14 04:09 3 -> anon_inode:bpf-prog
> > lrwx------ 1 root root 64 Nov 14 04:09 4 -> anon_inode:bpf-prog
> > ...
> >
> >After this patch:
> >
> > # ./perf record -e ./test_bpf_arg.c sleep 4 & sleep 1 && ls /proc/$!/fd/ -l | grep bpf-prog
> > [1] 25699
> > lrwx------ 1 root root 64 Nov 14 04:10 3 -> anon_inode:bpf-prog
> > ...
> >
> >Signed-off-by: Wang Nan <wangnan0@huawei.com>
> >Cc: Alexei Starovoitov <ast@kernel.org>
> >Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> >Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> >Cc: Zefan Li <lizefan@huawei.com>
> >Cc: pi3orama@163.com
> >---
>
> [SNIP]
>
> >@@ -462,7 +570,19 @@ static int hook_load_preprocessor(struct bpf_program *prog)
> > return -ENOMEM;
> > }
> >- err = bpf_program__set_prep(prog, pev->ntevs,
> >+ priv->type_mapping = malloc(sizeof(int) * pev->ntevs);
> >+ if (!priv->type_mapping) {
> >+ pr_debug("No enough memory: alloc type_mapping failed\n");
> >+ return -ENOMEM;
> >+ }
> >+ memset(priv->type_mapping, 0xff,
> >+ sizeof(int) * pev->ntevs);
> >+
>
> We can change 0xff to -1 like previous patches. Will do it by resending.

Thanks for doing that,

Applied the new version of this patch,

- Arnaldo


\
 
 \ /
  Last update: 2015-11-17 14:41    [W:0.057 / U:0.788 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site