394 lines
14 KiB
Diff
394 lines
14 KiB
Diff
From 2670fb710163524ae338f2736fe240abb18e9af8 Mon Sep 17 00:00:00 2001
|
|
From: Jin Yao <yao.jin@linux.intel.com>
|
|
Date: Tue, 15 Oct 2019 10:53:57 +0800
|
|
Subject: [PATCH 034/201] perf list: Hide deprecated events by default
|
|
|
|
mainline inclusion
|
|
from mainline-v5.5-rc1
|
|
commit a7f6c8c81afdd6d24eb12558f2fb66901207d349
|
|
category: feature
|
|
bugzilla: https://gitee.com/openeuler/kernel/issues/I8C0CX
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a7f6c8c81afdd6d24eb12558f2fb66901207d349
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
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>
|
|
Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
|
|
---
|
|
tools/perf/Documentation/perf-list.txt | 3 +++
|
|
tools/perf/builtin-list.c | 14 ++++++++++----
|
|
tools/perf/pmu-events/jevents.c | 26 ++++++++++++++++++++------
|
|
tools/perf/pmu-events/jevents.h | 3 ++-
|
|
tools/perf/pmu-events/pmu-events.h | 1 +
|
|
tools/perf/util/parse-events.c | 4 ++--
|
|
tools/perf/util/parse-events.h | 2 +-
|
|
tools/perf/util/pmu.c | 17 +++++++++++++----
|
|
tools/perf/util/pmu.h | 4 +++-
|
|
9 files changed, 55 insertions(+), 19 deletions(-)
|
|
|
|
diff --git a/tools/perf/Documentation/perf-list.txt b/tools/perf/Documentation/perf-list.txt
|
|
index 236b9b97dfdb..54d16b4d1ede 100644
|
|
--- a/tools/perf/Documentation/perf-list.txt
|
|
+++ b/tools/perf/Documentation/perf-list.txt
|
|
@@ -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
|
|
---------------
|
|
diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c
|
|
index e4606919bda9..169f1ece7c68 100644
|
|
--- a/tools/perf/builtin-list.c
|
|
+++ b/tools/perf/builtin-list.c
|
|
@@ -27,6 +27,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,
|
|
@@ -35,6 +36,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()
|
|
@@ -56,7 +59,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;
|
|
}
|
|
|
|
@@ -79,7 +82,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)
|
|
@@ -92,7 +96,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];
|
|
@@ -118,7 +123,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, NULL, raw_dump, details_flag);
|
|
diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
|
|
index b6960ef3a553..a1eff577f002 100644
|
|
--- a/tools/perf/pmu-events/jevents.c
|
|
+++ b/tools/perf/pmu-events/jevents.c
|
|
@@ -323,7 +323,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;
|
|
@@ -355,6 +356,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;
|
|
@@ -372,6 +375,7 @@ struct event_struct {
|
|
char *metric_expr;
|
|
char *metric_name;
|
|
char *metric_group;
|
|
+ char *deprecated;
|
|
};
|
|
|
|
#define ADD_EVENT_FIELD(field) do { if (field) { \
|
|
@@ -399,6 +403,7 @@ struct event_struct {
|
|
op(metric_expr); \
|
|
op(metric_name); \
|
|
op(metric_group); \
|
|
+ op(deprecated); \
|
|
} while (0)
|
|
|
|
static LIST_HEAD(arch_std_events);
|
|
@@ -417,7 +422,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;
|
|
|
|
@@ -480,7 +486,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;
|
|
@@ -508,7 +515,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;
|
|
@@ -537,6 +545,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;
|
|
@@ -615,6 +624,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")) {
|
|
@@ -659,12 +670,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);
|
|
@@ -674,6 +687,7 @@ int json_events(const char *fn,
|
|
free(pmu);
|
|
free(filter);
|
|
free(perpkg);
|
|
+ free(deprecated);
|
|
free(unit);
|
|
free(metric_expr);
|
|
free(metric_name);
|
|
diff --git a/tools/perf/pmu-events/jevents.h b/tools/perf/pmu-events/jevents.h
|
|
index 4684c673c445..5cda49a42143 100644
|
|
--- a/tools/perf/pmu-events/jevents.h
|
|
+++ b/tools/perf/pmu-events/jevents.h
|
|
@@ -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);
|
|
|
|
diff --git a/tools/perf/pmu-events/pmu-events.h b/tools/perf/pmu-events/pmu-events.h
|
|
index 92a4d15ee0b9..caeb577d36c9 100644
|
|
--- a/tools/perf/pmu-events/pmu-events.h
|
|
+++ b/tools/perf/pmu-events/pmu-events.h
|
|
@@ -17,6 +17,7 @@ struct pmu_event {
|
|
const char *metric_expr;
|
|
const char *metric_name;
|
|
const char *metric_group;
|
|
+ const char *deprecated;
|
|
};
|
|
|
|
/*
|
|
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
|
|
index c0a13cf41ef6..8b9b13b6e901 100644
|
|
--- a/tools/perf/util/parse-events.c
|
|
+++ b/tools/perf/util/parse-events.c
|
|
@@ -2555,7 +2555,7 @@ void print_symbol_events(const char *event_glob, unsigned type,
|
|
* 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);
|
|
@@ -2567,7 +2567,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;
|
|
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
|
|
index 58c6730526f9..52be0b3b26f7 100644
|
|
--- a/tools/perf/util/parse-events.h
|
|
+++ b/tools/perf/util/parse-events.h
|
|
@@ -192,7 +192,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;
|
|
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
|
|
index 147989e2bff0..2d06db85c135 100644
|
|
--- a/tools/perf/util/pmu.c
|
|
+++ b/tools/perf/util/pmu.c
|
|
@@ -307,7 +307,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;
|
|
@@ -324,6 +325,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) {
|
|
@@ -378,6 +380,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);
|
|
|
|
@@ -399,7 +404,7 @@ static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FI
|
|
rtrim(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)
|
|
@@ -825,7 +830,8 @@ static void pmu_add_cpu_aliases(struct list_head *head, struct perf_pmu *pmu)
|
|
(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);
|
|
}
|
|
}
|
|
|
|
@@ -1407,7 +1413,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;
|
|
@@ -1438,6 +1444,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,
|
|
diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
|
|
index ea0e7c36eae9..a7f1d60c288b 100644
|
|
--- a/tools/perf/util/pmu.h
|
|
+++ b/tools/perf/util/pmu.h
|
|
@@ -55,6 +55,7 @@ struct perf_pmu_alias {
|
|
double scale;
|
|
bool per_pkg;
|
|
bool snapshot;
|
|
+ bool deprecated;
|
|
char *metric_expr;
|
|
char *metric_name;
|
|
};
|
|
@@ -83,7 +84,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);
|
|
--
|
|
2.27.0
|
|
|