2009-09-25 00:02:18 +08:00
|
|
|
#ifndef __PERF_PARSE_EVENTS_H
|
|
|
|
#define __PERF_PARSE_EVENTS_H
|
2009-05-26 15:17:18 +08:00
|
|
|
/*
|
|
|
|
* Parse symbolic events/counts passed in as options:
|
|
|
|
*/
|
|
|
|
|
2012-05-21 15:12:49 +08:00
|
|
|
#include <linux/list.h>
|
2012-04-06 00:26:25 +08:00
|
|
|
#include <stdbool.h>
|
2014-04-26 03:31:02 +08:00
|
|
|
#include <linux/types.h>
|
2012-11-20 06:21:03 +08:00
|
|
|
#include <linux/perf_event.h>
|
2011-01-04 02:39:04 +08:00
|
|
|
|
|
|
|
struct list_head;
|
|
|
|
struct perf_evsel;
|
2011-07-14 17:25:32 +08:00
|
|
|
struct perf_evlist;
|
perf tools: Add parse_events_error interface
Adding support to return error information from parse_events function.
Following struct will be populated by parse_events function on return:
struct parse_events_error {
int idx;
char *str;
char *help;
};
where 'idx' is the position in the string where the parsing failed,
'str' contains dynamically allocated error string describing the error
and 'help' is optional help string.
The change contains reporting function, which currently does not display
anything. The code changes to supply error data for specific event types
are coming in next patches. However this is what the expected output is:
$ sudo perf record -e 'sched:krava' ls
event syntax error: 'sched:krava'
\___ unknown tracepoint
...
$ perf record -e 'cpu/even=0x1/' ls
event syntax error: 'cpu/even=0x1/'
\___ unknown term
valid terms: pc,any,inv,edge,cmask,event,in_tx,ldlat,umask,in_tx_cp,offcore_rsp,config,config1,config2,name,period,branch_type
...
$ perf record -e cycles,cache-mises ls
event syntax error: '..es,cache-mises'
\___ parser error
...
The output functions cut the beginning of the event string so the error
starts up to 10th character and cut the end of the string of it crosses
the terminal width.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1429729824-13932-2-git-send-email-jolsa@kernel.org
[ Renamed 'error' variables to 'err', not to clash with util.h error() ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-04-23 03:10:16 +08:00
|
|
|
struct parse_events_error;
|
2011-01-04 02:39:04 +08:00
|
|
|
|
2009-07-22 02:16:29 +08:00
|
|
|
struct option;
|
|
|
|
|
2009-08-28 09:09:58 +08:00
|
|
|
struct tracepoint_path {
|
|
|
|
char *system;
|
|
|
|
char *name;
|
|
|
|
struct tracepoint_path *next;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern struct tracepoint_path *tracepoint_id_to_path(u64 config);
|
2013-06-26 15:14:05 +08:00
|
|
|
extern struct tracepoint_path *tracepoint_name_to_path(const char *name);
|
2011-01-23 05:12:38 +08:00
|
|
|
extern bool have_tracepoints(struct list_head *evlist);
|
2009-08-28 09:09:58 +08:00
|
|
|
|
2011-03-10 13:23:28 +08:00
|
|
|
const char *event_type(int type);
|
2009-05-26 17:10:09 +08:00
|
|
|
|
2011-07-14 17:25:32 +08:00
|
|
|
extern int parse_events_option(const struct option *opt, const char *str,
|
|
|
|
int unset);
|
perf tools: Add parse_events_error interface
Adding support to return error information from parse_events function.
Following struct will be populated by parse_events function on return:
struct parse_events_error {
int idx;
char *str;
char *help;
};
where 'idx' is the position in the string where the parsing failed,
'str' contains dynamically allocated error string describing the error
and 'help' is optional help string.
The change contains reporting function, which currently does not display
anything. The code changes to supply error data for specific event types
are coming in next patches. However this is what the expected output is:
$ sudo perf record -e 'sched:krava' ls
event syntax error: 'sched:krava'
\___ unknown tracepoint
...
$ perf record -e 'cpu/even=0x1/' ls
event syntax error: 'cpu/even=0x1/'
\___ unknown term
valid terms: pc,any,inv,edge,cmask,event,in_tx,ldlat,umask,in_tx_cp,offcore_rsp,config,config1,config2,name,period,branch_type
...
$ perf record -e cycles,cache-mises ls
event syntax error: '..es,cache-mises'
\___ parser error
...
The output functions cut the beginning of the event string so the error
starts up to 10th character and cut the end of the string of it crosses
the terminal width.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1429729824-13932-2-git-send-email-jolsa@kernel.org
[ Renamed 'error' variables to 'err', not to clash with util.h error() ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-04-23 03:10:16 +08:00
|
|
|
extern int parse_events(struct perf_evlist *evlist, const char *str,
|
|
|
|
struct parse_events_error *error);
|
2012-06-15 14:31:40 +08:00
|
|
|
extern int parse_events_terms(struct list_head *terms, const char *str);
|
2009-10-15 11:22:07 +08:00
|
|
|
extern int parse_filter(const struct option *opt, const char *str, int unset);
|
2015-07-10 15:36:10 +08:00
|
|
|
extern int exclude_perf(const struct option *opt, const char *arg, int unset);
|
2009-05-26 17:10:09 +08:00
|
|
|
|
|
|
|
#define EVENTS_HELP_MAX (128*1024)
|
|
|
|
|
2014-10-07 23:08:50 +08:00
|
|
|
enum perf_pmu_event_symbol_type {
|
|
|
|
PMU_EVENT_SYMBOL_ERR, /* not a PMU EVENT */
|
|
|
|
PMU_EVENT_SYMBOL, /* normal style PMU event */
|
|
|
|
PMU_EVENT_SYMBOL_PREFIX, /* prefix of pre-suf style event */
|
|
|
|
PMU_EVENT_SYMBOL_SUFFIX, /* suffix of pre-suf style event */
|
|
|
|
};
|
|
|
|
|
|
|
|
struct perf_pmu_event_symbol {
|
|
|
|
char *symbol;
|
|
|
|
enum perf_pmu_event_symbol_type type;
|
|
|
|
};
|
|
|
|
|
2012-03-16 03:09:16 +08:00
|
|
|
enum {
|
2012-04-26 00:24:57 +08:00
|
|
|
PARSE_EVENTS__TERM_TYPE_NUM,
|
|
|
|
PARSE_EVENTS__TERM_TYPE_STR,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
PARSE_EVENTS__TERM_TYPE_USER,
|
2012-03-16 03:09:16 +08:00
|
|
|
PARSE_EVENTS__TERM_TYPE_CONFIG,
|
|
|
|
PARSE_EVENTS__TERM_TYPE_CONFIG1,
|
|
|
|
PARSE_EVENTS__TERM_TYPE_CONFIG2,
|
2012-05-21 15:12:53 +08:00
|
|
|
PARSE_EVENTS__TERM_TYPE_NAME,
|
2012-03-16 03:09:16 +08:00
|
|
|
PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD,
|
2015-08-09 14:45:23 +08:00
|
|
|
PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ,
|
2012-03-16 03:09:16 +08:00
|
|
|
PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE,
|
2015-08-04 16:30:19 +08:00
|
|
|
PARSE_EVENTS__TERM_TYPE_TIME,
|
perf callchain: Per-event type selection support
This patchkit adds the ability to set callgraph mode (fp, dwarf, lbr) per
event. This in term can reduce sampling overhead and the size of the
perf.data.
Here is an example.
perf record -e 'cpu/cpu-cycles,period=1000,call-graph=fp,time=1/,cpu/instructions,call-graph=lbr/' sleep 1
perf evlist -v
cpu/cpu-cycles,period=1000,call-graph=fp,time=1/: type: 4, size: 112,
config: 0x3c, { sample_period, sample_freq }: 1000, sample_type:
IP|TID|TIME|CALLCHAIN|PERIOD|IDENTIFIER, read_format: ID, disabled: 1,
inherit: 1, mmap: 1, comm: 1, enable_on_exec: 1, task: 1, sample_id_all:
1, exclude_guest: 1, mmap2: 1, comm_exec: 1
cpu/instructions,call-graph=lbr/: type: 4, size: 112, config: 0xc0, {
sample_period, sample_freq }: 4000, sample_type:
IP|TID|TIME|CALLCHAIN|PERIOD|BRANCH_STACK|IDENTIFIER, read_format: ID,
disabled: 1, inherit: 1, freq: 1, enable_on_exec: 1, sample_id_all: 1,
exclude_guest: 1
Signed-off-by: Kan Liang <kan.liang@intel.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/r/1439289050-40510-1-git-send-email-kan.liang@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-08-11 18:30:47 +08:00
|
|
|
PARSE_EVENTS__TERM_TYPE_CALLGRAPH,
|
|
|
|
PARSE_EVENTS__TERM_TYPE_STACKSIZE,
|
2012-03-16 03:09:16 +08:00
|
|
|
};
|
|
|
|
|
2013-01-19 03:29:49 +08:00
|
|
|
struct parse_events_term {
|
2012-03-16 03:09:16 +08:00
|
|
|
char *config;
|
|
|
|
union {
|
|
|
|
char *str;
|
2012-08-08 01:43:13 +08:00
|
|
|
u64 num;
|
2012-03-16 03:09:16 +08:00
|
|
|
} val;
|
2012-04-26 00:24:57 +08:00
|
|
|
int type_val;
|
|
|
|
int type_term;
|
2012-03-16 03:09:16 +08:00
|
|
|
struct list_head list;
|
2015-01-08 09:13:50 +08:00
|
|
|
bool used;
|
2015-04-23 03:10:20 +08:00
|
|
|
|
|
|
|
/* error string indexes for within parsed string */
|
|
|
|
int err_term;
|
|
|
|
int err_val;
|
2012-03-16 03:09:16 +08:00
|
|
|
};
|
|
|
|
|
perf tools: Add parse_events_error interface
Adding support to return error information from parse_events function.
Following struct will be populated by parse_events function on return:
struct parse_events_error {
int idx;
char *str;
char *help;
};
where 'idx' is the position in the string where the parsing failed,
'str' contains dynamically allocated error string describing the error
and 'help' is optional help string.
The change contains reporting function, which currently does not display
anything. The code changes to supply error data for specific event types
are coming in next patches. However this is what the expected output is:
$ sudo perf record -e 'sched:krava' ls
event syntax error: 'sched:krava'
\___ unknown tracepoint
...
$ perf record -e 'cpu/even=0x1/' ls
event syntax error: 'cpu/even=0x1/'
\___ unknown term
valid terms: pc,any,inv,edge,cmask,event,in_tx,ldlat,umask,in_tx_cp,offcore_rsp,config,config1,config2,name,period,branch_type
...
$ perf record -e cycles,cache-mises ls
event syntax error: '..es,cache-mises'
\___ parser error
...
The output functions cut the beginning of the event string so the error
starts up to 10th character and cut the end of the string of it crosses
the terminal width.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1429729824-13932-2-git-send-email-jolsa@kernel.org
[ Renamed 'error' variables to 'err', not to clash with util.h error() ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-04-23 03:10:16 +08:00
|
|
|
struct parse_events_error {
|
|
|
|
int idx; /* index in the parsed string */
|
|
|
|
char *str; /* string to display at the index */
|
|
|
|
char *help; /* optional help string */
|
|
|
|
};
|
|
|
|
|
2013-01-19 03:56:57 +08:00
|
|
|
struct parse_events_evlist {
|
perf tools: Add parse_events_error interface
Adding support to return error information from parse_events function.
Following struct will be populated by parse_events function on return:
struct parse_events_error {
int idx;
char *str;
char *help;
};
where 'idx' is the position in the string where the parsing failed,
'str' contains dynamically allocated error string describing the error
and 'help' is optional help string.
The change contains reporting function, which currently does not display
anything. The code changes to supply error data for specific event types
are coming in next patches. However this is what the expected output is:
$ sudo perf record -e 'sched:krava' ls
event syntax error: 'sched:krava'
\___ unknown tracepoint
...
$ perf record -e 'cpu/even=0x1/' ls
event syntax error: 'cpu/even=0x1/'
\___ unknown term
valid terms: pc,any,inv,edge,cmask,event,in_tx,ldlat,umask,in_tx_cp,offcore_rsp,config,config1,config2,name,period,branch_type
...
$ perf record -e cycles,cache-mises ls
event syntax error: '..es,cache-mises'
\___ parser error
...
The output functions cut the beginning of the event string so the error
starts up to 10th character and cut the end of the string of it crosses
the terminal width.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1429729824-13932-2-git-send-email-jolsa@kernel.org
[ Renamed 'error' variables to 'err', not to clash with util.h error() ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-04-23 03:10:16 +08:00
|
|
|
struct list_head list;
|
|
|
|
int idx;
|
|
|
|
int nr_groups;
|
|
|
|
struct parse_events_error *error;
|
2012-06-15 14:31:38 +08:00
|
|
|
};
|
|
|
|
|
2013-01-19 03:56:57 +08:00
|
|
|
struct parse_events_terms {
|
2012-06-15 14:31:40 +08:00
|
|
|
struct list_head *terms;
|
|
|
|
};
|
|
|
|
|
2013-01-19 03:29:49 +08:00
|
|
|
int parse_events__is_hardcoded_term(struct parse_events_term *term);
|
2015-05-19 21:05:42 +08:00
|
|
|
int parse_events_term__num(struct parse_events_term **term,
|
|
|
|
int type_term, char *config, u64 num,
|
|
|
|
void *loc_term, void *loc_val);
|
|
|
|
int parse_events_term__str(struct parse_events_term **term,
|
|
|
|
int type_term, char *config, char *str,
|
|
|
|
void *loc_term, void *loc_val);
|
2013-01-19 03:29:49 +08:00
|
|
|
int parse_events_term__sym_hw(struct parse_events_term **term,
|
2012-10-10 20:53:17 +08:00
|
|
|
char *config, unsigned idx);
|
2013-01-19 03:29:49 +08:00
|
|
|
int parse_events_term__clone(struct parse_events_term **new,
|
|
|
|
struct parse_events_term *term);
|
2012-03-16 03:09:16 +08:00
|
|
|
void parse_events__free_terms(struct list_head *terms);
|
2012-08-08 18:21:54 +08:00
|
|
|
int parse_events__modifier_event(struct list_head *list, char *str, bool add);
|
2012-08-08 18:14:14 +08:00
|
|
|
int parse_events__modifier_group(struct list_head *list, char *event_mod);
|
2012-08-17 03:10:21 +08:00
|
|
|
int parse_events_name(struct list_head *list, char *name);
|
2013-07-03 03:27:25 +08:00
|
|
|
int parse_events_add_tracepoint(struct list_head *list, int *idx,
|
2015-09-07 16:38:05 +08:00
|
|
|
char *sys, char *event,
|
|
|
|
struct parse_events_error *error);
|
2015-04-23 03:10:24 +08:00
|
|
|
int parse_events_add_numeric(struct parse_events_evlist *data,
|
|
|
|
struct list_head *list,
|
2012-08-08 01:43:13 +08:00
|
|
|
u32 type, u64 config,
|
2012-03-16 03:09:16 +08:00
|
|
|
struct list_head *head_config);
|
2013-07-03 03:27:25 +08:00
|
|
|
int parse_events_add_cache(struct list_head *list, int *idx,
|
2012-03-16 03:09:15 +08:00
|
|
|
char *type, char *op_result1, char *op_result2);
|
2013-07-03 03:27:25 +08:00
|
|
|
int parse_events_add_breakpoint(struct list_head *list, int *idx,
|
2014-05-29 23:26:51 +08:00
|
|
|
void *ptr, char *type, u64 len);
|
2015-04-23 03:10:19 +08:00
|
|
|
int parse_events_add_pmu(struct parse_events_evlist *data,
|
|
|
|
struct list_head *list, char *name,
|
|
|
|
struct list_head *head_config);
|
2014-10-07 23:08:50 +08:00
|
|
|
enum perf_pmu_event_symbol_type
|
|
|
|
perf_pmu__parse_check(const char *name);
|
2012-08-15 03:35:48 +08:00
|
|
|
void parse_events__set_leader(char *name, struct list_head *list);
|
2012-03-21 02:15:40 +08:00
|
|
|
void parse_events_update_lists(struct list_head *list_event,
|
|
|
|
struct list_head *list_all);
|
perf tools: Add parse_events_error interface
Adding support to return error information from parse_events function.
Following struct will be populated by parse_events function on return:
struct parse_events_error {
int idx;
char *str;
char *help;
};
where 'idx' is the position in the string where the parsing failed,
'str' contains dynamically allocated error string describing the error
and 'help' is optional help string.
The change contains reporting function, which currently does not display
anything. The code changes to supply error data for specific event types
are coming in next patches. However this is what the expected output is:
$ sudo perf record -e 'sched:krava' ls
event syntax error: 'sched:krava'
\___ unknown tracepoint
...
$ perf record -e 'cpu/even=0x1/' ls
event syntax error: 'cpu/even=0x1/'
\___ unknown term
valid terms: pc,any,inv,edge,cmask,event,in_tx,ldlat,umask,in_tx_cp,offcore_rsp,config,config1,config2,name,period,branch_type
...
$ perf record -e cycles,cache-mises ls
event syntax error: '..es,cache-mises'
\___ parser error
...
The output functions cut the beginning of the event string so the error
starts up to 10th character and cut the end of the string of it crosses
the terminal width.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1429729824-13932-2-git-send-email-jolsa@kernel.org
[ Renamed 'error' variables to 'err', not to clash with util.h error() ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-04-23 03:10:16 +08:00
|
|
|
void parse_events_evlist_error(struct parse_events_evlist *data,
|
|
|
|
int idx, const char *str);
|
2012-03-16 03:09:15 +08:00
|
|
|
|
2012-08-09 22:31:52 +08:00
|
|
|
void print_events(const char *event_glob, bool name_only);
|
2015-02-27 18:21:27 +08:00
|
|
|
|
|
|
|
struct event_symbol {
|
|
|
|
const char *symbol;
|
|
|
|
const char *alias;
|
|
|
|
};
|
|
|
|
extern struct event_symbol event_symbols_hw[];
|
|
|
|
extern struct event_symbol event_symbols_sw[];
|
|
|
|
void print_symbol_events(const char *event_glob, unsigned type,
|
|
|
|
struct event_symbol *syms, unsigned max,
|
|
|
|
bool name_only);
|
2012-08-09 22:31:52 +08:00
|
|
|
void print_tracepoint_events(const char *subsys_glob, const char *event_glob,
|
|
|
|
bool name_only);
|
|
|
|
int print_hwcache_events(const char *event_glob, bool name_only);
|
2011-01-04 00:50:45 +08:00
|
|
|
extern int is_valid_tracepoint(const char *event_string);
|
2009-05-26 17:10:09 +08:00
|
|
|
|
2015-02-03 03:35:07 +08:00
|
|
|
int valid_event_mount(const char *eventfs);
|
2009-07-22 02:16:29 +08:00
|
|
|
|
2009-09-25 00:02:18 +08:00
|
|
|
#endif /* __PERF_PARSE_EVENTS_H */
|