From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755043AbcAVWNt (ORCPT ); Fri, 22 Jan 2016 17:13:49 -0500 Received: from mail.kernel.org ([198.145.29.136]:58452 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753361AbcAVWNr (ORCPT ); Fri, 22 Jan 2016 17:13:47 -0500 Date: Fri, 22 Jan 2016 19:13:43 -0300 From: Arnaldo Carvalho de Melo To: Stephane Eranian Cc: LKML , Peter Zijlstra , "mingo@elte.hu" , "ak@linux.intel.com" , Jiri Olsa , Namhyung Kim , Rose Belcher , Sukadev Bhattiprolu , Sonny Rao , John Mccutchan , David Ahern , Adrian Hunter , Pawel Moll Subject: Re: [PATCH v8 2/4] perf inject: add jitdump mmap injection support Message-ID: <20160122221343.GN4034@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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 Em Fri, Jan 22, 2016 at 01:22:51PM -0800, Stephane Eranian escreveu: > On Fri, Jan 22, 2016 at 12:44 PM, Arnaldo Carvalho de Melo > wrote: > > Em Mon, Nov 30, 2015 at 10:02:21AM +0100, Stephane Eranian escreveu: > >> This patch adds a --jit/-j option to perf inject. > >> > >> This options injects MMAP records into the perf.data > >> file to cover the jitted code mmaps. It also emits > >> ELF images for each function in the jidump file. > >> Those images are created where the jitdump file is. > >> The MMAP records point to that location as well. > >> > >> Typical flow: > >> $ perf record -k mono -- java -agentpath:libpjvmti.so java_class > >> $ perf inject --jit -i perf.data -o perf.data.jitted > >> $ perf report -i perf.data.jitted > > > > So, it fails 'make -C tools/perf build-test', specifically the one where > > we ask for a NO_LIBELF build, trying to fix: > > > I have rebase to tip.git last night. Will try your branch today. > Will add a couple of minor adjustments and also better documentation > on how to use it. Ok, but please work on top of my branch, that I'll push soon, for instance, I had to fold the patch below, to fix the NO_LIBELF=1 case, so, when one builds that way perf inject -h will say: [acme@jouet linux]$ tools/perf/perf inject -h Usage: perf inject [] -b, --build-ids Inject build-ids into the output stream -f, --force don't complain, do it -i, --input input file name -j, --jit merge jitdump files into perf.data file (not built-in because NO_LIBELF=1) -o, --output output file name -s, --sched-stat Merge sched-stat and sched-switch for getting events where and how long tasks slept -v, --verbose be more verbose (show build ids, etc) --itrace[=] Instruction Tracing options --kallsyms kallsyms pathname --strip strip non-synthesized events (use with --itrace) [acme@jouet linux]$ I did some other changes and carved out two bits into separate patches, will soon push what I have to a perf/jit branch in my tree so that you can take a look. - Arnaldo --------------------------------------------------------- diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index 606653f30759..b38445f08c2f 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c @@ -73,12 +73,14 @@ static int perf_event__repipe_oe_synth(struct perf_tool *tool, return perf_event__repipe_synth(tool, event); } +#ifdef HAVE_LIBELF_SUPPORT static int perf_event__drop_oe(struct perf_tool *tool __maybe_unused, union perf_event *event __maybe_unused, struct ordered_events *oe __maybe_unused) { return 0; } +#endif static int perf_event__repipe_op2_synth(struct perf_tool *tool, union perf_event *event, @@ -243,6 +245,7 @@ static int perf_event__repipe_mmap(struct perf_tool *tool, return err; } +#ifdef HAVE_LIBELF_SUPPORT static int perf_event__jit_repipe_mmap(struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, @@ -261,6 +264,7 @@ static int perf_event__jit_repipe_mmap(struct perf_tool *tool, } return perf_event__repipe_mmap(tool, event, sample, machine); } +#endif static int perf_event__repipe_mmap2(struct perf_tool *tool, union perf_event *event, @@ -275,6 +279,7 @@ static int perf_event__repipe_mmap2(struct perf_tool *tool, return err; } +#ifdef HAVE_LIBELF_SUPPORT static int perf_event__jit_repipe_mmap2(struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, @@ -293,6 +298,7 @@ static int perf_event__jit_repipe_mmap2(struct perf_tool *tool, } return perf_event__repipe_mmap2(tool, event, sample, machine); } +#endif static int perf_event__repipe_fork(struct perf_tool *tool, union perf_event *event, @@ -711,6 +717,7 @@ static int __cmd_inject(struct perf_inject *inject) return ret; } +#ifdef HAVE_LIBELF_SUPPORT static int jit_validate_events(struct perf_session *session) { @@ -725,6 +732,7 @@ jit_validate_events(struct perf_session *session) } return 0; } +#endif int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused) { @@ -765,7 +773,7 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused) }; int ret; - const struct option options[] = { + struct option options[] = { OPT_BOOLEAN('b', "build-ids", &inject.build_ids, "Inject build-ids into the output stream"), OPT_STRING('i', "input", &inject.input_name, "file", @@ -792,7 +800,9 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused) "perf inject []", NULL }; - +#ifndef HAVE_LIBELF_SUPPORT + set_option_nobuild(options, 'j', "jit", "NO_LIBELF=1", true); +#endif argc = parse_options(argc, argv, options, inject_usage, 0); /* @@ -828,7 +838,7 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused) inject.tool.ordered_events = true; inject.tool.ordering_requires_timestamps = true; } - +#ifdef HAVE_LIBELF_SUPPORT if (inject.jit_mode) { /* * validate event is using the correct clockid @@ -847,7 +857,7 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused) */ inject.tool.finished_round = perf_event__drop_oe; } - +#endif ret = symbol__init(&inject.session->header.env); if (ret < 0) goto out_delete; diff --git a/tools/perf/util/Build b/tools/perf/util/Build index 9ef707198941..52a4a806ee2f 100644 --- a/tools/perf/util/Build +++ b/tools/perf/util/Build @@ -106,8 +106,8 @@ libperf-y += scripting-engines/ libperf-$(CONFIG_ZLIB) += zlib.o libperf-$(CONFIG_LZMA) += lzma.o libperf-y += demangle-java.o -libperf-y += jitdump.o -libperf-y += genelf.o +libperf-$(CONFIG_LIBELF) += jitdump.o +libperf-$(CONFIG_LIBELF) += genelf.o CFLAGS_config.o += -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))" ----- End forwarded message -----