From: Namhyung Kim <namhyung@kernel.org>
To: Anton Blanchard <anton@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
linux-kernel@vger.kernel.org,
Adrian Hunter <adrian.hunter@intel.com>,
David Ahern <dsahern@gmail.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Jiri Olsa <jolsa@redhat.com>, Mike Galbraith <efault@gmx.de>,
Paul Mackerras <paulus@samba.org>,
Peter Zijlstra <peterz@infradead.org>,
Stephane Eranian <eranian@google.com>,
Michael Ellerman <michaele@au1.ibm.com>
Subject: Re: [PATCH 06/35] perf hists: Leave symbol addr hist bucket auto alloc to symbol layer
Date: Thu, 13 Feb 2014 17:19:50 +0900 [thread overview]
Message-ID: <87fvnnzaop.fsf@sejong.aot.lge.com> (raw)
In-Reply-To: <20140213040913.1c59cc45@kryten> (Anton Blanchard's message of "Thu, 13 Feb 2014 04:09:13 +1100")
Hi Anton,
On Thu, 13 Feb 2014 04:09:13 +1100, Anton Blanchard wrote:
> Hi,
>
>> > Can you try the following patch?
>> >
>> > It should fix another problem, i.e. we were allocating, but
>> > annotation would fail in the !TUI case, as it would return at
>> > symbol__inc_addr_samples when use_browser != 1, now it will allocate
>> > and mark the right bucket.
>> >
>> > I'll have this in perf/urgent and will do the optimization of not
>> > allocating those buckets in the report case when not doing
>> > integrated annotation, i.e. report --stdio doesn't provide a way to
>> > go to the annotation --stdio, so no point on allocating the
>> > buckets. Just on 'annotate --stdio' we should allocate it, etc.
>>
>> This fixes the issue, thanks!
>
> After some more testing, perf report can SEGV with this patch:
I think we need to separate the check for annotate and report. The
check was for the report case only and annotate always needs to increate
sample info. Does patch below fix your problem?
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index d882b6f96411..bab762bdeb0d 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -75,6 +75,11 @@ static int report__config(const char *var, const char *value, void *cb)
return perf_default_config(var, value, cb);
}
+static bool report_needs_annotate(void)
+{
+ return use_browser == 1 && sort__has_sym;
+}
+
static int report__add_mem_hist_entry(struct report *rep, struct addr_location *al,
struct perf_sample *sample, struct perf_evsel *evsel)
{
@@ -110,14 +115,16 @@ static int report__add_mem_hist_entry(struct report *rep, struct addr_location *
if (!he)
return -ENOMEM;
- err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
- if (err)
- goto out;
+ if (report_needs_annotate()) {
+ err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
+ if (err)
+ goto out;
- mx = he->mem_info;
- err = addr_map_symbol__inc_samples(&mx->daddr, evsel->idx);
- if (err)
- goto out;
+ mx = he->mem_info;
+ err = addr_map_symbol__inc_samples(&mx->daddr, evsel->idx);
+ if (err)
+ goto out;
+ }
evsel->hists.stats.total_period += cost;
hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
@@ -159,14 +166,18 @@ static int report__add_branch_hist_entry(struct report *rep, struct addr_locatio
he = __hists__add_entry(&evsel->hists, al, parent, &bi[i], NULL,
1, 1, 0);
if (he) {
- bx = he->branch_info;
- err = addr_map_symbol__inc_samples(&bx->from, evsel->idx);
- if (err)
- goto out;
-
- err = addr_map_symbol__inc_samples(&bx->to, evsel->idx);
- if (err)
- goto out;
+ if (report_needs_annotate()) {
+ bx = he->branch_info;
+ err = addr_map_symbol__inc_samples(&bx->from,
+ evsel->idx);
+ if (err)
+ goto out;
+
+ err = addr_map_symbol__inc_samples(&bx->to,
+ evsel->idx);
+ if (err)
+ goto out;
+ }
evsel->hists.stats.total_period += 1;
hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
@@ -199,7 +210,9 @@ static int report__add_hist_entry(struct report *rep, struct perf_evsel *evsel,
if (err)
goto out;
- err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
+ if (report_needs_annotate())
+ err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
+
evsel->hists.stats.total_period += sample->period;
hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
out:
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 469eb679fb9d..6fcada625c86 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -489,7 +489,7 @@ static int symbol__inc_addr_samples(struct symbol *sym, struct map *map,
{
struct annotation *notes;
- if (sym == NULL || use_browser != 1 || !sort__has_sym)
+ if (sym == NULL)
return 0;
notes = symbol__annotation(sym);
next prev parent reply other threads:[~2014-02-13 8:19 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-20 19:08 [GIT PULL 00/35] perf/core improvements and fixes Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 01/35] perf sort: Compare addresses if no symbol info Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 02/35] perf sort: Do not compare dso again Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 03/35] perf hists: Do not pass period and weight to add_hist_entry() Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 04/35] tools lib traceevent: Introduce pevent_filter_strerror() Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 05/35] perf annotate: Auto allocate symbol per addr hist buckets Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 06/35] perf hists: Leave symbol addr hist bucket auto alloc to symbol layer Arnaldo Carvalho de Melo
2014-02-12 7:23 ` Anton Blanchard
2014-02-12 14:18 ` Arnaldo Carvalho de Melo
2014-02-12 14:50 ` Anton Blanchard
2014-02-12 17:09 ` Anton Blanchard
2014-02-13 8:19 ` Namhyung Kim [this message]
2013-12-20 19:08 ` [PATCH 07/35] perf annotate: Add inc_samples method to addr_map_symbol Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 08/35] perf top: Use hist_entry__inc_addr_sample Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 09/35] perf annotate: Adopt methods from hists Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 10/35] perf annotate: Make symbol__inc_addr_samples private Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 11/35] perf report: Introduce helpers for processing callchains Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 12/35] perf tools: Get rid of a duplicate va_end() in error reporting routine Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 13/35] perf inject: Handle output file via perf_data_file object Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 14/35] perf record: Use perf_data_file__write for output file Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 15/35] perf record: Simplify perf_record__write Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 16/35] perf record: Rename 'perf_record' to plain 'record' Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 17/35] perf tools: Rename 'perf_record_opts' to 'record_opts Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 18/35] perf tests: Factor make install tests Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 19/35] perf tools: Making QUIET_(CLEAN|INSTAL) variables global Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 20/35] tools lib traceevent: Remove print_app_build variable Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 21/35] tools lib traceevent: Use global QUIET_CC build output Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 22/35] tools lib traceevent: Add global QUIET_CC_FPIC " Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 23/35] tools lib traceevent: Use global QUIET_LINK " Arnaldo Carvalho de Melo
2013-12-20 19:08 ` [PATCH 24/35] tools lib traceevent: Use global QUIET_INSTALL " Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 25/35] tools lib traceevent: Use global QUIET_CLEAN " Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 26/35] tools lib traceevent: Use global 'O' processing code Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 27/35] perf report: Rename 'perf_report' to 'report' Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 28/35] perf ui browser: Remove misplaced __maybe_unused Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 29/35] perf scripting python: Shorten function signatures Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 30/35] perf scripting perl: " Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 31/35] perf mem: Remove unused parameter from dump_raw_samples() Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 32/35] perf symbols: Add 'machine' member to struct addr_location Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 33/35] perf report: Use pr_*() functions where applicable Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 34/35] perf report: Print session information only if --stdio is given Arnaldo Carvalho de Melo
2013-12-20 19:09 ` [PATCH 35/35] perf stat: Do not show stats if workload fails Arnaldo Carvalho de Melo
2013-12-27 20:05 ` [GIT PULL 00/35] perf/core improvements and fixes Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87fvnnzaop.fsf@sejong.aot.lge.com \
--to=namhyung@kernel.org \
--cc=acme@infradead.org \
--cc=adrian.hunter@intel.com \
--cc=anton@samba.org \
--cc=dsahern@gmail.com \
--cc=efault@gmx.de \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=michaele@au1.ibm.com \
--cc=mingo@kernel.org \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.