Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753666AbbKQNQG (ORCPT ); Tue, 17 Nov 2015 08:16:06 -0500 Received: from mail.kernel.org ([198.145.29.136]:49083 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752119AbbKQNQF (ORCPT ); Tue, 17 Nov 2015 08:16:05 -0500 Date: Tue, 17 Nov 2015 10:16:00 -0300 From: Arnaldo Carvalho de Melo To: "Wangnan (F)" Cc: masami.hiramatsu.pt@hitachi.com, ast@kernel.org, lizefan@huawei.com, pi3orama@163.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH 13/13] perf tools: Use same BPF program if arguments are identical Message-ID: <20151117131600.GL22729@kernel.org> References: <1447675815-166222-1-git-send-email-wangnan0@huawei.com> <1447675815-166222-14-git-send-email-wangnan0@huawei.com> <564A9985.20404@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <564A9985.20404@huawei.com> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2578 Lines: 80 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 > >Cc: Alexei Starovoitov > >Cc: Arnaldo Carvalho de Melo > >Cc: Masami Hiramatsu > >Cc: Zefan Li > >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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/