mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									53d0a57343
								
							
						
					
					
						commit
						2245bf1410
					
				
					 6 changed files with 94 additions and 0 deletions
				
			
		|  | @ -18,6 +18,7 @@ perf-y += builtin-lock.o | |||
| perf-y += builtin-kvm.o | ||||
| perf-y += builtin-inject.o | ||||
| perf-y += builtin-mem.o | ||||
| perf-y += builtin-data.o | ||||
| 
 | ||||
| perf-$(CONFIG_AUDIT) += builtin-trace.o | ||||
| perf-$(CONFIG_LIBELF) += builtin-probe.o | ||||
|  |  | |||
							
								
								
									
										15
									
								
								tools/perf/Documentation/perf-data.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								tools/perf/Documentation/perf-data.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| perf-data(1) | ||||
| ============== | ||||
| 
 | ||||
| NAME | ||||
| ---- | ||||
| perf-data - Data file related processing | ||||
| 
 | ||||
| SYNOPSIS | ||||
| -------- | ||||
| [verse] | ||||
| 'perf data' [<common options>] <command> [<options>]", | ||||
| 
 | ||||
| DESCRIPTION | ||||
| ----------- | ||||
| Data file related processing. | ||||
							
								
								
									
										75
									
								
								tools/perf/builtin-data.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								tools/perf/builtin-data.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,75 @@ | |||
| #include <linux/compiler.h> | ||||
| #include "builtin.h" | ||||
| #include "perf.h" | ||||
| #include "debug.h" | ||||
| #include "parse-options.h" | ||||
| 
 | ||||
| typedef int (*data_cmd_fn_t)(int argc, const char **argv, const char *prefix); | ||||
| 
 | ||||
| struct data_cmd { | ||||
| 	const char	*name; | ||||
| 	const char	*summary; | ||||
| 	data_cmd_fn_t	fn; | ||||
| }; | ||||
| 
 | ||||
| static struct data_cmd data_cmds[]; | ||||
| 
 | ||||
| #define for_each_cmd(cmd) \ | ||||
| 	for (cmd = data_cmds; cmd && cmd->name; cmd++) | ||||
| 
 | ||||
| static const struct option data_options[] = { | ||||
| 	OPT_END() | ||||
| }; | ||||
| 
 | ||||
| static const char * const data_usage[] = { | ||||
| 	"perf data [<common options>] <command> [<options>]", | ||||
| 	NULL | ||||
| }; | ||||
| 
 | ||||
| static void print_usage(void) | ||||
| { | ||||
| 	struct data_cmd *cmd; | ||||
| 
 | ||||
| 	printf("Usage:\n"); | ||||
| 	printf("\t%s\n\n", data_usage[0]); | ||||
| 	printf("\tAvailable commands:\n"); | ||||
| 
 | ||||
| 	for_each_cmd(cmd) { | ||||
| 		printf("\t %s\t- %s\n", cmd->name, cmd->summary); | ||||
| 	} | ||||
| 
 | ||||
| 	printf("\n"); | ||||
| } | ||||
| 
 | ||||
| static struct data_cmd data_cmds[] = { | ||||
| 	{ NULL }, | ||||
| }; | ||||
| 
 | ||||
| int cmd_data(int argc, const char **argv, const char *prefix) | ||||
| { | ||||
| 	struct data_cmd *cmd; | ||||
| 	const char *cmdstr; | ||||
| 
 | ||||
| 	/* No command specified. */ | ||||
| 	if (argc < 2) | ||||
| 		goto usage; | ||||
| 
 | ||||
| 	argc = parse_options(argc, argv, data_options, data_usage, | ||||
| 			     PARSE_OPT_STOP_AT_NON_OPTION); | ||||
| 	if (argc < 1) | ||||
| 		goto usage; | ||||
| 
 | ||||
| 	cmdstr = argv[0]; | ||||
| 
 | ||||
| 	for_each_cmd(cmd) { | ||||
| 		if (strcmp(cmd->name, cmdstr)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		return cmd->fn(argc, argv, prefix); | ||||
| 	} | ||||
| 
 | ||||
| 	pr_err("Unknown command: %s\n", cmdstr); | ||||
| usage: | ||||
| 	print_usage(); | ||||
| 	return -1; | ||||
| } | ||||
|  | @ -37,6 +37,7 @@ extern int cmd_test(int argc, const char **argv, const char *prefix); | |||
| extern int cmd_trace(int argc, const char **argv, const char *prefix); | ||||
| extern int cmd_inject(int argc, const char **argv, const char *prefix); | ||||
| extern int cmd_mem(int argc, const char **argv, const char *prefix); | ||||
| extern int cmd_data(int argc, const char **argv, const char *prefix); | ||||
| 
 | ||||
| extern int find_scripts(char **scripts_array, char **scripts_path_array); | ||||
| #endif | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ perf-archive			mainporcelain common | |||
| perf-bench			mainporcelain common | ||||
| perf-buildid-cache		mainporcelain common | ||||
| perf-buildid-list		mainporcelain common | ||||
| perf-data			mainporcelain common | ||||
| perf-diff			mainporcelain common | ||||
| perf-evlist			mainporcelain common | ||||
| perf-inject			mainporcelain common | ||||
|  |  | |||
|  | @ -62,6 +62,7 @@ static struct cmd_struct commands[] = { | |||
| #endif | ||||
| 	{ "inject",	cmd_inject,	0 }, | ||||
| 	{ "mem",	cmd_mem,	0 }, | ||||
| 	{ "data",	cmd_data,	0 }, | ||||
| }; | ||||
| 
 | ||||
| struct pager_config { | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Jiri Olsa
						Jiri Olsa