perf_counter tools: support symbolic event names in kerneltop
authorWu Fengguang <fengguang.wu@intel.com>
Fri, 20 Mar 2009 02:08:04 +0000 (10:08 +0800)
committerIngo Molnar <mingo@elte.hu>
Mon, 6 Apr 2009 07:30:21 +0000 (09:30 +0200)
- 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>
Documentation/perf_counter/kerneltop.c
Documentation/perf_counter/perfcounters.h
Documentation/perf_counter/perfstat.c

index fe70a2c92a8e8a8bd467128d792da0e533e4d686..edc5b09fb586f9231cd04d8d8669e5c02ee3279e 100644 (file)
@@ -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])
index 0f3764aa52abdef2878b10da207ebd5a948337fe..99a90d833e12719a2be67d1d3a081b7967d4e3f2 100644 (file)
@@ -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;
+}
index 3364dcb9dd9d302f5787792d35f948a67919daff..fd594468e655b970ae74083a840f54fdb219460d 100644 (file)
 
 #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: