Skip to content

Commit

Permalink
perf hist: Don't fprintf the callgraph unconditionally
Browse files Browse the repository at this point in the history
[root@doppio ~]# perf report -i newt.data | head -10
  # Samples: 11999679868
  #
  # Overhead  Command                  Shared Object  Symbol
  # ........  .......  .............................  ......
  #
      63.61%     perf  libslang.so.2.1.4              [.] SLsmg_write_chars
       6.30%     perf  perf                           [.] symbols__find
       2.19%     perf  libnewt.so.0.52.10             [.] newtListboxAppendEntry
       2.08%     perf  libslang.so.2.1.4              [.] SLsmg_write_chars@plt
       1.99%     perf  libc-2.10.2.so                 [.] _IO_vfprintf_internal
  [root@doppio ~]#

Not good, the newt form for report works, but slang has to eat
the cost of the additional callgraph lines everytime it prints a
line, and the callgraph doesn't appear on the screen, so move
the callgraph printing to a separate function and don't use it
in newt.c.

Newt tree widgets are being investigated to properly support
callgraphs, but till that gets merged, lets remove this huge
overhead and show at least the symbol overheads for a callgraph
rich perf.data with good performance.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
LKML-Reference: <1268408808-13595-2-git-send-email-acme@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Arnaldo Carvalho de Melo authored and Ingo Molnar committed Mar 12, 2010
1 parent cb7afb7 commit 3997d37
Showing 1 changed file with 17 additions and 13 deletions.
30 changes: 17 additions & 13 deletions tools/perf/util/hist.c
Original file line number Diff line number Diff line change
Expand Up @@ -532,23 +532,23 @@ size_t hist_entry__fprintf(struct hist_entry *self,
ret += se->print(fp, self, se->width ? *se->width : 0);
}

ret += fprintf(fp, "\n");

if (symbol_conf.use_callchain) {
int left_margin = 0;
return ret + fprintf(fp, "\n");
}

if (sort__first_dimension == SORT_COMM) {
se = list_first_entry(&hist_entry__sort_list, typeof(*se),
list);
left_margin = se->width ? *se->width : 0;
left_margin -= thread__comm_len(self->thread);
}
static size_t hist_entry__fprintf_callchain(struct hist_entry *self, FILE *fp,
u64 session_total)
{
int left_margin = 0;

ret += hist_entry_callchain__fprintf(fp, self, session_total,
left_margin);
if (sort__first_dimension == SORT_COMM) {
struct sort_entry *se = list_first_entry(&hist_entry__sort_list,
typeof(*se), list);
left_margin = se->width ? *se->width : 0;
left_margin -= thread__comm_len(self->thread);
}

return ret;
return hist_entry_callchain__fprintf(fp, self, session_total,
left_margin);
}

size_t perf_session__fprintf_hists(struct rb_root *hists,
Expand Down Expand Up @@ -655,6 +655,10 @@ size_t perf_session__fprintf_hists(struct rb_root *hists,
}
ret += hist_entry__fprintf(h, pair, show_displacement,
displacement, fp, session_total);

if (symbol_conf.use_callchain)
ret += hist_entry__fprintf_callchain(h, fp, session_total);

if (h->map == NULL && verbose > 1) {
__map_groups__fprintf_maps(&h->thread->mg,
MAP__FUNCTION, fp);
Expand Down

0 comments on commit 3997d37

Please sign in to comment.