[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <69db965c-fdf3-0114-7317-8bf430b041a1@linux.intel.com>
Date: Fri, 18 Oct 2019 22:09:44 +0800
From: "Jin, Yao" <yao.jin@...ux.intel.com>
To: acme@...nel.org, jolsa@...nel.org, peterz@...radead.org,
mingo@...hat.com, alexander.shishkin@...ux.intel.com
Cc: Linux-kernel@...r.kernel.org, ak@...ux.intel.com,
kan.liang@...el.com, yao.jin@...el.com
Subject: Re: [PATCH] perf list: Hide deprecated events by default
Since now we go back to this version, can this patch be accepted?
Thanks
Jin Yao
On 10/15/2019 10:53 AM, Jin Yao wrote:
> 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@...ux.intel.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 18ed1b0fceb3..6345db33c533 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 08e62ae9d37e..965ef017496f 100644
> --- a/tools/perf/builtin-list.c
> +++ b/tools/perf/builtin-list.c
> @@ -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);
> diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
> index e2837260ca4d..7d69727f44bd 100644
> --- a/tools/perf/pmu-events/jevents.c
> +++ b/tools/perf/pmu-events/jevents.c
> @@ -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 @@ 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 b5e2adef49de..db882f630f7e 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -2600,7 +2600,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);
> @@ -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;
> diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
> index 616ca1eda0eb..769e07cddaa2 100644
> --- a/tools/perf/util/parse-events.h
> +++ b/tools/perf/util/parse-events.h
> @@ -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;
> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
> index 5608da82ad23..adbe97e941dd 100644
> --- a/tools/perf/util/pmu.c
> +++ b/tools/perf/util/pmu.c
> @@ -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 @@ 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);
> }
> }
>
> @@ -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,
> diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
> index f36ade6df76d..3e8cd31a89cc 100644
> --- a/tools/perf/util/pmu.h
> +++ b/tools/perf/util/pmu.h
> @@ -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);
>
Powered by blists - more mailing lists