]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
perf list: Add debug support for outputing alias string
authorAndi Kleen <ak@linux.intel.com>
Sat, 28 Jan 2017 02:03:40 +0000 (18:03 -0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 8 Feb 2017 11:55:04 +0000 (08:55 -0300)
For debugging and testing it is useful to see the converted alias
string. Add support to perf stat/record and perf list to print the alias
conversion. The text string is saved in the alias structure.  For perf
stat/record it is folded into the normal -v. For perf list -v was taken,
so we use --debug.

Before:

% perf list
...
cache:
  l1d.replacement
       [L1D data line replacements]
  l1d_pend_miss.fb_full
       [Cycles a demand request was blocked due to Fill Buffers inavailability]

After

% perf list --debug
...
cache:
  l1d.replacement
       [L1D data line replacements]
        cpu/umask=0x1,period=2000003,event=0x51/
  l1d_pend_miss.fb_full
       [Cycles a demand request was blocked due to Fill Buffers inavailability]
        cpu/umask=0x2,period=2000003,cmask=1,event=0x48/

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Link: http://lkml.kernel.org/r/20170128020345.19007-6-andi@firstfloor.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-list.c
tools/perf/util/parse-events.y
tools/perf/util/pmu.c
tools/perf/util/pmu.h

index ba9322ff858bead84884e832f84dc73476c6862a..3b9d98b5feef69182a0036b3c2f57d29a3364fc9 100644 (file)
@@ -14,6 +14,7 @@
 #include "util/parse-events.h"
 #include "util/cache.h"
 #include "util/pmu.h"
+#include "util/debug.h"
 #include <subcmd/parse-options.h>
 
 static bool desc_flag = true;
@@ -29,6 +30,8 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
                            "Print extra event descriptions. --no-desc to not print."),
                OPT_BOOLEAN('v', "long-desc", &long_desc_flag,
                            "Print longer event descriptions."),
+               OPT_INCR(0, "debug", &verbose,
+                            "Enable debugging output"),
                OPT_END()
        };
        const char * const list_usage[] = {
index f3b5ec901600dc1b88b4e953aa1bd94a80a8f901..3a51963806098f7493ba34205d953e9b9c98e99b 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/types.h>
 #include "util.h"
 #include "pmu.h"
+#include "debug.h"
 #include "parse-events.h"
 #include "parse-events-bison.h"
 
@@ -254,6 +255,8 @@ PE_KERNEL_PMU_EVENT sep_dc
 
                                if (!parse_events_add_pmu(data, list,
                                                  pmu->name, head)) {
+                                       pr_debug("%s -> %s/%s/\n", $1,
+                                                pmu->name, alias->str);
                                        ok++;
                                }
 
index 8e9d00fd418ef26f8e380ebab2612e6745a7b393..82a654dec6662b1ba635b3217c31af048c815f91 100644 (file)
@@ -275,6 +275,8 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
                snprintf(alias->unit, sizeof(alias->unit), "%s", unit);
        }
        alias->per_pkg = perpkg && sscanf(perpkg, "%d", &num) == 1 && num == 1;
+       alias->str = strdup(val);
+
        list_add_tail(&alias->list, list);
 
        return 0;
@@ -1087,6 +1089,8 @@ struct sevent {
        char *name;
        char *desc;
        char *topic;
+       char *str;
+       char *pmu;
 };
 
 static int cmp_sevent(const void *a, const void *b)
@@ -1183,6 +1187,8 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
                        aliases[j].desc = long_desc ? alias->long_desc :
                                                alias->desc;
                        aliases[j].topic = alias->topic;
+                       aliases[j].str = alias->str;
+                       aliases[j].pmu = pmu->name;
                        j++;
                }
                if (pmu->selectable &&
@@ -1217,6 +1223,8 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
                        printf("%*s", 8, "[");
                        wordwrap(aliases[j].desc, 8, columns, 0);
                        printf("]\n");
+                       if (verbose)
+                               printf("%*s%s/%s/\n", 8, "", aliases[j].pmu, aliases[j].str);
                } else
                        printf("  %-50s [Kernel PMU event]\n", aliases[j].name);
                printed++;
index 25712034c815ba92856a03b5d6164ff158a9ad5c..00852ddc7741b068e212adf2eb3e5e2b0c56c872 100644 (file)
@@ -43,6 +43,7 @@ struct perf_pmu_alias {
        char *desc;
        char *long_desc;
        char *topic;
+       char *str;
        struct list_head terms; /* HEAD struct parse_events_term -> list */
        struct list_head list;  /* ELEM */
        char unit[UNIT_MAX_LEN+1];