mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-12 09:05:16 +07:00
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>
This commit is contained in:
parent
f49012fad4
commit
95bb3be1b3
@ -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])
|
||||
|
@ -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 @@ static void parse_events(char *str)
|
||||
} 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;
|
||||
}
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user