From: tip-bot for Adrian Hunter <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: peterz@infradead.org, tglx@linutronix.de, mingo@kernel.org,
fweisbec@gmail.com, eranian@google.com, acme@redhat.com,
adrian.hunter@intel.com, hpa@zytor.com, paulus@samba.org,
namhyung@gmail.com, jolsa@redhat.com,
linux-kernel@vger.kernel.org, dsahern@gmail.com
Subject: [tip:perf/core] perf tools: Add call information to the database export API
Date: Thu, 6 Nov 2014 21:29:05 -0800 [thread overview]
Message-ID: <tip-88f50d602f500d206f2f5a9a9751dd45f2d97739@git.kernel.org> (raw)
In-Reply-To: <1414678188-14946-6-git-send-email-adrian.hunter@intel.com>
Commit-ID: 88f50d602f500d206f2f5a9a9751dd45f2d97739
Gitweb: http://git.kernel.org/tip/88f50d602f500d206f2f5a9a9751dd45f2d97739
Author: Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Thu, 30 Oct 2014 16:09:46 +0200
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 3 Nov 2014 18:09:33 -0300
perf tools: Add call information to the database export API
Make it possible for the database export API to use the enhanced thread
stack and export detailed information about paired calls and returns.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1414678188-14946-6-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/db-export.c | 52 ++++++++++++++++++++++++++++++++++++++++++++-
tools/perf/util/db-export.h | 12 +++++++++++
2 files changed, 63 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/db-export.c b/tools/perf/util/db-export.c
index bccb831..017ecbb 100644
--- a/tools/perf/util/db-export.c
+++ b/tools/perf/util/db-export.c
@@ -21,6 +21,7 @@
#include "comm.h"
#include "symbol.h"
#include "event.h"
+#include "thread-stack.h"
#include "db-export.h"
int db_export__init(struct db_export *dbe)
@@ -29,8 +30,10 @@ int db_export__init(struct db_export *dbe)
return 0;
}
-void db_export__exit(struct db_export *dbe __maybe_unused)
+void db_export__exit(struct db_export *dbe)
{
+ call_return_processor__free(dbe->crp);
+ dbe->crp = NULL;
}
int db_export__evsel(struct db_export *dbe, struct perf_evsel *evsel)
@@ -270,6 +273,13 @@ int db_export__sample(struct db_export *dbe, union perf_event *event,
&es.addr_sym_db_id, &es.addr_offset);
if (err)
return err;
+ if (dbe->crp) {
+ err = thread_stack__process(thread, comm, sample, al,
+ &addr_al, es.db_id,
+ dbe->crp);
+ if (err)
+ return err;
+ }
}
if (dbe->export_sample)
@@ -316,3 +326,43 @@ int db_export__branch_types(struct db_export *dbe)
}
return err;
}
+
+int db_export__call_path(struct db_export *dbe, struct call_path *cp)
+{
+ int err;
+
+ if (cp->db_id)
+ return 0;
+
+ if (cp->parent) {
+ err = db_export__call_path(dbe, cp->parent);
+ if (err)
+ return err;
+ }
+
+ cp->db_id = ++dbe->call_path_last_db_id;
+
+ if (dbe->export_call_path)
+ return dbe->export_call_path(dbe, cp);
+
+ return 0;
+}
+
+int db_export__call_return(struct db_export *dbe, struct call_return *cr)
+{
+ int err;
+
+ if (cr->db_id)
+ return 0;
+
+ err = db_export__call_path(dbe, cr->cp);
+ if (err)
+ return err;
+
+ cr->db_id = ++dbe->call_return_last_db_id;
+
+ if (dbe->export_call_return)
+ return dbe->export_call_return(dbe, cr);
+
+ return 0;
+}
diff --git a/tools/perf/util/db-export.h b/tools/perf/util/db-export.h
index e4baa45..dd5ac2a 100644
--- a/tools/perf/util/db-export.h
+++ b/tools/perf/util/db-export.h
@@ -25,6 +25,9 @@ struct comm;
struct dso;
struct perf_sample;
struct addr_location;
+struct call_return_processor;
+struct call_path;
+struct call_return;
struct export_sample {
union perf_event *event;
@@ -57,6 +60,10 @@ struct db_export {
int (*export_branch_type)(struct db_export *dbe, u32 branch_type,
const char *name);
int (*export_sample)(struct db_export *dbe, struct export_sample *es);
+ int (*export_call_path)(struct db_export *dbe, struct call_path *cp);
+ int (*export_call_return)(struct db_export *dbe,
+ struct call_return *cr);
+ struct call_return_processor *crp;
u64 evsel_last_db_id;
u64 machine_last_db_id;
u64 thread_last_db_id;
@@ -65,6 +72,8 @@ struct db_export {
u64 dso_last_db_id;
u64 symbol_last_db_id;
u64 sample_last_db_id;
+ u64 call_path_last_db_id;
+ u64 call_return_last_db_id;
};
int db_export__init(struct db_export *dbe);
@@ -89,4 +98,7 @@ int db_export__sample(struct db_export *dbe, union perf_event *event,
int db_export__branch_types(struct db_export *dbe);
+int db_export__call_path(struct db_export *dbe, struct call_path *cp);
+int db_export__call_return(struct db_export *dbe, struct call_return *cr);
+
#endif
next prev parent reply other threads:[~2014-11-07 5:30 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-30 14:09 [PATCH 0/7] perf tools: Add a thread stack for synthesizing call chains Adrian Hunter
2014-10-30 14:09 ` [PATCH 1/7] " Adrian Hunter
2014-11-03 13:08 ` Jiri Olsa
2014-11-07 5:28 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-10-30 14:09 ` [PATCH 2/7] perf tools: Add branch type to db export Adrian Hunter
2014-11-07 5:28 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-10-30 14:09 ` [PATCH 3/7] perf tools: Add branch_type and in_tx to Python export Adrian Hunter
2014-11-07 5:28 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-10-30 14:09 ` [PATCH 4/7] perf tools: Enhance the thread stack to output call/return data Adrian Hunter
2014-11-03 13:11 ` Jiri Olsa
2014-11-07 5:28 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-10-30 14:09 ` [PATCH 5/7] perf tools: Add call information to the database export API Adrian Hunter
2014-11-07 5:29 ` tip-bot for Adrian Hunter [this message]
2014-10-30 14:09 ` [PATCH 6/7] perf tools: Add call information to Python export Adrian Hunter
2014-11-07 5:29 ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-10-30 14:09 ` [PATCH 7/7] perf tools: Defer export of comms that were not 'set' Adrian Hunter
2014-11-07 5:29 ` [tip:perf/core] perf tools: Defer export of comms that were not ' set' tip-bot for Adrian Hunter
2014-11-03 21:13 ` [PATCH 0/7] perf tools: Add a thread stack for synthesizing call chains 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=tip-88f50d602f500d206f2f5a9a9751dd45f2d97739@git.kernel.org \
--to=tipbot@zytor.com \
--cc=acme@redhat.com \
--cc=adrian.hunter@intel.com \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=hpa@zytor.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@gmail.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
/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