aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWu Fengguang <fengguang.wu@intel.com>2009-03-20 10:08:04 +0800
committerIngo Molnar <mingo@elte.hu>2009-04-06 09:30:21 +0200
commit95bb3be1b3ca4a71cc168787b675d5b7852fc6be (patch)
treecee0056621c685a0eac79899325861e3c17fde58
parentf49012fad4ed2231c7380c0b1901122242b3eab0 (diff)
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@intel.com> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--Documentation/perf_counter/kerneltop.c28
-rw-r--r--Documentation/perf_counter/perfcounters.h15
-rw-r--r--Documentation/perf_counter/perfstat.c8
3 files changed, 16 insertions, 35 deletions
diff --git a/Documentation/perf_counter/kerneltop.c b/Documentation/perf_counter/kerneltop.c
index fe70a2c92a8..edc5b09fb58 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 0f3764aa52a..99a90d833e1 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 3364dcb9dd9..fd594468e65 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: