perf top: Decay periods in callchains
It missed to decay periods in callchains when decaying hist entries. This resulted in more than 100 percent overhead in callchains in the fractal style output. Reported-by: Arnaldo Carvalho de Melo <acme@kernel.org> Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1451963160-17196-1-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:

committed by
Arnaldo Carvalho de Melo

parent
915b0882c3
commit
42b276a235
@@ -925,6 +925,34 @@ void free_callchain(struct callchain_root *root)
|
||||
free_callchain_node(&root->node);
|
||||
}
|
||||
|
||||
static u64 decay_callchain_node(struct callchain_node *node)
|
||||
{
|
||||
struct callchain_node *child;
|
||||
struct rb_node *n;
|
||||
u64 child_hits = 0;
|
||||
|
||||
n = rb_first(&node->rb_root_in);
|
||||
while (n) {
|
||||
child = container_of(n, struct callchain_node, rb_node_in);
|
||||
|
||||
child_hits += decay_callchain_node(child);
|
||||
n = rb_next(n);
|
||||
}
|
||||
|
||||
node->hit = (node->hit * 7) / 8;
|
||||
node->children_hit = child_hits;
|
||||
|
||||
return node->hit;
|
||||
}
|
||||
|
||||
void decay_callchain(struct callchain_root *root)
|
||||
{
|
||||
if (!symbol_conf.use_callchain)
|
||||
return;
|
||||
|
||||
decay_callchain_node(&root->node);
|
||||
}
|
||||
|
||||
int callchain_node__make_parent_list(struct callchain_node *node)
|
||||
{
|
||||
struct callchain_node *parent = node->parent;
|
||||
|
Reference in New Issue
Block a user