Skip to content

Commit

Permalink
perf trace: Add record option
Browse files Browse the repository at this point in the history
The record option is a convience alias to include the -e raw_syscalls:*
argument to perf-record. All other options are passed to perf-record's
handler. Resulting data file can be analyzed by perf-trace -i.

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: Namhyung Kim <namhyung.kim@lge.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1380395584-9025-5-git-send-email-dsahern@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
David Ahern authored and Arnaldo Carvalho de Melo committed Oct 11, 2013
1 parent 8fb598e commit 5e2485b
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 3 deletions.
12 changes: 9 additions & 3 deletions tools/perf/Documentation/perf-trace.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,22 @@ SYNOPSIS
--------
[verse]
'perf trace'
'perf trace record'

DESCRIPTION
-----------
This command will show the events associated with the target, initially
syscalls, but other system events like pagefaults, task lifetime events,
scheduling events, etc.

Initially this is a live mode only tool, but eventually will work with
perf.data files like the other tools, allowing a detached 'record' from
analysis phases.
This is a live mode tool in addition to working with perf.data files like
the other perf tools. Files can be generated using the 'perf record' command
but the session needs to include the raw_syscalls events (-e 'raw_syscalls:*').
Alernatively, the 'perf trace record' can be used as a shortcut to
automatically include the raw_syscalls events when writing events to a file.

The following options apply to perf trace; options to perf trace record are
found in the perf record man page.

OPTIONS
-------
Expand Down
32 changes: 32 additions & 0 deletions tools/perf/builtin-trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -1501,6 +1501,33 @@ static int parse_target_str(struct trace *trace)
return 0;
}

static int trace__record(int argc, const char **argv)
{
unsigned int rec_argc, i, j;
const char **rec_argv;
const char * const record_args[] = {
"record",
"-R",
"-m", "1024",
"-c", "1",
"-e", "raw_syscalls:sys_enter,raw_syscalls:sys_exit",
};

rec_argc = ARRAY_SIZE(record_args) + argc;
rec_argv = calloc(rec_argc + 1, sizeof(char *));

if (rec_argv == NULL)
return -ENOMEM;

for (i = 0; i < ARRAY_SIZE(record_args); i++)
rec_argv[i] = record_args[i];

for (j = 0; j < (unsigned int)argc; j++, i++)
rec_argv[i] = argv[j];

return cmd_record(i, rec_argv, NULL);
}

static int trace__run(struct trace *trace, int argc, const char **argv)
{
struct perf_evlist *evlist = perf_evlist__new();
Expand Down Expand Up @@ -1788,6 +1815,8 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused)
const char * const trace_usage[] = {
"perf trace [<options>] [<command>]",
"perf trace [<options>] -- <command> [<options>]",
"perf trace record [<options>] [<command>]",
"perf trace record [<options>] -- <command> [<options>]",
NULL
};
struct trace trace = {
Expand Down Expand Up @@ -1844,6 +1873,9 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused)
int err;
char bf[BUFSIZ];

if ((argc > 1) && (strcmp(argv[1], "record") == 0))
return trace__record(argc-2, &argv[2]);

argc = parse_options(argc, argv, trace_options, trace_usage, 0);

if (output_name != NULL) {
Expand Down

0 comments on commit 5e2485b

Please sign in to comment.