[tip:perfcounters/core-v2] perf_counter tools: support symbolic event names in kerneltop

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Commit-ID:  95bb3be1b3ca4a71cc168787b675d5b7852fc6be
Gitweb:     http://git.kernel.org/tip/95bb3be1b3ca4a71cc168787b675d5b7852fc6be
Author:     Wu Fengguang <fengguang.wu@xxxxxxxxx>
AuthorDate: Fri, 20 Mar 2009 10:08:04 +0800
Committer:  Ingo Molnar <mingo@xxxxxxx>
CommitDate: Mon, 6 Apr 2009 09:30:21 +0200

perf_counter tools: support symbolic event names in kerneltop

- kerneltop: --event_id => --event
- kerneltop: can accept SW event types now
- perfstat: it used to implicitly add event -2(task-clock),
	    the new code no longer does this. Shall we?

Signed-off-by: Wu Fengguang <fengguang.wu@xxxxxxxxx>
Acked-by: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
Cc: Paul Mackerras <paulus@xxxxxxxxx>
Signed-off-by: Ingo Molnar <mingo@xxxxxxx>


---
 Documentation/perf_counter/kerneltop.c    |   28 ++++++----------------------
 Documentation/perf_counter/perfcounters.h |   15 ++++++++++-----
 Documentation/perf_counter/perfstat.c     |    8 --------
 3 files changed, 16 insertions(+), 35 deletions(-)

diff --git a/Documentation/perf_counter/kerneltop.c b/Documentation/perf_counter/kerneltop.c
index fe70a2c..edc5b09 100644
--- a/Documentation/perf_counter/kerneltop.c
+++ b/Documentation/perf_counter/kerneltop.c
@@ -86,13 +86,9 @@ const unsigned int default_count[] = {
 	  10000,
 };
 
-static int			nr_counters			= -1;
-
 static __u64			count_filter		       = 100;
 
 static int			event_count[MAX_COUNTERS];
-static unsigned long		event_id[MAX_COUNTERS];
-static int			event_raw[MAX_COUNTERS];
 
 static int			tid				= -1;
 static int			profile_cpu			= -1;
@@ -125,7 +121,7 @@ static void display_help(void)
 	"KernelTop Options (up to %d event types can be specified at once):\n\n",
 		 MAX_COUNTERS);
 	printf(
-	" -e EID    --event_id=EID     # event type ID                    [default:  0]\n"
+	" -e EID    --event=EID        # event type ID                    [default:  0]\n"
 	"                                   0: CPU cycles\n"
 	"                                   1: instructions\n"
 	"                                   2: cache accesses\n"
@@ -160,7 +156,7 @@ static void process_options(int argc, char *argv[])
 			{"cpu",		required_argument,	NULL, 'C'},
 			{"delay",	required_argument,	NULL, 'd'},
 			{"dump_symtab",	no_argument,		NULL, 'D'},
-			{"event_id",	required_argument,	NULL, 'e'},
+			{"event",	required_argument,	NULL, 'e'},
 			{"filter",	required_argument,	NULL, 'f'},
 			{"group",	required_argument,	NULL, 'g'},
 			{"help",	no_argument,		NULL, 'h'},
@@ -178,8 +174,6 @@ static void process_options(int argc, char *argv[])
 
 		switch (c) {
 		case 'c':
-			if (nr_counters == -1)
-				nr_counters = 0;
 			event_count[nr_counters]	=   atoi(optarg); break;
 		case 'C':
 			/* CPU and PID are mutually exclusive */
@@ -192,18 +186,7 @@ static void process_options(int argc, char *argv[])
 		case 'd': delay_secs			=   atoi(optarg); break;
 		case 'D': dump_symtab			=              1; break;
 
-		case 'e':
-			nr_counters++;
-			if (nr_counters == MAX_COUNTERS) {
-				error = 1;
-				break;
-			}
-			if (*optarg == 'r') {
-				event_raw[nr_counters] = 1;
-				++optarg;
-			}
-			event_id[nr_counters] = strtol(optarg, NULL, 16);
-			break;
+		case 'e': error				= parse_events(optarg); break;
 
 		case 'f': count_filter			=   atoi(optarg); break;
 		case 'g': group				=   atoi(optarg); break;
@@ -226,9 +209,10 @@ static void process_options(int argc, char *argv[])
 	if (error)
 		display_help();
 
-	nr_counters++;
-	if (nr_counters < 1)
+	if (!nr_counters) {
 		nr_counters = 1;
+		event_id[0] = 0;
+	}
 
 	for (counter = 0; counter < nr_counters; counter++) {
 		if (event_count[counter])
diff --git a/Documentation/perf_counter/perfcounters.h b/Documentation/perf_counter/perfcounters.h
index 0f3764a..99a90d8 100644
--- a/Documentation/perf_counter/perfcounters.h
+++ b/Documentation/perf_counter/perfcounters.h
@@ -143,6 +143,10 @@ asmlinkage int sys_perf_counter_open(
 	return ret;
 }
 
+static int			nr_counters			= 0;
+static long			event_id[MAX_COUNTERS]		= { -2, -5, -4, -3, 0, 1, 2, 3};
+static int			event_raw[MAX_COUNTERS];
+
 static char *hw_event_names [] = {
 	"CPU cycles",
 	"instructions",
@@ -235,14 +239,13 @@ static int match_event_symbols(char *str)
 	return PERF_HW_EVENTS_MAX;
 }
 
-static void parse_events(char *str)
+static int parse_events(char *str)
 {
 	int type, raw;
 
 again:
-	nr_counters++;
 	if (nr_counters == MAX_COUNTERS)
-		display_help();
+		return -1;
 
 	raw = 0;
 	if (*str == 'r') {
@@ -252,16 +255,18 @@ again:
 	} else {
 		type = match_event_symbols(str);
 		if (!type_valid(type))
-			display_help();
+			return -1;
 	}
 
 	event_id[nr_counters] = type;
 	event_raw[nr_counters] = raw;
+	nr_counters++;
 
 	str = strstr(str, ",");
 	if (str) {
 		str++;
 		goto again;
 	}
-}
 
+	return 0;
+}
diff --git a/Documentation/perf_counter/perfstat.c b/Documentation/perf_counter/perfstat.c
index 3364dcb..fd59446 100644
--- a/Documentation/perf_counter/perfstat.c
+++ b/Documentation/perf_counter/perfstat.c
@@ -54,14 +54,8 @@
 
 #include "perfcounters.h"
 
-static int			nr_counters		= 0;
 static int			nr_cpus			= 0;
 
-static int			event_id[MAX_COUNTERS]	=
-					 { -2, -5, -4, -3, 0, 1, 2, 3};
-
-static int			event_raw[MAX_COUNTERS];
-
 static int			system_wide		= 0;
 
 static void display_help(void)
@@ -127,8 +121,6 @@ static void process_options(int argc, char *argv[])
 
 	if (!nr_counters)
 		nr_counters = 8;
-	else
-		nr_counters++;
 	return;
 
 err:
--
To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Stable Commits]     [Linux Stable Kernel]     [Linux Kernel]     [Linux USB Devel]     [Linux Video &Media]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux