aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
authorJiri Olsa <jolsa@kernel.org>2015-02-20 17:16:59 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-02-25 10:42:25 -0500
commit2245bf1410d2d719f3bfce729b07ab83fe6142f7 (patch)
tree7f8cb1431a7561ee04111f73eda23d15a6b60a8f /tools/perf
parent53d0a57343949b2af9b27229db534b98e5a0c4d0 (diff)
perf tools: Add new 'perf data' command
Adding new 'perf data' command to provide operations over data files. The 'perf data convert' sub command is coming in following patch, but there's possibility for other useful commands like 'perf data ls' (to display perf data file in directory in ls style). Signed-off-by: Jiri Olsa <jolsa@kernel.org> Acked-by: Namhyung Kim <namhyung@kernel.org> Reviewed-by: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jeremie Galarneau <jgalar@efficios.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Tom Zanussi <tzanussi@gmail.com> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/r/1424470628-5969-3-git-send-email-jolsa@kernel.org Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/Build1
-rw-r--r--tools/perf/Documentation/perf-data.txt15
-rw-r--r--tools/perf/builtin-data.c75
-rw-r--r--tools/perf/builtin.h1
-rw-r--r--tools/perf/command-list.txt1
-rw-r--r--tools/perf/perf.c1
6 files changed, 94 insertions, 0 deletions
diff --git a/tools/perf/Build b/tools/perf/Build
index 976e03849f6d..b77370ef7005 100644
--- a/tools/perf/Build
+++ b/tools/perf/Build
@@ -18,6 +18,7 @@ perf-y += builtin-lock.o
18perf-y += builtin-kvm.o 18perf-y += builtin-kvm.o
19perf-y += builtin-inject.o 19perf-y += builtin-inject.o
20perf-y += builtin-mem.o 20perf-y += builtin-mem.o
21perf-y += builtin-data.o
21 22
22perf-$(CONFIG_AUDIT) += builtin-trace.o 23perf-$(CONFIG_AUDIT) += builtin-trace.o
23perf-$(CONFIG_LIBELF) += builtin-probe.o 24perf-$(CONFIG_LIBELF) += builtin-probe.o
diff --git a/tools/perf/Documentation/perf-data.txt b/tools/perf/Documentation/perf-data.txt
new file mode 100644
index 000000000000..b8c83947715c
--- /dev/null
+++ b/tools/perf/Documentation/perf-data.txt
@@ -0,0 +1,15 @@
1perf-data(1)
2==============
3
4NAME
5----
6perf-data - Data file related processing
7
8SYNOPSIS
9--------
10[verse]
11'perf data' [<common options>] <command> [<options>]",
12
13DESCRIPTION
14-----------
15Data file related processing.
diff --git a/tools/perf/builtin-data.c b/tools/perf/builtin-data.c
new file mode 100644
index 000000000000..1eee97d020fa
--- /dev/null
+++ b/tools/perf/builtin-data.c
@@ -0,0 +1,75 @@
1#include <linux/compiler.h>
2#include "builtin.h"
3#include "perf.h"
4#include "debug.h"
5#include "parse-options.h"
6
7typedef int (*data_cmd_fn_t)(int argc, const char **argv, const char *prefix);
8
9struct data_cmd {
10 const char *name;
11 const char *summary;
12 data_cmd_fn_t fn;
13};
14
15static struct data_cmd data_cmds[];
16
17#define for_each_cmd(cmd) \
18 for (cmd = data_cmds; cmd && cmd->name; cmd++)
19
20static const struct option data_options[] = {
21 OPT_END()
22};
23
24static const char * const data_usage[] = {
25 "perf data [<common options>] <command> [<options>]",
26 NULL
27};
28
29static void print_usage(void)
30{
31 struct data_cmd *cmd;
32
33 printf("Usage:\n");
34 printf("\t%s\n\n", data_usage[0]);
35 printf("\tAvailable commands:\n");
36
37 for_each_cmd(cmd) {
38 printf("\t %s\t- %s\n", cmd->name, cmd->summary);
39 }
40
41 printf("\n");
42}
43
44static struct data_cmd data_cmds[] = {
45 { NULL },
46};
47
48int cmd_data(int argc, const char **argv, const char *prefix)
49{
50 struct data_cmd *cmd;
51 const char *cmdstr;
52
53 /* No command specified. */
54 if (argc < 2)
55 goto usage;
56
57 argc = parse_options(argc, argv, data_options, data_usage,
58 PARSE_OPT_STOP_AT_NON_OPTION);
59 if (argc < 1)
60 goto usage;
61
62 cmdstr = argv[0];
63
64 for_each_cmd(cmd) {
65 if (strcmp(cmd->name, cmdstr))
66 continue;
67
68 return cmd->fn(argc, argv, prefix);
69 }
70
71 pr_err("Unknown command: %s\n", cmdstr);
72usage:
73 print_usage();
74 return -1;
75}
diff --git a/tools/perf/builtin.h b/tools/perf/builtin.h
index b210d62907e4..3688ad29085f 100644
--- a/tools/perf/builtin.h
+++ b/tools/perf/builtin.h
@@ -37,6 +37,7 @@ extern int cmd_test(int argc, const char **argv, const char *prefix);
37extern int cmd_trace(int argc, const char **argv, const char *prefix); 37extern int cmd_trace(int argc, const char **argv, const char *prefix);
38extern int cmd_inject(int argc, const char **argv, const char *prefix); 38extern int cmd_inject(int argc, const char **argv, const char *prefix);
39extern int cmd_mem(int argc, const char **argv, const char *prefix); 39extern int cmd_mem(int argc, const char **argv, const char *prefix);
40extern int cmd_data(int argc, const char **argv, const char *prefix);
40 41
41extern int find_scripts(char **scripts_array, char **scripts_path_array); 42extern int find_scripts(char **scripts_array, char **scripts_path_array);
42#endif 43#endif
diff --git a/tools/perf/command-list.txt b/tools/perf/command-list.txt
index 0906fc401c52..00fcaf8a5b8d 100644
--- a/tools/perf/command-list.txt
+++ b/tools/perf/command-list.txt
@@ -7,6 +7,7 @@ perf-archive mainporcelain common
7perf-bench mainporcelain common 7perf-bench mainporcelain common
8perf-buildid-cache mainporcelain common 8perf-buildid-cache mainporcelain common
9perf-buildid-list mainporcelain common 9perf-buildid-list mainporcelain common
10perf-data mainporcelain common
10perf-diff mainporcelain common 11perf-diff mainporcelain common
11perf-evlist mainporcelain common 12perf-evlist mainporcelain common
12perf-inject mainporcelain common 13perf-inject mainporcelain common
diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index 3700a7faca6c..f3c66b81c6be 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -62,6 +62,7 @@ static struct cmd_struct commands[] = {
62#endif 62#endif
63 { "inject", cmd_inject, 0 }, 63 { "inject", cmd_inject, 0 },
64 { "mem", cmd_mem, 0 }, 64 { "mem", cmd_mem, 0 },
65 { "data", cmd_data, 0 },
65}; 66};
66 67
67struct pager_config { 68struct pager_config {