Skip to content

Commit 6e9fa41

Browse files
captain5050namhyung
authored andcommitted
perf parse-events: Remove non-json software events
Remove the hard coded encodings from parse-events. This has the consequence that software events are matched using the sysfs/json priority, will be case insensitive and will be wildcarded across PMUs. As there were software and hardware types in the parsing code, the removal means software vs hardware logic can be removed and hardware assumed. Now the perf json provides detailed descriptions of software events, remove the previous listing support that didn't contain event descriptions. When globbing is required for the "sw" option in perf list, use string PMU globbing as was done previously for the tool PMU. The output of `perf list sw` command changed like this. Before: List of pre-defined events (to be used in -e or -M): alignment-faults [Software event] bpf-output [Software event] cgroup-switches [Software event] context-switches OR cs [Software event] cpu-clock [Software event] cpu-migrations OR migrations [Software event] dummy [Software event] emulation-faults [Software event] major-faults [Software event] minor-faults [Software event] page-faults OR faults [Software event] task-clock [Software event] After: List of pre-defined events (to be used in -e or -M): software: alignment-faults [Number of kernel handled memory alignment faults. Unit: software] bpf-output [An event used by BPF programs to write to the perf ring buffer. Unit: software] cgroup-switches [Number of context switches to a task in a different cgroup. Unit: software] context-switches [Number of context switches [This event is an alias of cs]. Unit: software] cpu-clock [Per-CPU high-resolution timer based event. Unit: software] cpu-migrations [Number of times a process has migrated to a new CPU [This event is an alias of migrations]. Unit: software] cs [Number of context switches [This event is an alias of context-switches]. Unit: software] dummy [A placeholder event that doesn't count anything. Unit: software] ... Signed-off-by: Ian Rogers <[email protected]> Tested-by: Arnaldo Carvalho de Melo <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Namhyung Kim <[email protected]>
1 parent 9957d8c commit 6e9fa41

File tree

6 files changed

+33
-107
lines changed

6 files changed

+33
-107
lines changed

tools/perf/builtin-list.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -623,16 +623,17 @@ int cmd_list(int argc, const char **argv)
623623
else if (strcmp(argv[i], "sw") == 0 ||
624624
strcmp(argv[i], "software") == 0) {
625625
char *old_pmu_glob = default_ps.pmu_glob;
626+
static const char * const sw_globs[] = { "software", "tool" };
626627

627-
print_symbol_events(&print_cb, ps, PERF_TYPE_SOFTWARE,
628-
event_symbols_sw, PERF_COUNT_SW_MAX);
629-
default_ps.pmu_glob = strdup("tool");
630-
if (!default_ps.pmu_glob) {
631-
ret = -1;
632-
goto out;
628+
for (size_t j = 0; j < ARRAY_SIZE(sw_globs); j++) {
629+
default_ps.pmu_glob = strdup(sw_globs[j]);
630+
if (!default_ps.pmu_glob) {
631+
ret = -1;
632+
goto out;
633+
}
634+
perf_pmus__print_pmu_events(&print_cb, ps);
635+
zfree(&default_ps.pmu_glob);
633636
}
634-
perf_pmus__print_pmu_events(&print_cb, ps);
635-
zfree(&default_ps.pmu_glob);
636637
default_ps.pmu_glob = old_pmu_glob;
637638
} else if (strcmp(argv[i], "cache") == 0 ||
638639
strcmp(argv[i], "hwcache") == 0)
@@ -679,8 +680,6 @@ int cmd_list(int argc, const char **argv)
679680
default_ps.event_glob = s;
680681
print_symbol_events(&print_cb, ps, PERF_TYPE_HARDWARE,
681682
event_symbols_hw, PERF_COUNT_HW_MAX);
682-
print_symbol_events(&print_cb, ps, PERF_TYPE_SOFTWARE,
683-
event_symbols_sw, PERF_COUNT_SW_MAX);
684683
print_hwcache_events(&print_cb, ps);
685684
perf_pmus__print_pmu_events(&print_cb, ps);
686685
print_tracepoint_events(&print_cb, ps);

tools/perf/util/parse-events.c

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -84,57 +84,6 @@ const struct event_symbol event_symbols_hw[PERF_COUNT_HW_MAX] = {
8484
},
8585
};
8686

87-
const struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = {
88-
[PERF_COUNT_SW_CPU_CLOCK] = {
89-
.symbol = "cpu-clock",
90-
.alias = "",
91-
},
92-
[PERF_COUNT_SW_TASK_CLOCK] = {
93-
.symbol = "task-clock",
94-
.alias = "",
95-
},
96-
[PERF_COUNT_SW_PAGE_FAULTS] = {
97-
.symbol = "page-faults",
98-
.alias = "faults",
99-
},
100-
[PERF_COUNT_SW_CONTEXT_SWITCHES] = {
101-
.symbol = "context-switches",
102-
.alias = "cs",
103-
},
104-
[PERF_COUNT_SW_CPU_MIGRATIONS] = {
105-
.symbol = "cpu-migrations",
106-
.alias = "migrations",
107-
},
108-
[PERF_COUNT_SW_PAGE_FAULTS_MIN] = {
109-
.symbol = "minor-faults",
110-
.alias = "",
111-
},
112-
[PERF_COUNT_SW_PAGE_FAULTS_MAJ] = {
113-
.symbol = "major-faults",
114-
.alias = "",
115-
},
116-
[PERF_COUNT_SW_ALIGNMENT_FAULTS] = {
117-
.symbol = "alignment-faults",
118-
.alias = "",
119-
},
120-
[PERF_COUNT_SW_EMULATION_FAULTS] = {
121-
.symbol = "emulation-faults",
122-
.alias = "",
123-
},
124-
[PERF_COUNT_SW_DUMMY] = {
125-
.symbol = "dummy",
126-
.alias = "",
127-
},
128-
[PERF_COUNT_SW_BPF_OUTPUT] = {
129-
.symbol = "bpf-output",
130-
.alias = "",
131-
},
132-
[PERF_COUNT_SW_CGROUP_SWITCHES] = {
133-
.symbol = "cgroup-switches",
134-
.alias = "",
135-
},
136-
};
137-
13887
static const char *const event_types[] = {
13988
[PERF_TYPE_HARDWARE] = "hardware",
14089
[PERF_TYPE_SOFTWARE] = "software",

tools/perf/util/parse-events.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,6 @@ struct event_symbol {
264264
const char *alias;
265265
};
266266
extern const struct event_symbol event_symbols_hw[];
267-
extern const struct event_symbol event_symbols_sw[];
268267

269268
char *parse_events_formats_error_string(char *additional_terms);
270269

tools/perf/util/parse-events.l

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@ do { \
117117
yyless(0); \
118118
} while (0)
119119

120-
static int sym(yyscan_t scanner, int type, int config)
120+
static int sym(yyscan_t scanner, int config)
121121
{
122122
YYSTYPE *yylval = parse_events_get_lval(scanner);
123123

124-
yylval->num = (type << 16) + config;
125-
return type == PERF_TYPE_HARDWARE ? PE_VALUE_SYM_HW : PE_VALUE_SYM_SW;
124+
yylval->num = config;
125+
return PE_VALUE_SYM_HW;
126126
}
127127

128128
static int term(yyscan_t scanner, enum parse_events__term_type type)
@@ -391,28 +391,16 @@ r0x{num_raw_hex} { return str(yyscanner, PE_RAW); }
391391
<<EOF>> { BEGIN(INITIAL); }
392392
}
393393

394-
cpu-cycles|cycles { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES); }
395-
stalled-cycles-frontend|idle-cycles-frontend { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); }
396-
stalled-cycles-backend|idle-cycles-backend { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); }
397-
instructions { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_INSTRUCTIONS); }
398-
cache-references { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_CACHE_REFERENCES); }
399-
cache-misses { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_CACHE_MISSES); }
400-
branch-instructions|branches { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_INSTRUCTIONS); }
401-
branch-misses { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_MISSES); }
402-
bus-cycles { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_BUS_CYCLES); }
403-
ref-cycles { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_REF_CPU_CYCLES); }
404-
cpu-clock { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK); }
405-
task-clock { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_TASK_CLOCK); }
406-
page-faults|faults { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS); }
407-
minor-faults { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS_MIN); }
408-
major-faults { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS_MAJ); }
409-
context-switches|cs { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CONTEXT_SWITCHES); }
410-
cpu-migrations|migrations { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_MIGRATIONS); }
411-
alignment-faults { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_ALIGNMENT_FAULTS); }
412-
emulation-faults { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EMULATION_FAULTS); }
413-
dummy { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_DUMMY); }
414-
bpf-output { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_BPF_OUTPUT); }
415-
cgroup-switches { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CGROUP_SWITCHES); }
394+
cpu-cycles|cycles { return sym(yyscanner, PERF_COUNT_HW_CPU_CYCLES); }
395+
stalled-cycles-frontend|idle-cycles-frontend { return sym(yyscanner, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); }
396+
stalled-cycles-backend|idle-cycles-backend { return sym(yyscanner, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); }
397+
instructions { return sym(yyscanner, PERF_COUNT_HW_INSTRUCTIONS); }
398+
cache-references { return sym(yyscanner, PERF_COUNT_HW_CACHE_REFERENCES); }
399+
cache-misses { return sym(yyscanner, PERF_COUNT_HW_CACHE_MISSES); }
400+
branch-instructions|branches { return sym(yyscanner, PERF_COUNT_HW_BRANCH_INSTRUCTIONS); }
401+
branch-misses { return sym(yyscanner, PERF_COUNT_HW_BRANCH_MISSES); }
402+
bus-cycles { return sym(yyscanner, PERF_COUNT_HW_BUS_CYCLES); }
403+
ref-cycles { return sym(yyscanner, PERF_COUNT_HW_REF_CPU_CYCLES); }
416404

417405
{lc_type} { return str(yyscanner, PE_LEGACY_CACHE); }
418406
{lc_type}-{lc_op_result} { return str(yyscanner, PE_LEGACY_CACHE); }

tools/perf/util/parse-events.y

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ static void free_list_evsel(struct list_head* list_evsel)
5555
%}
5656

5757
%token PE_START_EVENTS PE_START_TERMS
58-
%token PE_VALUE PE_VALUE_SYM_HW PE_VALUE_SYM_SW PE_TERM
58+
%token PE_VALUE PE_VALUE_SYM_HW PE_TERM
5959
%token PE_EVENT_NAME
6060
%token PE_RAW PE_NAME
6161
%token PE_MODIFIER_EVENT PE_MODIFIER_BP PE_BP_COLON PE_BP_SLASH
@@ -66,10 +66,8 @@ static void free_list_evsel(struct list_head* list_evsel)
6666
%token PE_TERM_HW
6767
%type <num> PE_VALUE
6868
%type <num> PE_VALUE_SYM_HW
69-
%type <num> PE_VALUE_SYM_SW
7069
%type <mod> PE_MODIFIER_EVENT
7170
%type <term_type> PE_TERM
72-
%type <num> value_sym
7371
%type <str> PE_RAW
7472
%type <str> PE_NAME
7573
%type <str> PE_LEGACY_CACHE
@@ -306,24 +304,19 @@ PE_NAME sep_dc
306304
$$ = list;
307305
}
308306

309-
value_sym:
310-
PE_VALUE_SYM_HW
311-
|
312-
PE_VALUE_SYM_SW
313-
314307
event_legacy_symbol:
315-
value_sym '/' event_config '/'
308+
PE_VALUE_SYM_HW '/' event_config '/'
316309
{
317310
struct list_head *list;
318-
int type = $1 >> 16;
319-
int config = $1 & 255;
320311
int err;
321-
bool wildcard = (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE);
322312

323313
list = alloc_list();
324314
if (!list)
325315
YYNOMEM;
326-
err = parse_events_add_numeric(_parse_state, list, type, config, $3, wildcard);
316+
err = parse_events_add_numeric(_parse_state, list,
317+
PERF_TYPE_HARDWARE, $1,
318+
$3,
319+
/*wildcard=*/true);
327320
parse_events_terms__delete($3);
328321
if (err) {
329322
free_list_evsel(list);
@@ -332,18 +325,18 @@ value_sym '/' event_config '/'
332325
$$ = list;
333326
}
334327
|
335-
value_sym sep_slash_slash_dc
328+
PE_VALUE_SYM_HW sep_slash_slash_dc
336329
{
337330
struct list_head *list;
338-
int type = $1 >> 16;
339-
int config = $1 & 255;
340-
bool wildcard = (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE);
341331
int err;
342332

343333
list = alloc_list();
344334
if (!list)
345335
YYNOMEM;
346-
err = parse_events_add_numeric(_parse_state, list, type, config, /*head_config=*/NULL, wildcard);
336+
err = parse_events_add_numeric(_parse_state, list,
337+
PERF_TYPE_HARDWARE, $1,
338+
/*head_config=*/NULL,
339+
/*wildcard=*/true);
347340
if (err)
348341
PE_ABORT(err);
349342
$$ = list;

tools/perf/util/print-events.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -521,8 +521,6 @@ void print_events(const struct print_callbacks *print_cb, void *print_state)
521521
{
522522
print_symbol_events(print_cb, print_state, PERF_TYPE_HARDWARE,
523523
event_symbols_hw, PERF_COUNT_HW_MAX);
524-
print_symbol_events(print_cb, print_state, PERF_TYPE_SOFTWARE,
525-
event_symbols_sw, PERF_COUNT_SW_MAX);
526524

527525
print_hwcache_events(print_cb, print_state);
528526

0 commit comments

Comments
 (0)