Re: [tip:perf/core] perf script: Print comm, fork and exit events also
On Sat, Nov 30, 2013 at 04:53:07AM -0800, tip-bot for Namhyung Kim wrote: > Commit-ID: ad7ebb9a48f59bad2714b64725653a73d78b686e > Gitweb: http://git.kernel.org/tip/ad7ebb9a48f59bad2714b64725653a73d78b686e > Author: Namhyung Kim > AuthorDate: Tue, 26 Nov 2013 17:51:12 +0900 > Committer: Arnaldo Carvalho de Melo > CommitDate: Wed, 27 Nov 2013 14:58:38 -0300 > > perf script: Print comm, fork and exit events also > > If --show-task-events option is given, also print internal COMM, FORK > and EXIT events. It would be helpful for debugging. > > $ perf script --show-task-events > ... > swapper 0 [009] 3350640.335261: sched:sched_switch: > prev_comm=swapper/9 >sleep 9486 [009] 3350640.335509: PERF_RECORD_COMM: sleep:9486 >sleep 9486 [009] 3350640.335806: sched:sched_stat_runtime: > comm=sleep pid=9486 > firefox 2635 [003] 3350641.275896: > PERF_RECORD_FORK(2635:9487):(2635:2635) > firefox 2635 [003] 3350641.275896: sched:sched_process_fork: > comm=firefox pid=2635 >sleep 9486 [009] 3350641.336009: > PERF_RECORD_EXIT(9486:9486):(9486:9486) > > Signed-off-by: Namhyung Kim > Suggested-by: Frederic Weisbecker Thanks a lot for doing this Namhyung! -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [tip:perf/core] perf script: Print comm, fork and exit events also
On Sat, Nov 30, 2013 at 04:53:07AM -0800, tip-bot for Namhyung Kim wrote: Commit-ID: ad7ebb9a48f59bad2714b64725653a73d78b686e Gitweb: http://git.kernel.org/tip/ad7ebb9a48f59bad2714b64725653a73d78b686e Author: Namhyung Kim namhy...@kernel.org AuthorDate: Tue, 26 Nov 2013 17:51:12 +0900 Committer: Arnaldo Carvalho de Melo a...@redhat.com CommitDate: Wed, 27 Nov 2013 14:58:38 -0300 perf script: Print comm, fork and exit events also If --show-task-events option is given, also print internal COMM, FORK and EXIT events. It would be helpful for debugging. $ perf script --show-task-events ... swapper 0 [009] 3350640.335261: sched:sched_switch: prev_comm=swapper/9 sleep 9486 [009] 3350640.335509: PERF_RECORD_COMM: sleep:9486 sleep 9486 [009] 3350640.335806: sched:sched_stat_runtime: comm=sleep pid=9486 firefox 2635 [003] 3350641.275896: PERF_RECORD_FORK(2635:9487):(2635:2635) firefox 2635 [003] 3350641.275896: sched:sched_process_fork: comm=firefox pid=2635 sleep 9486 [009] 3350641.336009: PERF_RECORD_EXIT(9486:9486):(9486:9486) Signed-off-by: Namhyung Kim namhy...@kernel.org Suggested-by: Frederic Weisbecker fweis...@gmail.com Thanks a lot for doing this Namhyung! -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[tip:perf/core] perf script: Print comm, fork and exit events also
Commit-ID: ad7ebb9a48f59bad2714b64725653a73d78b686e Gitweb: http://git.kernel.org/tip/ad7ebb9a48f59bad2714b64725653a73d78b686e Author: Namhyung Kim AuthorDate: Tue, 26 Nov 2013 17:51:12 +0900 Committer: Arnaldo Carvalho de Melo CommitDate: Wed, 27 Nov 2013 14:58:38 -0300 perf script: Print comm, fork and exit events also If --show-task-events option is given, also print internal COMM, FORK and EXIT events. It would be helpful for debugging. $ perf script --show-task-events ... swapper 0 [009] 3350640.335261: sched:sched_switch: prev_comm=swapper/9 sleep 9486 [009] 3350640.335509: PERF_RECORD_COMM: sleep:9486 sleep 9486 [009] 3350640.335806: sched:sched_stat_runtime: comm=sleep pid=9486 firefox 2635 [003] 3350641.275896: PERF_RECORD_FORK(2635:9487):(2635:2635) firefox 2635 [003] 3350641.275896: sched:sched_process_fork: comm=firefox pid=2635 sleep 9486 [009] 3350641.336009: PERF_RECORD_EXIT(9486:9486):(9486:9486) Signed-off-by: Namhyung Kim Suggested-by: Frederic Weisbecker Reviewed-by: David Ahern Cc: Ingo Molnar Cc: Namhyung Kim Cc: Paul Mackerras Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/1385455873-25865-1-git-send-email-namhy...@kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/Documentation/perf-script.txt | 3 + tools/perf/builtin-script.c | 105 +++ 2 files changed, 108 insertions(+) diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt index e9cbfcd..67af9b7 100644 --- a/tools/perf/Documentation/perf-script.txt +++ b/tools/perf/Documentation/perf-script.txt @@ -203,6 +203,9 @@ OPTIONS --show-kernel-path:: Try to resolve the path of [kernel.kallsyms] +--show-task-events + Display task related events (e.g. FORK, COMM, EXIT). + SEE ALSO linkperf:perf-record[1], linkperf:perf-script-perl[1], diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 9f3ba44..e2b9aff 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -572,6 +572,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused, struct perf_script { struct perf_tooltool; struct perf_session *session; + boolshow_task_events; }; static int process_attr(struct perf_tool *tool, union perf_event *event, @@ -602,6 +603,101 @@ static int process_attr(struct perf_tool *tool, union perf_event *event, return perf_evsel__check_attr(evsel, scr->session); } +static int process_comm_event(struct perf_tool *tool, + union perf_event *event, + struct perf_sample *sample, + struct machine *machine) +{ + struct thread *thread; + struct perf_script *script = container_of(tool, struct perf_script, tool); + struct perf_session *session = script->session; + struct perf_evsel *evsel = perf_evlist__first(session->evlist); + int ret = -1; + + thread = machine__findnew_thread(machine, event->comm.pid, event->comm.tid); + if (thread == NULL) { + pr_debug("problem processing COMM event, skipping it.\n"); + return -1; + } + + if (perf_event__process_comm(tool, event, sample, machine) < 0) + goto out; + + if (!evsel->attr.sample_id_all) { + sample->cpu = 0; + sample->time = 0; + sample->tid = event->comm.tid; + sample->pid = event->comm.pid; + } + print_sample_start(sample, thread, evsel); + perf_event__fprintf(event, stdout); + ret = 0; + +out: + return ret; +} + +static int process_fork_event(struct perf_tool *tool, + union perf_event *event, + struct perf_sample *sample, + struct machine *machine) +{ + struct thread *thread; + struct perf_script *script = container_of(tool, struct perf_script, tool); + struct perf_session *session = script->session; + struct perf_evsel *evsel = perf_evlist__first(session->evlist); + + if (perf_event__process_fork(tool, event, sample, machine) < 0) + return -1; + + thread = machine__findnew_thread(machine, event->fork.pid, event->fork.tid); + if (thread == NULL) { + pr_debug("problem processing FORK event, skipping it.\n"); + return -1; + } + + if (!evsel->attr.sample_id_all) { + sample->cpu = 0; + sample->time = event->fork.time; + sample->tid = event->fork.tid; + sample->pid = event->fork.pid; + } + print_sample_start(sample, thread, evsel); + perf_event__fprintf(event, stdout); + + return 0; +} +static int process_exit_event(struct
[tip:perf/core] perf script: Print comm, fork and exit events also
Commit-ID: ad7ebb9a48f59bad2714b64725653a73d78b686e Gitweb: http://git.kernel.org/tip/ad7ebb9a48f59bad2714b64725653a73d78b686e Author: Namhyung Kim namhy...@kernel.org AuthorDate: Tue, 26 Nov 2013 17:51:12 +0900 Committer: Arnaldo Carvalho de Melo a...@redhat.com CommitDate: Wed, 27 Nov 2013 14:58:38 -0300 perf script: Print comm, fork and exit events also If --show-task-events option is given, also print internal COMM, FORK and EXIT events. It would be helpful for debugging. $ perf script --show-task-events ... swapper 0 [009] 3350640.335261: sched:sched_switch: prev_comm=swapper/9 sleep 9486 [009] 3350640.335509: PERF_RECORD_COMM: sleep:9486 sleep 9486 [009] 3350640.335806: sched:sched_stat_runtime: comm=sleep pid=9486 firefox 2635 [003] 3350641.275896: PERF_RECORD_FORK(2635:9487):(2635:2635) firefox 2635 [003] 3350641.275896: sched:sched_process_fork: comm=firefox pid=2635 sleep 9486 [009] 3350641.336009: PERF_RECORD_EXIT(9486:9486):(9486:9486) Signed-off-by: Namhyung Kim namhy...@kernel.org Suggested-by: Frederic Weisbecker fweis...@gmail.com Reviewed-by: David Ahern dsah...@gmail.com Cc: Ingo Molnar mi...@kernel.org Cc: Namhyung Kim namhyung@lge.com Cc: Paul Mackerras pau...@samba.org Cc: Peter Zijlstra a.p.zijls...@chello.nl Link: http://lkml.kernel.org/r/1385455873-25865-1-git-send-email-namhy...@kernel.org Signed-off-by: Arnaldo Carvalho de Melo a...@redhat.com --- tools/perf/Documentation/perf-script.txt | 3 + tools/perf/builtin-script.c | 105 +++ 2 files changed, 108 insertions(+) diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt index e9cbfcd..67af9b7 100644 --- a/tools/perf/Documentation/perf-script.txt +++ b/tools/perf/Documentation/perf-script.txt @@ -203,6 +203,9 @@ OPTIONS --show-kernel-path:: Try to resolve the path of [kernel.kallsyms] +--show-task-events + Display task related events (e.g. FORK, COMM, EXIT). + SEE ALSO linkperf:perf-record[1], linkperf:perf-script-perl[1], diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 9f3ba44..e2b9aff 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -572,6 +572,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused, struct perf_script { struct perf_tooltool; struct perf_session *session; + boolshow_task_events; }; static int process_attr(struct perf_tool *tool, union perf_event *event, @@ -602,6 +603,101 @@ static int process_attr(struct perf_tool *tool, union perf_event *event, return perf_evsel__check_attr(evsel, scr-session); } +static int process_comm_event(struct perf_tool *tool, + union perf_event *event, + struct perf_sample *sample, + struct machine *machine) +{ + struct thread *thread; + struct perf_script *script = container_of(tool, struct perf_script, tool); + struct perf_session *session = script-session; + struct perf_evsel *evsel = perf_evlist__first(session-evlist); + int ret = -1; + + thread = machine__findnew_thread(machine, event-comm.pid, event-comm.tid); + if (thread == NULL) { + pr_debug(problem processing COMM event, skipping it.\n); + return -1; + } + + if (perf_event__process_comm(tool, event, sample, machine) 0) + goto out; + + if (!evsel-attr.sample_id_all) { + sample-cpu = 0; + sample-time = 0; + sample-tid = event-comm.tid; + sample-pid = event-comm.pid; + } + print_sample_start(sample, thread, evsel); + perf_event__fprintf(event, stdout); + ret = 0; + +out: + return ret; +} + +static int process_fork_event(struct perf_tool *tool, + union perf_event *event, + struct perf_sample *sample, + struct machine *machine) +{ + struct thread *thread; + struct perf_script *script = container_of(tool, struct perf_script, tool); + struct perf_session *session = script-session; + struct perf_evsel *evsel = perf_evlist__first(session-evlist); + + if (perf_event__process_fork(tool, event, sample, machine) 0) + return -1; + + thread = machine__findnew_thread(machine, event-fork.pid, event-fork.tid); + if (thread == NULL) { + pr_debug(problem processing FORK event, skipping it.\n); + return -1; + } + + if (!evsel-attr.sample_id_all) { + sample-cpu = 0; + sample-time = event-fork.time; + sample-tid = event-fork.tid; + sample-pid = event-fork.pid; + } +