Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2361024 authored by Andi Kleen's avatar Andi Kleen Committed by Arnaldo Carvalho de Melo
Browse files

perf list: Add debug support for outputing alias string



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: default avatarAndi Kleen <ak@linux.intel.com>
Tested-by: default avatarArnaldo 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 231bb2aa
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,7 @@
#include "util/parse-events.h"
#include "util/parse-events.h"
#include "util/cache.h"
#include "util/cache.h"
#include "util/pmu.h"
#include "util/pmu.h"
#include "util/debug.h"
#include <subcmd/parse-options.h>
#include <subcmd/parse-options.h>


static bool desc_flag = true;
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."),
			    "Print extra event descriptions. --no-desc to not print."),
		OPT_BOOLEAN('v', "long-desc", &long_desc_flag,
		OPT_BOOLEAN('v', "long-desc", &long_desc_flag,
			    "Print longer event descriptions."),
			    "Print longer event descriptions."),
		OPT_INCR(0, "debug", &verbose,
			     "Enable debugging output"),
		OPT_END()
		OPT_END()
	};
	};
	const char * const list_usage[] = {
	const char * const list_usage[] = {
+3 −0
Original line number Original line Diff line number Diff line
@@ -13,6 +13,7 @@
#include <linux/types.h>
#include <linux/types.h>
#include "util.h"
#include "util.h"
#include "pmu.h"
#include "pmu.h"
#include "debug.h"
#include "parse-events.h"
#include "parse-events.h"
#include "parse-events-bison.h"
#include "parse-events-bison.h"


@@ -254,6 +255,8 @@ PE_KERNEL_PMU_EVENT sep_dc


				if (!parse_events_add_pmu(data, list,
				if (!parse_events_add_pmu(data, list,
						  pmu->name, head)) {
						  pmu->name, head)) {
					pr_debug("%s -> %s/%s/\n", $1,
						 pmu->name, alias->str);
					ok++;
					ok++;
				}
				}


+8 −0
Original line number Original line Diff line number Diff line
@@ -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);
		snprintf(alias->unit, sizeof(alias->unit), "%s", unit);
	}
	}
	alias->per_pkg = perpkg && sscanf(perpkg, "%d", &num) == 1 && num == 1;
	alias->per_pkg = perpkg && sscanf(perpkg, "%d", &num) == 1 && num == 1;
	alias->str = strdup(val);

	list_add_tail(&alias->list, list);
	list_add_tail(&alias->list, list);


	return 0;
	return 0;
@@ -1087,6 +1089,8 @@ struct sevent {
	char *name;
	char *name;
	char *desc;
	char *desc;
	char *topic;
	char *topic;
	char *str;
	char *pmu;
};
};


static int cmp_sevent(const void *a, const void *b)
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 :
			aliases[j].desc = long_desc ? alias->long_desc :
						alias->desc;
						alias->desc;
			aliases[j].topic = alias->topic;
			aliases[j].topic = alias->topic;
			aliases[j].str = alias->str;
			aliases[j].pmu = pmu->name;
			j++;
			j++;
		}
		}
		if (pmu->selectable &&
		if (pmu->selectable &&
@@ -1217,6 +1223,8 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
			printf("%*s", 8, "[");
			printf("%*s", 8, "[");
			wordwrap(aliases[j].desc, 8, columns, 0);
			wordwrap(aliases[j].desc, 8, columns, 0);
			printf("]\n");
			printf("]\n");
			if (verbose)
				printf("%*s%s/%s/\n", 8, "", aliases[j].pmu, aliases[j].str);
		} else
		} else
			printf("  %-50s [Kernel PMU event]\n", aliases[j].name);
			printf("  %-50s [Kernel PMU event]\n", aliases[j].name);
		printed++;
		printed++;
+1 −0
Original line number Original line Diff line number Diff line
@@ -43,6 +43,7 @@ struct perf_pmu_alias {
	char *desc;
	char *desc;
	char *long_desc;
	char *long_desc;
	char *topic;
	char *topic;
	char *str;
	struct list_head terms; /* HEAD struct parse_events_term -> list */
	struct list_head terms; /* HEAD struct parse_events_term -> list */
	struct list_head list;  /* ELEM */
	struct list_head list;  /* ELEM */
	char unit[UNIT_MAX_LEN+1];
	char unit[UNIT_MAX_LEN+1];