Commit b9fb9304 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

perf hist: Only allocate callchain_node if processing callchains



The struct callchain_node size is 120 bytes, that are never used when
there are no callchains or '-g none' is specified, so conditionally
allocate it, reducing sizeof(struct hist_entry) from 210 bytes to only
96, greatly speeding the non-callchain processing.

LKML-Reference: <new-submission>
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>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 71cf8b8f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -110,8 +110,8 @@ static int perf_session__add_hist_entry(struct perf_session *self,

	if (symbol_conf.use_callchain) {
		if (!hit)
			callchain_init(&he->callchain);
		err = append_chain(&he->callchain, data->callchain, syms);
			callchain_init(he->callchain);
		err = append_chain(he->callchain, data->callchain, syms);
		free(syms);

		if (err)
+3 −2
Original line number Diff line number Diff line
@@ -50,7 +50,8 @@ struct hist_entry *__perf_session__add_hist_entry(struct rb_root *hists,
			p = &(*p)->rb_right;
	}

	he = malloc(sizeof(*he));
	he = malloc(sizeof(*he) + (symbol_conf.use_callchain ?
				    sizeof(struct callchain_node) : 0));
	if (!he)
		return NULL;
	*he = entry;
@@ -168,7 +169,7 @@ static void perf_session__insert_output_hist_entry(struct rb_root *root,
	struct hist_entry *iter;

	if (symbol_conf.use_callchain)
		callchain_param.sort(&he->sorted_chain, &he->callchain,
		callchain_param.sort(&he->sorted_chain, he->callchain,
				      min_callchain_hits, &callchain_param);

	while (*p != NULL) {
+1 −1
Original line number Diff line number Diff line
@@ -49,12 +49,12 @@ struct hist_entry {
	u64			ip;
	char			level;
	struct symbol	  *parent;
	struct callchain_node	callchain;
	union {
		unsigned long	  position;
		struct hist_entry *pair;
		struct rb_root	  sorted_chain;
	};
	struct callchain_node	callchain[0];
};

enum sort_type {