perf list: Hide deprecated events by default
There are some deprecated events listed by perf list. But we can't remove them from perf list with ease because some old scripts may use them. Deprecated events are old names of renamed events. When an event gets renamed the old name is kept around for some time and marked with Deprecated. The newer Intel event lists in the tree already have these headers. So we need to keep them in the event list, but provide a new option to show them. The new option is "--deprecated". With this patch, the deprecated events are hidden by default but they can be displayed when option "--deprecated" is enabled. Signed-off-by: Jin Yao <yao.jin@linux.intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Jin Yao <yao.jin@intel.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lore.kernel.org/lkml/20191015025357.8708-1-yao.jin@linux.intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
9afec87ec1
Коммит
a7f6c8c81a
|
@ -36,6 +36,9 @@ Enable debugging output.
|
|||
Print how named events are resolved internally into perf events, and also
|
||||
any extra expressions computed by perf stat.
|
||||
|
||||
--deprecated::
|
||||
Print deprecated events. By default the deprecated events are hidden.
|
||||
|
||||
[[EVENT_MODIFIERS]]
|
||||
EVENT MODIFIERS
|
||||
---------------
|
||||
|
|
|
@ -26,6 +26,7 @@ int cmd_list(int argc, const char **argv)
|
|||
int i;
|
||||
bool raw_dump = false;
|
||||
bool long_desc_flag = false;
|
||||
bool deprecated = false;
|
||||
struct option list_options[] = {
|
||||
OPT_BOOLEAN(0, "raw-dump", &raw_dump, "Dump raw events"),
|
||||
OPT_BOOLEAN('d', "desc", &desc_flag,
|
||||
|
@ -34,6 +35,8 @@ int cmd_list(int argc, const char **argv)
|
|||
"Print longer event descriptions."),
|
||||
OPT_BOOLEAN(0, "details", &details_flag,
|
||||
"Print information on the perf event names and expressions used internally by events."),
|
||||
OPT_BOOLEAN(0, "deprecated", &deprecated,
|
||||
"Print deprecated events."),
|
||||
OPT_INCR(0, "debug", &verbose,
|
||||
"Enable debugging output"),
|
||||
OPT_END()
|
||||
|
@ -55,7 +58,7 @@ int cmd_list(int argc, const char **argv)
|
|||
|
||||
if (argc == 0) {
|
||||
print_events(NULL, raw_dump, !desc_flag, long_desc_flag,
|
||||
details_flag);
|
||||
details_flag, deprecated);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -78,7 +81,8 @@ int cmd_list(int argc, const char **argv)
|
|||
print_hwcache_events(NULL, raw_dump);
|
||||
else if (strcmp(argv[i], "pmu") == 0)
|
||||
print_pmu_events(NULL, raw_dump, !desc_flag,
|
||||
long_desc_flag, details_flag);
|
||||
long_desc_flag, details_flag,
|
||||
deprecated);
|
||||
else if (strcmp(argv[i], "sdt") == 0)
|
||||
print_sdt_events(NULL, NULL, raw_dump);
|
||||
else if (strcmp(argv[i], "metric") == 0 || strcmp(argv[i], "metrics") == 0)
|
||||
|
@ -91,7 +95,8 @@ int cmd_list(int argc, const char **argv)
|
|||
if (sep == NULL) {
|
||||
print_events(argv[i], raw_dump, !desc_flag,
|
||||
long_desc_flag,
|
||||
details_flag);
|
||||
details_flag,
|
||||
deprecated);
|
||||
continue;
|
||||
}
|
||||
sep_idx = sep - argv[i];
|
||||
|
@ -117,7 +122,8 @@ int cmd_list(int argc, const char **argv)
|
|||
print_hwcache_events(s, raw_dump);
|
||||
print_pmu_events(s, raw_dump, !desc_flag,
|
||||
long_desc_flag,
|
||||
details_flag);
|
||||
details_flag,
|
||||
deprecated);
|
||||
print_tracepoint_events(NULL, s, raw_dump);
|
||||
print_sdt_events(NULL, s, raw_dump);
|
||||
metricgroup__print(true, true, s, raw_dump, details_flag);
|
||||
|
|
|
@ -322,7 +322,8 @@ static int print_events_table_entry(void *data, char *name, char *event,
|
|||
char *desc, char *long_desc,
|
||||
char *pmu, char *unit, char *perpkg,
|
||||
char *metric_expr,
|
||||
char *metric_name, char *metric_group)
|
||||
char *metric_name, char *metric_group,
|
||||
char *deprecated)
|
||||
{
|
||||
struct perf_entry_data *pd = data;
|
||||
FILE *outfp = pd->outfp;
|
||||
|
@ -354,6 +355,8 @@ static int print_events_table_entry(void *data, char *name, char *event,
|
|||
fprintf(outfp, "\t.metric_name = \"%s\",\n", metric_name);
|
||||
if (metric_group)
|
||||
fprintf(outfp, "\t.metric_group = \"%s\",\n", metric_group);
|
||||
if (deprecated)
|
||||
fprintf(outfp, "\t.deprecated = \"%s\",\n", deprecated);
|
||||
fprintf(outfp, "},\n");
|
||||
|
||||
return 0;
|
||||
|
@ -371,6 +374,7 @@ struct event_struct {
|
|||
char *metric_expr;
|
||||
char *metric_name;
|
||||
char *metric_group;
|
||||
char *deprecated;
|
||||
};
|
||||
|
||||
#define ADD_EVENT_FIELD(field) do { if (field) { \
|
||||
|
@ -398,6 +402,7 @@ struct event_struct {
|
|||
op(metric_expr); \
|
||||
op(metric_name); \
|
||||
op(metric_group); \
|
||||
op(deprecated); \
|
||||
} while (0)
|
||||
|
||||
static LIST_HEAD(arch_std_events);
|
||||
|
@ -416,7 +421,8 @@ static void free_arch_std_events(void)
|
|||
static int save_arch_std_events(void *data, char *name, char *event,
|
||||
char *desc, char *long_desc, char *pmu,
|
||||
char *unit, char *perpkg, char *metric_expr,
|
||||
char *metric_name, char *metric_group)
|
||||
char *metric_name, char *metric_group,
|
||||
char *deprecated)
|
||||
{
|
||||
struct event_struct *es;
|
||||
|
||||
|
@ -479,7 +485,8 @@ static int
|
|||
try_fixup(const char *fn, char *arch_std, char **event, char **desc,
|
||||
char **name, char **long_desc, char **pmu, char **filter,
|
||||
char **perpkg, char **unit, char **metric_expr, char **metric_name,
|
||||
char **metric_group, unsigned long long eventcode)
|
||||
char **metric_group, unsigned long long eventcode,
|
||||
char **deprecated)
|
||||
{
|
||||
/* try to find matching event from arch standard values */
|
||||
struct event_struct *es;
|
||||
|
@ -507,7 +514,8 @@ int json_events(const char *fn,
|
|||
char *long_desc,
|
||||
char *pmu, char *unit, char *perpkg,
|
||||
char *metric_expr,
|
||||
char *metric_name, char *metric_group),
|
||||
char *metric_name, char *metric_group,
|
||||
char *deprecated),
|
||||
void *data)
|
||||
{
|
||||
int err;
|
||||
|
@ -536,6 +544,7 @@ int json_events(const char *fn,
|
|||
char *metric_expr = NULL;
|
||||
char *metric_name = NULL;
|
||||
char *metric_group = NULL;
|
||||
char *deprecated = NULL;
|
||||
char *arch_std = NULL;
|
||||
unsigned long long eventcode = 0;
|
||||
struct msrmap *msr = NULL;
|
||||
|
@ -614,6 +623,8 @@ int json_events(const char *fn,
|
|||
addfield(map, &unit, "", "", val);
|
||||
} else if (json_streq(map, field, "PerPkg")) {
|
||||
addfield(map, &perpkg, "", "", val);
|
||||
} else if (json_streq(map, field, "Deprecated")) {
|
||||
addfield(map, &deprecated, "", "", val);
|
||||
} else if (json_streq(map, field, "MetricName")) {
|
||||
addfield(map, &metric_name, "", "", val);
|
||||
} else if (json_streq(map, field, "MetricGroup")) {
|
||||
|
@ -658,12 +669,14 @@ int json_events(const char *fn,
|
|||
err = try_fixup(fn, arch_std, &event, &desc, &name,
|
||||
&long_desc, &pmu, &filter, &perpkg,
|
||||
&unit, &metric_expr, &metric_name,
|
||||
&metric_group, eventcode);
|
||||
&metric_group, eventcode,
|
||||
&deprecated);
|
||||
if (err)
|
||||
goto free_strings;
|
||||
}
|
||||
err = func(data, name, real_event(name, event), desc, long_desc,
|
||||
pmu, unit, perpkg, metric_expr, metric_name, metric_group);
|
||||
pmu, unit, perpkg, metric_expr, metric_name,
|
||||
metric_group, deprecated);
|
||||
free_strings:
|
||||
free(event);
|
||||
free(desc);
|
||||
|
@ -673,6 +686,7 @@ free_strings:
|
|||
free(pmu);
|
||||
free(filter);
|
||||
free(perpkg);
|
||||
free(deprecated);
|
||||
free(unit);
|
||||
free(metric_expr);
|
||||
free(metric_name);
|
||||
|
|
|
@ -7,7 +7,8 @@ int json_events(const char *fn,
|
|||
char *long_desc,
|
||||
char *pmu,
|
||||
char *unit, char *perpkg, char *metric_expr,
|
||||
char *metric_name, char *metric_group),
|
||||
char *metric_name, char *metric_group,
|
||||
char *deprecated),
|
||||
void *data);
|
||||
char *get_cpu_str(void);
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ struct pmu_event {
|
|||
const char *metric_expr;
|
||||
const char *metric_name;
|
||||
const char *metric_group;
|
||||
const char *deprecated;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -2600,7 +2600,7 @@ out_enomem:
|
|||
* Print the help text for the event symbols:
|
||||
*/
|
||||
void print_events(const char *event_glob, bool name_only, bool quiet_flag,
|
||||
bool long_desc, bool details_flag)
|
||||
bool long_desc, bool details_flag, bool deprecated)
|
||||
{
|
||||
print_symbol_events(event_glob, PERF_TYPE_HARDWARE,
|
||||
event_symbols_hw, PERF_COUNT_HW_MAX, name_only);
|
||||
|
@ -2612,7 +2612,7 @@ void print_events(const char *event_glob, bool name_only, bool quiet_flag,
|
|||
print_hwcache_events(event_glob, name_only);
|
||||
|
||||
print_pmu_events(event_glob, name_only, quiet_flag, long_desc,
|
||||
details_flag);
|
||||
details_flag, deprecated);
|
||||
|
||||
if (event_glob != NULL)
|
||||
return;
|
||||
|
|
|
@ -195,7 +195,7 @@ void parse_events_evlist_error(struct parse_events_state *parse_state,
|
|||
int idx, const char *str);
|
||||
|
||||
void print_events(const char *event_glob, bool name_only, bool quiet,
|
||||
bool long_desc, bool details_flag);
|
||||
bool long_desc, bool details_flag, bool deprecated);
|
||||
|
||||
struct event_symbol {
|
||||
const char *symbol;
|
||||
|
|
|
@ -308,7 +308,8 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
|
|||
char *long_desc, char *topic,
|
||||
char *unit, char *perpkg,
|
||||
char *metric_expr,
|
||||
char *metric_name)
|
||||
char *metric_name,
|
||||
char *deprecated)
|
||||
{
|
||||
struct parse_events_term *term;
|
||||
struct perf_pmu_alias *alias;
|
||||
|
@ -325,6 +326,7 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
|
|||
alias->unit[0] = '\0';
|
||||
alias->per_pkg = false;
|
||||
alias->snapshot = false;
|
||||
alias->deprecated = false;
|
||||
|
||||
ret = parse_events_terms(&alias->terms, val);
|
||||
if (ret) {
|
||||
|
@ -379,6 +381,9 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
|
|||
alias->per_pkg = perpkg && sscanf(perpkg, "%d", &num) == 1 && num == 1;
|
||||
alias->str = strdup(newval);
|
||||
|
||||
if (deprecated)
|
||||
alias->deprecated = true;
|
||||
|
||||
if (!perf_pmu_merge_alias(alias, list))
|
||||
list_add_tail(&alias->list, list);
|
||||
|
||||
|
@ -400,7 +405,7 @@ static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FI
|
|||
strim(buf);
|
||||
|
||||
return __perf_pmu__new_alias(list, dir, name, NULL, buf, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL);
|
||||
NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
static inline bool pmu_alias_info_file(char *name)
|
||||
|
@ -787,7 +792,8 @@ new_alias:
|
|||
(char *)pe->long_desc, (char *)pe->topic,
|
||||
(char *)pe->unit, (char *)pe->perpkg,
|
||||
(char *)pe->metric_expr,
|
||||
(char *)pe->metric_name);
|
||||
(char *)pe->metric_name,
|
||||
(char *)pe->deprecated);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1383,7 +1389,7 @@ static void wordwrap(char *s, int start, int max, int corr)
|
|||
}
|
||||
|
||||
void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
|
||||
bool long_desc, bool details_flag)
|
||||
bool long_desc, bool details_flag, bool deprecated)
|
||||
{
|
||||
struct perf_pmu *pmu;
|
||||
struct perf_pmu_alias *alias;
|
||||
|
@ -1414,6 +1420,9 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
|
|||
format_alias(buf, sizeof(buf), pmu, alias);
|
||||
bool is_cpu = !strcmp(pmu->name, "cpu");
|
||||
|
||||
if (alias->deprecated && !deprecated)
|
||||
continue;
|
||||
|
||||
if (event_glob != NULL &&
|
||||
!(strglobmatch_nocase(name, event_glob) ||
|
||||
(!is_cpu && strglobmatch_nocase(alias->name,
|
||||
|
|
|
@ -57,6 +57,7 @@ struct perf_pmu_alias {
|
|||
double scale;
|
||||
bool per_pkg;
|
||||
bool snapshot;
|
||||
bool deprecated;
|
||||
char *metric_expr;
|
||||
char *metric_name;
|
||||
};
|
||||
|
@ -85,7 +86,8 @@ int perf_pmu__format_parse(char *dir, struct list_head *head);
|
|||
struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
|
||||
|
||||
void print_pmu_events(const char *event_glob, bool name_only, bool quiet,
|
||||
bool long_desc, bool details_flag);
|
||||
bool long_desc, bool details_flag,
|
||||
bool deprecated);
|
||||
bool pmu_have_event(const char *pname, const char *name);
|
||||
|
||||
int perf_pmu__scan_file(struct perf_pmu *pmu, const char *name, const char *fmt, ...) __scanf(3, 4);
|
||||
|
|
Загрузка…
Ссылка в новой задаче