Commit cb627505 authored by David Ahern's avatar David Ahern Committed by Arnaldo Carvalho de Melo

perf sched: Remove sched_process_fork tracepoint

The PERF_RECORD_FORK event is already collected as part of the use of
cmd_record and those events are analyzed as part of the libperf
machinery.  Using the fork tracepoint as well just duplicates the event
load.
Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1375930261-77273-6-git-send-email-dsahern@gmail.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 4a957e4d
...@@ -109,8 +109,9 @@ struct trace_sched_handler { ...@@ -109,8 +109,9 @@ struct trace_sched_handler {
int (*wakeup_event)(struct perf_sched *sched, struct perf_evsel *evsel, int (*wakeup_event)(struct perf_sched *sched, struct perf_evsel *evsel,
struct perf_sample *sample, struct machine *machine); struct perf_sample *sample, struct machine *machine);
int (*fork_event)(struct perf_sched *sched, struct perf_evsel *evsel, /* PERF_RECORD_FORK event, not sched_process_fork tracepoint */
struct perf_sample *sample); int (*fork_event)(struct perf_sched *sched, union perf_event *event,
struct machine *machine);
int (*migrate_task_event)(struct perf_sched *sched, int (*migrate_task_event)(struct perf_sched *sched,
struct perf_evsel *evsel, struct perf_evsel *evsel,
...@@ -717,22 +718,29 @@ static int replay_switch_event(struct perf_sched *sched, ...@@ -717,22 +718,29 @@ static int replay_switch_event(struct perf_sched *sched,
return 0; return 0;
} }
static int replay_fork_event(struct perf_sched *sched, struct perf_evsel *evsel, static int replay_fork_event(struct perf_sched *sched,
struct perf_sample *sample) union perf_event *event,
struct machine *machine)
{ {
const char *parent_comm = perf_evsel__strval(evsel, sample, "parent_comm"), struct thread *child, *parent;
*child_comm = perf_evsel__strval(evsel, sample, "child_comm");
const u32 parent_pid = perf_evsel__intval(evsel, sample, "parent_pid"), child = machine__findnew_thread(machine, event->fork.tid);
child_pid = perf_evsel__intval(evsel, sample, "child_pid"); parent = machine__findnew_thread(machine, event->fork.ptid);
if (child == NULL || parent == NULL) {
pr_debug("thread does not exist on fork event: child %p, parent %p\n",
child, parent);
return 0;
}
if (verbose) { if (verbose) {
printf("sched_fork event %p\n", evsel); printf("fork event\n");
printf("... parent: %s/%d\n", parent_comm, parent_pid); printf("... parent: %s/%d\n", parent->comm, parent->tid);
printf("... child: %s/%d\n", child_comm, child_pid); printf("... child: %s/%d\n", child->comm, child->tid);
} }
register_pid(sched, parent_pid, parent_comm); register_pid(sched, parent->tid, parent->comm);
register_pid(sched, child_pid, child_comm); register_pid(sched, child->tid, child->comm);
return 0; return 0;
} }
...@@ -824,14 +832,6 @@ static int thread_atoms_insert(struct perf_sched *sched, struct thread *thread) ...@@ -824,14 +832,6 @@ static int thread_atoms_insert(struct perf_sched *sched, struct thread *thread)
return 0; return 0;
} }
static int latency_fork_event(struct perf_sched *sched __maybe_unused,
struct perf_evsel *evsel __maybe_unused,
struct perf_sample *sample __maybe_unused)
{
/* should insert the newcomer */
return 0;
}
static char sched_out_state(u64 prev_state) static char sched_out_state(u64 prev_state)
{ {
const char *str = TASK_STATE_TO_CHAR_STR; const char *str = TASK_STATE_TO_CHAR_STR;
...@@ -1379,15 +1379,19 @@ static int process_sched_runtime_event(struct perf_tool *tool, ...@@ -1379,15 +1379,19 @@ static int process_sched_runtime_event(struct perf_tool *tool,
return 0; return 0;
} }
static int process_sched_fork_event(struct perf_tool *tool, static int perf_sched__process_fork_event(struct perf_tool *tool,
struct perf_evsel *evsel, union perf_event *event,
struct perf_sample *sample, struct perf_sample *sample,
struct machine *machine __maybe_unused) struct machine *machine)
{ {
struct perf_sched *sched = container_of(tool, struct perf_sched, tool); struct perf_sched *sched = container_of(tool, struct perf_sched, tool);
/* run the fork event through the perf machineruy */
perf_event__process_fork(tool, event, sample, machine);
/* and then run additional processing needed for this command */
if (sched->tp_handler->fork_event) if (sched->tp_handler->fork_event)
return sched->tp_handler->fork_event(sched, evsel, sample); return sched->tp_handler->fork_event(sched, event, machine);
return 0; return 0;
} }
...@@ -1437,7 +1441,6 @@ static int perf_sched__read_events(struct perf_sched *sched, ...@@ -1437,7 +1441,6 @@ static int perf_sched__read_events(struct perf_sched *sched,
{ "sched:sched_stat_runtime", process_sched_runtime_event, }, { "sched:sched_stat_runtime", process_sched_runtime_event, },
{ "sched:sched_wakeup", process_sched_wakeup_event, }, { "sched:sched_wakeup", process_sched_wakeup_event, },
{ "sched:sched_wakeup_new", process_sched_wakeup_event, }, { "sched:sched_wakeup_new", process_sched_wakeup_event, },
{ "sched:sched_process_fork", process_sched_fork_event, },
{ "sched:sched_migrate_task", process_sched_migrate_task_event, }, { "sched:sched_migrate_task", process_sched_migrate_task_event, },
}; };
struct perf_session *session; struct perf_session *session;
...@@ -1652,7 +1655,7 @@ static struct perf_sched sched = { ...@@ -1652,7 +1655,7 @@ static struct perf_sched sched = {
.sample = perf_sched__process_tracepoint_sample, .sample = perf_sched__process_tracepoint_sample,
.comm = perf_event__process_comm, .comm = perf_event__process_comm,
.lost = perf_event__process_lost, .lost = perf_event__process_lost,
.fork = perf_event__process_fork, .fork = perf_sched__process_fork_event,
.ordered_samples = true, .ordered_samples = true,
}, },
.cmp_pid = LIST_HEAD_INIT(sched.cmp_pid), .cmp_pid = LIST_HEAD_INIT(sched.cmp_pid),
...@@ -1714,7 +1717,6 @@ int cmd_sched(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -1714,7 +1717,6 @@ int cmd_sched(int argc, const char **argv, const char *prefix __maybe_unused)
.wakeup_event = latency_wakeup_event, .wakeup_event = latency_wakeup_event,
.switch_event = latency_switch_event, .switch_event = latency_switch_event,
.runtime_event = latency_runtime_event, .runtime_event = latency_runtime_event,
.fork_event = latency_fork_event,
.migrate_task_event = latency_migrate_task_event, .migrate_task_event = latency_migrate_task_event,
}; };
struct trace_sched_handler map_ops = { struct trace_sched_handler map_ops = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment