From: David Ahern <dsahern@gmail.com>
To: acme@ghostprotocols.net, linux-kernel@vger.kernel.org, mingo@kernel.org
Cc: David Ahern <dsahern@gmail.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Jiri Olsa <jolsa@redhat.com>, Mike Galbraith <efault@gmx.de>,
Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Stephane Eranian <eranian@google.com>
Subject: [PATCH 17/19] perf sched timehist: Add support for context-switch event
Date: Wed, 7 Aug 2013 22:50:59 -0400 [thread overview]
Message-ID: <1375930261-77273-18-git-send-email-dsahern@gmail.com> (raw)
In-Reply-To: <1375930261-77273-1-git-send-email-dsahern@gmail.com>
Context switch events are 64 bytes; sched_switch events are 136 bytes.
Both indicate scheduling changes, so allow user to leverage the smaller
event. If both events exist in a data file, then context-switch event is
ignored.
Signed-off-by: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
---
tools/perf/builtin-sched.c | 67 +++++++++++++++++++++++++++++++++++---------
1 file changed, 54 insertions(+), 13 deletions(-)
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
index a45a40f..f5e98f1 100644
--- a/tools/perf/builtin-sched.c
+++ b/tools/perf/builtin-sched.c
@@ -177,6 +177,7 @@ struct perf_sched {
bool no_callchain;
unsigned int max_stack_depth;
bool show_cpu_visual;
+ bool skip_cs;
};
/* per thread run time data */
@@ -1674,8 +1675,17 @@ static int timehist_check_attr(struct perf_sched *sched,
{
struct perf_evsel *evsel;
struct evsel_runtime *er;
+ const char *evname;
+ bool have_cs_event = false, have_sched_event = false;
list_for_each_entry(evsel, &evlist->entries, node) {
+ evname = perf_evsel__name(evsel);
+ if (strcmp(evname, "cs") == 0 ||
+ strcmp(evname, "context-switch") == 0)
+ have_cs_event = true;
+ else if (strcmp(evname, "sched:sched_switch") == 0)
+ have_sched_event = true;
+
er = perf_evsel__get_runtime(evsel);
if (er == NULL) {
pr_err("Failed to allocate memory for evsel runtime data\n");
@@ -1689,6 +1699,11 @@ static int timehist_check_attr(struct perf_sched *sched,
}
}
+ if (have_cs_event && have_sched_event) {
+ pr_debug("Both schedule change events exist. Ignoring context-switch event\n");
+ sched->skip_cs = true;
+ }
+
return 0;
}
@@ -1926,6 +1941,30 @@ out:
return rc;
}
+static int timehist_cs_event(struct perf_tool *tool __maybe_unused,
+ struct perf_evsel *evsel,
+ struct perf_sample *sample,
+ struct machine *machine __maybe_unused)
+{
+ return timehist_sched_change_event(tool, evsel, sample, machine);
+}
+
+static void timehist_set_cs_handler(struct perf_evlist *evlist)
+{
+ struct perf_evsel *evsel;
+ const char *evname;
+
+ list_for_each_entry(evsel, &evlist->entries, node) {
+ evname = perf_evsel__name(evsel);
+ if (strcmp(evname, "cs") == 0 ||
+ strcmp(evname, "context-switch") == 0) {
+ evsel->handler.func = timehist_cs_event;
+ }
+ }
+
+ return;
+}
+
static int timehist_sched_switch_event(struct perf_tool *tool,
struct perf_evsel *evsel,
struct perf_sample *sample,
@@ -2132,24 +2171,26 @@ static int perf_sched__timehist(struct perf_sched *sched)
}
/* setup per-evsel handlers */
- if (perf_session__set_tracepoints_handlers(session, handlers))
- goto out;
+ if (!sched->skip_cs)
+ timehist_set_cs_handler(session->evlist);
- if (perf_session__has_traces(session, "record -R")) {
- if (sched->show_events)
- timehist_header(sched);
+ if (perf_session__has_traces(session, "sched record") &&
+ perf_session__set_tracepoints_handlers(session, handlers))
+ goto out;
- err = perf_session__process_events(session, &sched->tool);
- if (err) {
- pr_err("Failed to process events, error %d", err);
- goto out;
- }
+ if (sched->show_events)
+ timehist_header(sched);
- sched->nr_events = session->stats.nr_events[0];
- sched->nr_lost_events = session->stats.total_lost;
- sched->nr_lost_chunks = session->stats.nr_events[PERF_RECORD_LOST];
+ err = perf_session__process_events(session, &sched->tool);
+ if (err) {
+ pr_err("Failed to process events, error %d", err);
+ goto out;
}
+ sched->nr_events = session->stats.nr_events[0];
+ sched->nr_lost_events = session->stats.total_lost;
+ sched->nr_lost_chunks = session->stats.nr_events[PERF_RECORD_LOST];
+
timehist_print_summary(session);
out:
--
1.7.10.1
next prev parent reply other threads:[~2013-08-08 2:52 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-08 2:50 [PATCH 00/19] perf sched: Add timehist subcommand David Ahern
2013-08-08 2:50 ` [PATCH 01/19] perf: sample after exit loses thread correlation - v3 David Ahern
2013-08-08 14:53 ` Arnaldo Carvalho de Melo
2013-08-08 20:42 ` David Ahern
2013-08-08 21:23 ` Arnaldo Carvalho de Melo
2013-08-08 2:50 ` [PATCH 02/19] perf sched: Simplify arguments to read_events David Ahern
2013-08-08 14:54 ` Arnaldo Carvalho de Melo
2013-08-15 7:55 ` [tip:perf/core] " tip-bot for David Ahern
2013-08-08 2:50 ` [PATCH 03/19] perf sched: Remove thread lookup in sample handler David Ahern
2013-08-08 14:56 ` Arnaldo Carvalho de Melo
2013-08-15 7:55 ` [tip:perf/core] " tip-bot for David Ahern
2013-08-08 2:50 ` [PATCH 04/19] perf sched: Remove sched_process_exit tracepoint David Ahern
2013-08-08 14:57 ` Arnaldo Carvalho de Melo
2013-08-15 7:55 ` [tip:perf/core] " tip-bot for David Ahern
2013-08-08 2:50 ` [PATCH 05/19] perf sched: Remove sched_process_fork tracepoint David Ahern
2013-08-08 15:00 ` Arnaldo Carvalho de Melo
2013-08-15 7:55 ` [tip:perf/core] " tip-bot for David Ahern
2013-08-08 2:50 ` [PATCH 06/19] perf symbol: Add optimization for idle kernel symbols David Ahern
2013-08-08 2:50 ` [PATCH 07/19] perf top: Use new idle_sym check David Ahern
2013-08-08 15:06 ` Arnaldo Carvalho de Melo
2013-08-09 2:49 ` David Ahern
2013-08-09 13:53 ` Arnaldo Carvalho de Melo
2013-08-08 2:50 ` [PATCH 08/19] perf symbol: Save vmlinux or kallsyms path loaded David Ahern
2013-08-08 15:08 ` Arnaldo Carvalho de Melo
2013-08-09 2:51 ` David Ahern
2013-08-08 2:50 ` [PATCH 09/19] perf tool: Simplify options to perf_evsel__print_ip David Ahern
2013-08-08 15:14 ` Arnaldo Carvalho de Melo
2013-08-15 7:55 ` [tip:perf/core] " tip-bot for David Ahern
2013-08-08 2:50 ` [PATCH 10/19] perf tool: Add option to print stack trace on single line David Ahern
2013-08-15 7:55 ` [tip:perf/core] perf evsel: " tip-bot for David Ahern
2013-08-08 2:50 ` [PATCH 11/19] perf tool: Add option to limit stack depth in callchain dumps David Ahern
2013-08-15 7:56 ` [tip:perf/core] perf evsel: " tip-bot for David Ahern
2013-08-08 2:50 ` [PATCH 12/19] perf tool: Add support for exclude symbol list to symbol_conf David Ahern
2013-08-08 2:50 ` [PATCH 13/19] perf tool: Skip symbols in exclude list while printing callchain David Ahern
2013-08-08 2:50 ` [PATCH 14/19] perf sched: pass event to evsel handlers using data element David Ahern
2013-08-08 2:50 ` [PATCH 15/19] perf sched: Add timehist command David Ahern
2013-08-08 2:50 ` [PATCH 16/19] perf tool: Change perf_session__has_traces to actually check for tracepoints David Ahern
2013-08-08 15:16 ` Arnaldo Carvalho de Melo
2013-08-15 7:56 ` [tip:perf/core] perf session: " tip-bot for David Ahern
2013-08-08 2:50 ` David Ahern [this message]
2013-08-08 2:51 ` [PATCH 18/19] perf sched timehist: Print all events in verbose mode David Ahern
2013-08-08 2:51 ` [PATCH 19/19] perf sched timehist: Add pid/tid option David Ahern
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=1375930261-77273-18-git-send-email-dsahern@gmail.com \
--to=dsahern@gmail.com \
--cc=acme@ghostprotocols.net \
--cc=efault@gmx.de \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.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