Subject: Re: [PATCH v5] perf tools: add support for libpfm4

From: Jiri Olsa <[email-masked]>
Date: Tue, 24 Mar 2020 11:24:59 +0100

On Mon, Mar 23, 2020 at 04:58:46PM -0700, Ian Rogers wrote:

SNIP

> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> index 10107747b361..31ed184566c8 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -37,6 +37,11 @@
>  #include "util/evsel_config.h"
>  #include "util/event.h"
>  
> +#ifdef HAVE_LIBPFM
> +#include <perfmon/pfmlib_perf_event.h>
> +static void print_libpfm_events(bool name_only);
> +#endif
> +
>  #define MAX_NAME_LEN 100
>  
>  #ifdef PARSER_DEBUG
> @@ -2794,6 +2799,10 @@ void print_events(const char *event_glob, bool name_only, bool quiet_flag,
>  	print_sdt_events(NULL, NULL, name_only);
>  
>  	metricgroup__print(true, true, NULL, name_only, details_flag);
> +
> +#ifdef HAVE_LIBPFM
> +	print_libpfm_events(name_only);

we should make some effort to fit this into our current list shape,
currently it looks like:

	$ perf list
	...

	TopdownL1_SMT:
	  Backend_Bound_SMT
	       [This category represents fraction of slots where no uops are being delivered due to a lack of required resources for accepting new uops in the Backend>
	  Bad_Speculation_SMT
	       [This category represents fraction of slots wasted due to incorrect speculations. SMT version; use when SMT is enabled and measuring per logical CPU]
	  Frontend_Bound_SMT
	       [This category represents fraction of slots where the processor's Frontend undersupplies its Backend. SMT version; use when SMT is enabled and measurin>
	  Retiring_SMT
	       [This category represents fraction of slots utilized by useful work i.e. issued uops that eventually get retired. SMT version; use when SMT is enabled >

	Name  : UNHALTED_CORE_CYCLES
	PMU   : ix86arch
	Desc  : count core clock cycles whenever the clock signal on the specific core is running (not halted)
	Equiv : None
	Code  : 0x3c
	Modif : PMU: [e] : edge level (may require counter-mask >= 1) (boolean)
	Modif : PMU: [i] : invert (boolean)
	Modif : PMU: [c] : counter-mask in range [0-255] (integer)
	Modif : PMU: [t] : measure any thread (boolean)
	Modif : PMU: [intx] : monitor only inside transactional memory region (boolean)
	Modif : PMU: [intxcp] : do not count occurrences inside aborted transactional memory region (boolean)
	Modif : perf_event: [u] : monitor at user level (boolean)
	Modif : perf_event: [k] : monitor at kernel level (boolean)
	Modif : perf_event: [period] : sampling period (integer)
	Modif : perf_event: [freq] : sampling frequency (Hz) (integer)
	Modif : perf_event: [excl] : exclusive access (boolean)
	Modif : perf_event: [mg] : monitor guest execution (boolean)
	Modif : perf_event: [mh] : monitor host execution (boolean)
	Modif : perf_event: [cpu] : CPU to program (integer)
	Modif : perf_event: [pinned] : pin event to counters (boolean)

it needs some header like 'libpfm events:' and then
probably just name and doc for basic list and more
verbose for -v

jirka