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 19/19] perf sched timehist: Add pid/tid option
Date: Wed, 7 Aug 2013 22:51:01 -0400 [thread overview]
Message-ID: <1375930261-77273-20-git-send-email-dsahern@gmail.com> (raw)
In-Reply-To: <1375930261-77273-1-git-send-email-dsahern@gmail.com>
Allows analysis of individual tasks within a file collected for the
entire system.
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 | 50 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
index 1be9081..8e6ceee 100644
--- a/tools/perf/builtin-sched.c
+++ b/tools/perf/builtin-sched.c
@@ -17,6 +17,7 @@
#include "util/debug.h"
#include "util/strlist.h"
+#include "util/intlist.h"
#include "asm/bug.h"
#include <sys/prctl.h>
#include <sys/resource.h>
@@ -178,6 +179,9 @@ struct perf_sched {
unsigned int max_stack_depth;
bool show_cpu_visual;
bool skip_cs;
+ /* process and task id's of interest */
+ struct perf_target target;
+ struct intlist *pid, *tid;
};
/* per thread run time data */
@@ -1897,6 +1901,18 @@ static struct thread *timehist_get_thread(struct perf_evsel *evsel,
return thread;
}
+static bool timehist_skip_sample(struct perf_sched *sched,
+ struct perf_sample *sample)
+{
+ if (sched->pid && intlist__find(sched->pid, sample->pid) == NULL)
+ return true;
+
+ if (sched->tid && intlist__find(sched->tid, sample->tid) == NULL)
+ return true;
+
+ return false;
+}
+
static void timehist_print_sched_event(struct perf_tool *tool,
struct perf_evsel *evsel,
struct perf_sample *sample,
@@ -1908,6 +1924,9 @@ static void timehist_print_sched_event(struct perf_tool *tool,
const char *evname;
char tstr[64];
+ if (timehist_skip_sample(sched, sample))
+ return;
+
thread = machine__findnew_thread(machine, sample->tid);
if (thread == NULL)
return;
@@ -1969,6 +1988,9 @@ static int timehist_sched_change_event(struct perf_tool *tool,
}
}
+ if (timehist_skip_sample(sched, sample))
+ goto out;
+
tprev = perf_evsel__get_time(evsel, sample->cpu);
if (tprev)
dt_run = sample->time - tprev;
@@ -2167,6 +2189,27 @@ static int setup_excl_sym(void)
return 0;
}
+static int parse_target_str(struct perf_sched *sched)
+{
+ if (sched->target.pid) {
+ sched->pid = intlist__new(sched->target.pid);
+ if (sched->pid == NULL) {
+ pr_err("Error parsing process id string\n");
+ return -EINVAL;
+ }
+ }
+
+ if (sched->target.tid) {
+ sched->tid = intlist__new(sched->target.tid);
+ if (sched->tid == NULL) {
+ pr_err("Error parsing thread id string\n");
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
static int perf_sched__timehist(struct perf_sched *sched)
{
const struct perf_evsel_str_handler handlers[] = {
@@ -2205,6 +2248,9 @@ static int perf_sched__timehist(struct perf_sched *sched)
if (session == NULL)
return -ENOMEM;
+ if (parse_target_str(sched) != 0)
+ goto out;
+
setup_pager();
if (timehist_check_attr(sched, session->evlist) != 0)
@@ -2484,6 +2530,10 @@ int cmd_sched(int argc, const char **argv, const char *prefix __maybe_unused)
"file", "kallsyms pathname"),
OPT_STRING('c', "comms", &symbol_conf.comm_list_str, "comm[,comm...]",
"only display events for these comms"),
+ OPT_STRING('p', "pid", &sched.target.pid, "pid",
+ "analyze events only for given process id(s)"),
+ OPT_STRING('t', "tid", &sched.target.tid, "tid",
+ "analyze events only for given thread id(s)"),
OPT_UINTEGER('s', "stack-depth", &sched.max_stack_depth,
"Maximum number of functions to display backtrace."),
OPT_STRING('x', "excl", &symbol_conf.excl_sym_list_str, "sym[,sym...]",
--
1.7.10.1
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 ` [PATCH 17/19] perf sched timehist: Add support for context-switch event David Ahern
2013-08-08 2:51 ` [PATCH 18/19] perf sched timehist: Print all events in verbose mode David Ahern
2013-08-08 2:51 ` David Ahern [this message]
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-20-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