linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Liang, Kan" <kan.liang@intel.com>
To: Jiri Olsa <jolsa@redhat.com>
Cc: "acme@kernel.org" <acme@kernel.org>,
	"a.p.zijlstra@chello.nl" <a.p.zijlstra@chello.nl>,
	"eranian@google.com" <eranian@google.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"mingo@redhat.com" <mingo@redhat.com>,
	"paulus@samba.org" <paulus@samba.org>,
	"ak@linux.intel.com" <ak@linux.intel.com>
Subject: RE: [PATCH V3 3/3] perf tools: Construct LBR call chain
Date: Mon, 17 Nov 2014 17:41:32 +0000	[thread overview]
Message-ID: <37D7C6CF3E00A74B8858931C1DB2F07701670BF9@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <20141117155425.GA31042@krava.brq.redhat.com>



> SNIP
> 
> > diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
> > index f4478ce..335c3a9 100644
> > --- a/tools/perf/util/session.c
> > +++ b/tools/perf/util/session.c
> > @@ -557,15 +557,63 @@ int perf_session_queue_event(struct
> perf_session *s, union perf_event *event,
> >  	return 0;
> >  }
> >
> > -static void callchain__printf(struct perf_sample *sample)
> > +static void callchain__printf(struct perf_evsel *evsel,
> > +			      struct perf_sample *sample)
> >  {
> >  	unsigned int i;
> > +	struct ip_callchain *callchain = sample->callchain;
> > +	bool lbr = has_branch_callstack(evsel);
> >
> > -	printf("... chain: nr:%" PRIu64 "\n", sample->callchain->nr);
> > +	if (lbr) {
> > +		struct branch_stack *lbr_stack = sample->branch_stack;
> > +		u64 kernel_callchain_nr = callchain->nr;
> >
> > -	for (i = 0; i < sample->callchain->nr; i++)
> > +		for (i = 0; i < kernel_callchain_nr; i++) {
> > +			if (callchain->ips[i] == PERF_CONTEXT_USER)
> > +				break;
> > +		}
> > +
> > +		if ((i != kernel_callchain_nr) && lbr_stack->nr) {
> > +			u64 total_nr;
> > +			/*
> > +			 * LBR callstack can only get user call chain,
> > +			 * i is kernel call chain number,
> > +			 * 1 is PERF_CONTEXT_USER.
> > +			 *
> > +			 * The user call chain is stored in LBR registers.
> > +			 * LBR are pair registers. The caller is stored
> > +			 * in "from" register, while the callee is stored
> > +			 * in "to" register.
> > +			 * For example, there is a call stack
> > +			 * "A"->"B"->"C"->"D".
> > +			 * The LBR registers will recorde like
> > +			 * "C"->"D", "B"->"C", "A"->"B".
> > +			 * So only the first "to" register and all "from"
> > +			 * registers are needed to construct the whole
> stack.
> > +			 */
> 
> Andi is using some sanity checks:
> http://marc.info/?l=linux-kernel&m=141584447819894&w=2
> I guess this could be applied in here, once his patch gets in.
> 

Are you suggesting me to remove the comments,
or rebase the whole patch to Andi's patch once it's merged?

The branch history in Andi's patch is different as the call stack,
although they are both from LBR.
Andi's branch history recording branch records for
taken branches, interrupts, and exceptions.
While the LBR call stack records for the call stack.

Thanks,
Kan


  reply	other threads:[~2014-11-17 17:41 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-14 13:44 [PATCH V3 0/3] perf tool: Haswell LBR call stack support (user) kan.liang
2014-11-14 13:44 ` [PATCH V3 1/3] perf tools: enable LBR call stack support kan.liang
2014-11-18  5:54   ` Namhyung Kim
2014-11-18 13:57     ` Liang, Kan
2014-11-14 13:44 ` [PATCH V3 2/3] perf tool: Move cpumode resolve code to add_callchain_ip kan.liang
2014-11-17 13:57   ` Jiri Olsa
2014-11-17 14:00   ` Jiri Olsa
2014-11-18  8:24   ` Jiri Olsa
2014-11-21 15:06     ` Liang, Kan
2014-11-21 15:19       ` Arnaldo Carvalho de Melo
2014-11-14 13:44 ` [PATCH V3 3/3] perf tools: Construct LBR call chain kan.liang
2014-11-17 15:54   ` Jiri Olsa
2014-11-17 17:41     ` Liang, Kan [this message]
2014-11-18  6:13       ` Namhyung Kim
2014-11-18  7:55         ` Jiri Olsa
2014-11-18 14:37           ` Liang, Kan
2014-11-18 19:40             ` Liang, Kan
2014-11-19  5:57               ` Namhyung Kim
2014-11-17 15:55   ` Jiri Olsa
2014-11-18  6:14     ` Namhyung Kim
2014-11-18  6:25   ` Namhyung Kim
2014-11-18 14:01     ` Liang, Kan
2014-11-19  6:01       ` Namhyung Kim
2014-11-19 13:37         ` Liang, Kan
2014-11-17 16:01 ` [PATCH V3 0/3] perf tool: Haswell LBR call stack support (user) Jiri Olsa

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=37D7C6CF3E00A74B8858931C1DB2F07701670BF9@SHSMSX103.ccr.corp.intel.com \
    --to=kan.liang@intel.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=eranian@google.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=paulus@samba.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).