All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Agustin Vega-Frias <agustinv@codeaurora.org>
Cc: Andi Kleen <ak@linux.intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	timur@codeaurora.org, linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	Namhyung Kim <namhyung@kernel.org>, Jiri Olsa <jolsa@redhat.com>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [RFC V3 1/3] perf, tools: Support wildcards on pmu name in dynamic pmu events
Date: Wed, 7 Mar 2018 13:02:24 -0300	[thread overview]
Message-ID: <20180307160224.GN3701@kernel.org> (raw)
In-Reply-To: <1520345084-42646-2-git-send-email-agustinv@codeaurora.org>

Em Tue, Mar 06, 2018 at 09:04:42AM -0500, Agustin Vega-Frias escreveu:
> Starting on v4.12 event parsing code for dynamic pmu events already
> supports prefix-based matching of multiple pmus when creating dynamic
> events. E.g., in a system with the following dynamic pmus:
> 
>     mypmu_0
>     mypmu_1
>     mypmu_2
>     mypmu_4
> 
> passing mypmu/<config>/ as an event spec will result in the creation
> of the event in all of the pmus. This change expands this matching
> through the use of fnmatch so glob-like expressions can be used to
> create events in multiple pmus. E.g., in the system described above
> if a user only wants to create the event in mypmu_0 and mypmu_1,
> mypmu_[01]/<config>/ can be passed.
> 
> Change-Id: Icb25653fc5d5239c20f3bffdfdf4ab4c9c9bb20b
> Signed-off-by: Agustin Vega-Frias <agustinv@codeaurora.org>
> ---
>  tools/perf/Documentation/perf-list.txt |  8 +++++++-
>  tools/perf/Documentation/perf-stat.txt | 13 +++++++++++++
>  tools/perf/util/parse-events.l         |  2 +-
>  tools/perf/util/parse-events.y         | 19 ++++++++++++-------
>  4 files changed, 33 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/perf/Documentation/perf-list.txt b/tools/perf/Documentation/perf-list.txt
> index e2a897a..2549c34 100644
> --- a/tools/perf/Documentation/perf-list.txt
> +++ b/tools/perf/Documentation/perf-list.txt
> @@ -141,7 +141,13 @@ on the first memory controller on socket 0 of a Intel Xeon system
>  
>  Each memory controller has its own PMU.  Measuring the complete system
>  bandwidth would require specifying all imc PMUs (see perf list output),
> -and adding the values together.
> +and adding the values together. To simplify creation of multiple events,
> +prefix and glob matching is supported in the PMU name, and the prefix
> +'uncore_' is also ignored when performing the match. So the command above
> +can be expanded to all memory controllers by using the syntaxes:
> +
> +  perf stat -C 0 -a imc/cas_count_read/,imc/cas_count_write/ -I 1000 ...
> +  perf stat -C 0 -a *imc*/cas_count_read/,*imc*/cas_count_write/ -I 1000 ...
>  
>  This example measures the combined core power every second
>  
> diff --git a/tools/perf/Documentation/perf-stat.txt b/tools/perf/Documentation/perf-stat.txt
> index 823fce7..5ee954f 100644
> --- a/tools/perf/Documentation/perf-stat.txt
> +++ b/tools/perf/Documentation/perf-stat.txt
> @@ -49,6 +49,13 @@ report::
>  	  parameters are defined by corresponding entries in
>  	  /sys/bus/event_source/devices/<pmu>/format/*
>  
> +	Note that the last two syntaxes support prefix and glob matching in
> +	the PMU name to simplify creation of events accross multiple instances
> +	of the same type of PMU in large systems (e.g. memory controller PMUs).
> +	Multiple PMU instances are typical for uncore PMUs, so the prefix
> +	'uncore_' is also ignored when performing this match.
> +
> +
>  -i::
>  --no-inherit::
>          child tasks do not inherit counters
> @@ -246,6 +253,12 @@ taskset.
>  --no-merge::
>  Do not merge results from same PMUs.
>  
> +When multiple events are created from a single event alias, stat will,
> +by default, aggregate the event counts and show the result in a single
> +row. This option disables that behavior and shows the individual events
> +and counts. Aliases are listed immediately after the Kernel PMU events
> +by perf list.
> +
>  --smi-cost::
>  Measure SMI cost if msr/aperf/ and msr/smi/ events are supported.
>  
> diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> index 655ecff..a1a01b1 100644
> --- a/tools/perf/util/parse-events.l
> +++ b/tools/perf/util/parse-events.l
> @@ -175,7 +175,7 @@ bpf_source	[^,{}]+\.c[a-zA-Z0-9._]*
>  num_dec		[0-9]+
>  num_hex		0x[a-fA-F0-9]+
>  num_raw_hex	[a-fA-F0-9]+
> -name		[a-zA-Z_*?][a-zA-Z0-9_*?.]*
> +name		[a-zA-Z_*?\[\]][a-zA-Z0-9_*?.\[\]]*
>  name_minus	[a-zA-Z_*?][a-zA-Z0-9\-_*?.:]*
>  drv_cfg_term	[a-zA-Z0-9_\.]+(=[a-zA-Z0-9_*?\.:]+)?
>  /* If you add a modifier you need to update check_modifier() */
> diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
> index e81a20e..316ac07 100644
> --- a/tools/perf/util/parse-events.y
> +++ b/tools/perf/util/parse-events.y
> @@ -8,6 +8,7 @@
>  
>  #define YYDEBUG 1
>  
> +#include <fnmatch.h>
>  #include <linux/compiler.h>
>  #include <linux/list.h>
>  #include <linux/types.h>
> @@ -234,21 +235,25 @@ PE_NAME opt_event_config
>  	if (parse_events_add_pmu(_parse_state, list, $1, $2)) {
>  		struct perf_pmu *pmu = NULL;
>  		int ok = 0;
> +		char *pattern;
>  
> -		while ((pmu = perf_pmu__scan(pmu)) != NULL) {
> -			char *name = pmu->name;
> +		if (asprintf(&pattern, "?(uncore_)%s*", $1) < 0)
> +			YYABORT;
>  
> -			if (!strncmp(name, "uncore_", 7) &&
> -			    strncmp($1, "uncore_", 7))
> -				name += 7;
> -			if (!strncmp($1, name, strlen($1))) {
> -				if (parse_events_copy_term_list(orig_terms, &terms))
> +		while ((pmu = perf_pmu__scan(pmu)) != NULL) {
> +			if (!fnmatch(pattern, pmu->name, FNM_EXTMATCH)) {
> +				if (parse_events_copy_term_list(orig_terms, &terms)) {
> +					free(pattern);

This breaks the build in at least Alpine Linux 3.4, 3.5 and 3.6 and android-ndk:r15c-arm

Alpine 3.6 build failure:

  CC       /tmp/build/perf/util/parse-events-bison.o
util/parse-events.y: In function 'parse_events_parse':
util/parse-events.y:244:37: error: 'FNM_EXTMATCH' undeclared (first use in this function)
    if (!fnmatch(pattern, pmu->name, FNM_EXTMATCH)) {
                                     ^~~~~~~~~~~~
util/parse-events.y:244:37: note: each undeclared identifier is reported only once for each function it appears in
  CC       /tmp/build/perf/bench/mem-functions.o
mv: can't rename '/tmp/build/perf/util/.parse-events-bison.o.tmp': No such file or directory
make[4]: *** [/git/linux/tools/build/Makefile.build:96: /tmp/build/perf/util/parse-events-bison.o] Error 1
make[3]: *** [/git/linux/tools/build/Makefile.build:139: util] Error 2
make[2]: *** [Makefile.perf:623: /tmp/build/perf/libperf-in.o] Error 2
make[2]: *** Waiting for unfinished jobs....

Android NDK r15c ARM, cross built from, IIRC, Fedora 24:

 CC       /tmp/build/perf/util/parse-events-bison.o
util/parse-events.y: In function 'parse_events_parse':
util/parse-events.y:244:37: error: 'FNM_EXTMATCH' undeclared (first use in this function)
    if (!fnmatch(pattern, pmu->name, FNM_EXTMATCH)) {
                                     ^
util/parse-events.y:244:37: note: each undeclared identifier is reported only once for each function it appears in
mv: cannot stat '/tmp/build/perf/util/.parse-events-bison.o.tmp': No such file or directory
make[4]: *** [/git/linux/tools/build/Makefile.build:96: /tmp/build/perf/util/parse-events-bison.o] Error 1
make[4]: *** Waiting for unfinished jobs....
  CC       /tmp/build/perf/builtin-kmem.o
make[3]: *** [/git/linux/tools/build/Makefile.build:139: util] Error 2
make[2]: *** [Makefile.perf:623: /tmp/build/perf/libperf-in.o] Error 2


Probably others, I'll investigate later, feel free to do it if you have
the time now :-)

Extra info:


   1    46.29 alpine:3.4                    : FAIL gcc (Alpine 5.3.0) 5.3.0
   2    53.37 alpine:3.5                    : FAIL gcc (Alpine 6.2.1) 6.2.1 20160822
   3    48.42 alpine:3.6                    : FAIL gcc (Alpine 6.3.0) 6.3.0
   4    35.88 alpine:edge                   : FAIL gcc (Alpine 6.4.0) 6.4.0
   5    96.79 amazonlinux:1                 : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
   6   116.40 amazonlinux:2                 : Ok   gcc (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2)
   7    34.30 android-ndk:r12b-arm          : FAIL arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
   8    33.69 android-ndk:r15c-arm          : FAIL arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
   9    60.50 centos:5                      : Ok   gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55)
  10    88.54 centos:6                      : Ok   gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
  11   108.89 centos:7                      : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)


The builds are still ongoing.

- Arnaldo

WARNING: multiple messages have this Message-ID (diff)
From: acme@kernel.org (Arnaldo Carvalho de Melo)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC V3 1/3] perf, tools: Support wildcards on pmu name in dynamic pmu events
Date: Wed, 7 Mar 2018 13:02:24 -0300	[thread overview]
Message-ID: <20180307160224.GN3701@kernel.org> (raw)
In-Reply-To: <1520345084-42646-2-git-send-email-agustinv@codeaurora.org>

Em Tue, Mar 06, 2018 at 09:04:42AM -0500, Agustin Vega-Frias escreveu:
> Starting on v4.12 event parsing code for dynamic pmu events already
> supports prefix-based matching of multiple pmus when creating dynamic
> events. E.g., in a system with the following dynamic pmus:
> 
>     mypmu_0
>     mypmu_1
>     mypmu_2
>     mypmu_4
> 
> passing mypmu/<config>/ as an event spec will result in the creation
> of the event in all of the pmus. This change expands this matching
> through the use of fnmatch so glob-like expressions can be used to
> create events in multiple pmus. E.g., in the system described above
> if a user only wants to create the event in mypmu_0 and mypmu_1,
> mypmu_[01]/<config>/ can be passed.
> 
> Change-Id: Icb25653fc5d5239c20f3bffdfdf4ab4c9c9bb20b
> Signed-off-by: Agustin Vega-Frias <agustinv@codeaurora.org>
> ---
>  tools/perf/Documentation/perf-list.txt |  8 +++++++-
>  tools/perf/Documentation/perf-stat.txt | 13 +++++++++++++
>  tools/perf/util/parse-events.l         |  2 +-
>  tools/perf/util/parse-events.y         | 19 ++++++++++++-------
>  4 files changed, 33 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/perf/Documentation/perf-list.txt b/tools/perf/Documentation/perf-list.txt
> index e2a897a..2549c34 100644
> --- a/tools/perf/Documentation/perf-list.txt
> +++ b/tools/perf/Documentation/perf-list.txt
> @@ -141,7 +141,13 @@ on the first memory controller on socket 0 of a Intel Xeon system
>  
>  Each memory controller has its own PMU.  Measuring the complete system
>  bandwidth would require specifying all imc PMUs (see perf list output),
> -and adding the values together.
> +and adding the values together. To simplify creation of multiple events,
> +prefix and glob matching is supported in the PMU name, and the prefix
> +'uncore_' is also ignored when performing the match. So the command above
> +can be expanded to all memory controllers by using the syntaxes:
> +
> +  perf stat -C 0 -a imc/cas_count_read/,imc/cas_count_write/ -I 1000 ...
> +  perf stat -C 0 -a *imc*/cas_count_read/,*imc*/cas_count_write/ -I 1000 ...
>  
>  This example measures the combined core power every second
>  
> diff --git a/tools/perf/Documentation/perf-stat.txt b/tools/perf/Documentation/perf-stat.txt
> index 823fce7..5ee954f 100644
> --- a/tools/perf/Documentation/perf-stat.txt
> +++ b/tools/perf/Documentation/perf-stat.txt
> @@ -49,6 +49,13 @@ report::
>  	  parameters are defined by corresponding entries in
>  	  /sys/bus/event_source/devices/<pmu>/format/*
>  
> +	Note that the last two syntaxes support prefix and glob matching in
> +	the PMU name to simplify creation of events accross multiple instances
> +	of the same type of PMU in large systems (e.g. memory controller PMUs).
> +	Multiple PMU instances are typical for uncore PMUs, so the prefix
> +	'uncore_' is also ignored when performing this match.
> +
> +
>  -i::
>  --no-inherit::
>          child tasks do not inherit counters
> @@ -246,6 +253,12 @@ taskset.
>  --no-merge::
>  Do not merge results from same PMUs.
>  
> +When multiple events are created from a single event alias, stat will,
> +by default, aggregate the event counts and show the result in a single
> +row. This option disables that behavior and shows the individual events
> +and counts. Aliases are listed immediately after the Kernel PMU events
> +by perf list.
> +
>  --smi-cost::
>  Measure SMI cost if msr/aperf/ and msr/smi/ events are supported.
>  
> diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> index 655ecff..a1a01b1 100644
> --- a/tools/perf/util/parse-events.l
> +++ b/tools/perf/util/parse-events.l
> @@ -175,7 +175,7 @@ bpf_source	[^,{}]+\.c[a-zA-Z0-9._]*
>  num_dec		[0-9]+
>  num_hex		0x[a-fA-F0-9]+
>  num_raw_hex	[a-fA-F0-9]+
> -name		[a-zA-Z_*?][a-zA-Z0-9_*?.]*
> +name		[a-zA-Z_*?\[\]][a-zA-Z0-9_*?.\[\]]*
>  name_minus	[a-zA-Z_*?][a-zA-Z0-9\-_*?.:]*
>  drv_cfg_term	[a-zA-Z0-9_\.]+(=[a-zA-Z0-9_*?\.:]+)?
>  /* If you add a modifier you need to update check_modifier() */
> diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
> index e81a20e..316ac07 100644
> --- a/tools/perf/util/parse-events.y
> +++ b/tools/perf/util/parse-events.y
> @@ -8,6 +8,7 @@
>  
>  #define YYDEBUG 1
>  
> +#include <fnmatch.h>
>  #include <linux/compiler.h>
>  #include <linux/list.h>
>  #include <linux/types.h>
> @@ -234,21 +235,25 @@ PE_NAME opt_event_config
>  	if (parse_events_add_pmu(_parse_state, list, $1, $2)) {
>  		struct perf_pmu *pmu = NULL;
>  		int ok = 0;
> +		char *pattern;
>  
> -		while ((pmu = perf_pmu__scan(pmu)) != NULL) {
> -			char *name = pmu->name;
> +		if (asprintf(&pattern, "?(uncore_)%s*", $1) < 0)
> +			YYABORT;
>  
> -			if (!strncmp(name, "uncore_", 7) &&
> -			    strncmp($1, "uncore_", 7))
> -				name += 7;
> -			if (!strncmp($1, name, strlen($1))) {
> -				if (parse_events_copy_term_list(orig_terms, &terms))
> +		while ((pmu = perf_pmu__scan(pmu)) != NULL) {
> +			if (!fnmatch(pattern, pmu->name, FNM_EXTMATCH)) {
> +				if (parse_events_copy_term_list(orig_terms, &terms)) {
> +					free(pattern);

This breaks the build in at least Alpine Linux 3.4, 3.5 and 3.6 and android-ndk:r15c-arm

Alpine 3.6 build failure:

  CC       /tmp/build/perf/util/parse-events-bison.o
util/parse-events.y: In function 'parse_events_parse':
util/parse-events.y:244:37: error: 'FNM_EXTMATCH' undeclared (first use in this function)
    if (!fnmatch(pattern, pmu->name, FNM_EXTMATCH)) {
                                     ^~~~~~~~~~~~
util/parse-events.y:244:37: note: each undeclared identifier is reported only once for each function it appears in
  CC       /tmp/build/perf/bench/mem-functions.o
mv: can't rename '/tmp/build/perf/util/.parse-events-bison.o.tmp': No such file or directory
make[4]: *** [/git/linux/tools/build/Makefile.build:96: /tmp/build/perf/util/parse-events-bison.o] Error 1
make[3]: *** [/git/linux/tools/build/Makefile.build:139: util] Error 2
make[2]: *** [Makefile.perf:623: /tmp/build/perf/libperf-in.o] Error 2
make[2]: *** Waiting for unfinished jobs....

Android NDK r15c ARM, cross built from, IIRC, Fedora 24:

 CC       /tmp/build/perf/util/parse-events-bison.o
util/parse-events.y: In function 'parse_events_parse':
util/parse-events.y:244:37: error: 'FNM_EXTMATCH' undeclared (first use in this function)
    if (!fnmatch(pattern, pmu->name, FNM_EXTMATCH)) {
                                     ^
util/parse-events.y:244:37: note: each undeclared identifier is reported only once for each function it appears in
mv: cannot stat '/tmp/build/perf/util/.parse-events-bison.o.tmp': No such file or directory
make[4]: *** [/git/linux/tools/build/Makefile.build:96: /tmp/build/perf/util/parse-events-bison.o] Error 1
make[4]: *** Waiting for unfinished jobs....
  CC       /tmp/build/perf/builtin-kmem.o
make[3]: *** [/git/linux/tools/build/Makefile.build:139: util] Error 2
make[2]: *** [Makefile.perf:623: /tmp/build/perf/libperf-in.o] Error 2


Probably others, I'll investigate later, feel free to do it if you have
the time now :-)

Extra info:


   1    46.29 alpine:3.4                    : FAIL gcc (Alpine 5.3.0) 5.3.0
   2    53.37 alpine:3.5                    : FAIL gcc (Alpine 6.2.1) 6.2.1 20160822
   3    48.42 alpine:3.6                    : FAIL gcc (Alpine 6.3.0) 6.3.0
   4    35.88 alpine:edge                   : FAIL gcc (Alpine 6.4.0) 6.4.0
   5    96.79 amazonlinux:1                 : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
   6   116.40 amazonlinux:2                 : Ok   gcc (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2)
   7    34.30 android-ndk:r12b-arm          : FAIL arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
   8    33.69 android-ndk:r15c-arm          : FAIL arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
   9    60.50 centos:5                      : Ok   gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55)
  10    88.54 centos:6                      : Ok   gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
  11   108.89 centos:7                      : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)


The builds are still ongoing.

- Arnaldo

WARNING: multiple messages have this Message-ID (diff)
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Agustin Vega-Frias <agustinv@codeaurora.org>
Cc: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>, Andi Kleen <ak@linux.intel.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	timur@codeaurora.org
Subject: Re: [RFC V3 1/3] perf, tools: Support wildcards on pmu name in dynamic pmu events
Date: Wed, 7 Mar 2018 13:02:24 -0300	[thread overview]
Message-ID: <20180307160224.GN3701@kernel.org> (raw)
In-Reply-To: <1520345084-42646-2-git-send-email-agustinv@codeaurora.org>

Em Tue, Mar 06, 2018 at 09:04:42AM -0500, Agustin Vega-Frias escreveu:
> Starting on v4.12 event parsing code for dynamic pmu events already
> supports prefix-based matching of multiple pmus when creating dynamic
> events. E.g., in a system with the following dynamic pmus:
> 
>     mypmu_0
>     mypmu_1
>     mypmu_2
>     mypmu_4
> 
> passing mypmu/<config>/ as an event spec will result in the creation
> of the event in all of the pmus. This change expands this matching
> through the use of fnmatch so glob-like expressions can be used to
> create events in multiple pmus. E.g., in the system described above
> if a user only wants to create the event in mypmu_0 and mypmu_1,
> mypmu_[01]/<config>/ can be passed.
> 
> Change-Id: Icb25653fc5d5239c20f3bffdfdf4ab4c9c9bb20b
> Signed-off-by: Agustin Vega-Frias <agustinv@codeaurora.org>
> ---
>  tools/perf/Documentation/perf-list.txt |  8 +++++++-
>  tools/perf/Documentation/perf-stat.txt | 13 +++++++++++++
>  tools/perf/util/parse-events.l         |  2 +-
>  tools/perf/util/parse-events.y         | 19 ++++++++++++-------
>  4 files changed, 33 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/perf/Documentation/perf-list.txt b/tools/perf/Documentation/perf-list.txt
> index e2a897a..2549c34 100644
> --- a/tools/perf/Documentation/perf-list.txt
> +++ b/tools/perf/Documentation/perf-list.txt
> @@ -141,7 +141,13 @@ on the first memory controller on socket 0 of a Intel Xeon system
>  
>  Each memory controller has its own PMU.  Measuring the complete system
>  bandwidth would require specifying all imc PMUs (see perf list output),
> -and adding the values together.
> +and adding the values together. To simplify creation of multiple events,
> +prefix and glob matching is supported in the PMU name, and the prefix
> +'uncore_' is also ignored when performing the match. So the command above
> +can be expanded to all memory controllers by using the syntaxes:
> +
> +  perf stat -C 0 -a imc/cas_count_read/,imc/cas_count_write/ -I 1000 ...
> +  perf stat -C 0 -a *imc*/cas_count_read/,*imc*/cas_count_write/ -I 1000 ...
>  
>  This example measures the combined core power every second
>  
> diff --git a/tools/perf/Documentation/perf-stat.txt b/tools/perf/Documentation/perf-stat.txt
> index 823fce7..5ee954f 100644
> --- a/tools/perf/Documentation/perf-stat.txt
> +++ b/tools/perf/Documentation/perf-stat.txt
> @@ -49,6 +49,13 @@ report::
>  	  parameters are defined by corresponding entries in
>  	  /sys/bus/event_source/devices/<pmu>/format/*
>  
> +	Note that the last two syntaxes support prefix and glob matching in
> +	the PMU name to simplify creation of events accross multiple instances
> +	of the same type of PMU in large systems (e.g. memory controller PMUs).
> +	Multiple PMU instances are typical for uncore PMUs, so the prefix
> +	'uncore_' is also ignored when performing this match.
> +
> +
>  -i::
>  --no-inherit::
>          child tasks do not inherit counters
> @@ -246,6 +253,12 @@ taskset.
>  --no-merge::
>  Do not merge results from same PMUs.
>  
> +When multiple events are created from a single event alias, stat will,
> +by default, aggregate the event counts and show the result in a single
> +row. This option disables that behavior and shows the individual events
> +and counts. Aliases are listed immediately after the Kernel PMU events
> +by perf list.
> +
>  --smi-cost::
>  Measure SMI cost if msr/aperf/ and msr/smi/ events are supported.
>  
> diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> index 655ecff..a1a01b1 100644
> --- a/tools/perf/util/parse-events.l
> +++ b/tools/perf/util/parse-events.l
> @@ -175,7 +175,7 @@ bpf_source	[^,{}]+\.c[a-zA-Z0-9._]*
>  num_dec		[0-9]+
>  num_hex		0x[a-fA-F0-9]+
>  num_raw_hex	[a-fA-F0-9]+
> -name		[a-zA-Z_*?][a-zA-Z0-9_*?.]*
> +name		[a-zA-Z_*?\[\]][a-zA-Z0-9_*?.\[\]]*
>  name_minus	[a-zA-Z_*?][a-zA-Z0-9\-_*?.:]*
>  drv_cfg_term	[a-zA-Z0-9_\.]+(=[a-zA-Z0-9_*?\.:]+)?
>  /* If you add a modifier you need to update check_modifier() */
> diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
> index e81a20e..316ac07 100644
> --- a/tools/perf/util/parse-events.y
> +++ b/tools/perf/util/parse-events.y
> @@ -8,6 +8,7 @@
>  
>  #define YYDEBUG 1
>  
> +#include <fnmatch.h>
>  #include <linux/compiler.h>
>  #include <linux/list.h>
>  #include <linux/types.h>
> @@ -234,21 +235,25 @@ PE_NAME opt_event_config
>  	if (parse_events_add_pmu(_parse_state, list, $1, $2)) {
>  		struct perf_pmu *pmu = NULL;
>  		int ok = 0;
> +		char *pattern;
>  
> -		while ((pmu = perf_pmu__scan(pmu)) != NULL) {
> -			char *name = pmu->name;
> +		if (asprintf(&pattern, "?(uncore_)%s*", $1) < 0)
> +			YYABORT;
>  
> -			if (!strncmp(name, "uncore_", 7) &&
> -			    strncmp($1, "uncore_", 7))
> -				name += 7;
> -			if (!strncmp($1, name, strlen($1))) {
> -				if (parse_events_copy_term_list(orig_terms, &terms))
> +		while ((pmu = perf_pmu__scan(pmu)) != NULL) {
> +			if (!fnmatch(pattern, pmu->name, FNM_EXTMATCH)) {
> +				if (parse_events_copy_term_list(orig_terms, &terms)) {
> +					free(pattern);

This breaks the build in at least Alpine Linux 3.4, 3.5 and 3.6 and android-ndk:r15c-arm

Alpine 3.6 build failure:

  CC       /tmp/build/perf/util/parse-events-bison.o
util/parse-events.y: In function 'parse_events_parse':
util/parse-events.y:244:37: error: 'FNM_EXTMATCH' undeclared (first use in this function)
    if (!fnmatch(pattern, pmu->name, FNM_EXTMATCH)) {
                                     ^~~~~~~~~~~~
util/parse-events.y:244:37: note: each undeclared identifier is reported only once for each function it appears in
  CC       /tmp/build/perf/bench/mem-functions.o
mv: can't rename '/tmp/build/perf/util/.parse-events-bison.o.tmp': No such file or directory
make[4]: *** [/git/linux/tools/build/Makefile.build:96: /tmp/build/perf/util/parse-events-bison.o] Error 1
make[3]: *** [/git/linux/tools/build/Makefile.build:139: util] Error 2
make[2]: *** [Makefile.perf:623: /tmp/build/perf/libperf-in.o] Error 2
make[2]: *** Waiting for unfinished jobs....

Android NDK r15c ARM, cross built from, IIRC, Fedora 24:

 CC       /tmp/build/perf/util/parse-events-bison.o
util/parse-events.y: In function 'parse_events_parse':
util/parse-events.y:244:37: error: 'FNM_EXTMATCH' undeclared (first use in this function)
    if (!fnmatch(pattern, pmu->name, FNM_EXTMATCH)) {
                                     ^
util/parse-events.y:244:37: note: each undeclared identifier is reported only once for each function it appears in
mv: cannot stat '/tmp/build/perf/util/.parse-events-bison.o.tmp': No such file or directory
make[4]: *** [/git/linux/tools/build/Makefile.build:96: /tmp/build/perf/util/parse-events-bison.o] Error 1
make[4]: *** Waiting for unfinished jobs....
  CC       /tmp/build/perf/builtin-kmem.o
make[3]: *** [/git/linux/tools/build/Makefile.build:139: util] Error 2
make[2]: *** [Makefile.perf:623: /tmp/build/perf/libperf-in.o] Error 2


Probably others, I'll investigate later, feel free to do it if you have
the time now :-)

Extra info:


   1    46.29 alpine:3.4                    : FAIL gcc (Alpine 5.3.0) 5.3.0
   2    53.37 alpine:3.5                    : FAIL gcc (Alpine 6.2.1) 6.2.1 20160822
   3    48.42 alpine:3.6                    : FAIL gcc (Alpine 6.3.0) 6.3.0
   4    35.88 alpine:edge                   : FAIL gcc (Alpine 6.4.0) 6.4.0
   5    96.79 amazonlinux:1                 : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
   6   116.40 amazonlinux:2                 : Ok   gcc (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2)
   7    34.30 android-ndk:r12b-arm          : FAIL arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
   8    33.69 android-ndk:r15c-arm          : FAIL arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
   9    60.50 centos:5                      : Ok   gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55)
  10    88.54 centos:6                      : Ok   gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
  11   108.89 centos:7                      : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)


The builds are still ongoing.

- Arnaldo

  reply	other threads:[~2018-03-07 16:02 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-06 14:04 [RFC V3 0/3] perf stat: improvements for handling of multiple PMUs Agustin Vega-Frias
2018-03-06 14:04 ` Agustin Vega-Frias
2018-03-06 14:04 ` [RFC V3 1/3] perf, tools: Support wildcards on pmu name in dynamic pmu events Agustin Vega-Frias
2018-03-06 14:04   ` Agustin Vega-Frias
2018-03-07 16:02   ` Arnaldo Carvalho de Melo [this message]
2018-03-07 16:02     ` Arnaldo Carvalho de Melo
2018-03-07 16:02     ` Arnaldo Carvalho de Melo
2018-03-07 17:39     ` Agustin Vega-Frias
2018-03-07 17:39       ` Agustin Vega-Frias
2018-03-07 18:54       ` Andi Kleen
2018-03-07 18:54         ` Andi Kleen
2018-03-07 19:05         ` Arnaldo Carvalho de Melo
2018-03-07 19:05           ` Arnaldo Carvalho de Melo
2018-03-07 19:05           ` Arnaldo Carvalho de Melo
2018-03-07 19:05             ` Arnaldo Carvalho de Melo
2018-03-07 19:39             ` Arnaldo Carvalho de Melo
2018-03-07 19:39               ` Arnaldo Carvalho de Melo
2018-03-07 19:49               ` Agustin Vega-Frias
2018-03-07 19:49                 ` Agustin Vega-Frias
2018-03-07 19:58                 ` Arnaldo Carvalho de Melo
2018-03-07 19:58                   ` Arnaldo Carvalho de Melo
2018-03-07 19:58                   ` Arnaldo Carvalho de Melo
2018-03-07 20:09                   ` Agustin Vega-Frias
2018-03-07 20:09                     ` Agustin Vega-Frias
2018-03-07 20:21                     ` Jiri Olsa
2018-03-07 20:21                       ` Jiri Olsa
2018-03-07 20:33                     ` Arnaldo Carvalho de Melo
2018-03-07 20:33                       ` Arnaldo Carvalho de Melo
2018-03-06 14:04 ` [RFC V3 2/3] perf, tools: Display pmu name when printing unmerged events in stat Agustin Vega-Frias
2018-03-06 14:04   ` Agustin Vega-Frias
2018-03-09  8:42   ` [tip:perf/core] perf pmu: " tip-bot for Agustin Vega-Frias
2018-03-06 14:04 ` [RFC V3 3/3] perf pmu: Auto-merge PMU events created by prefix or glob match Agustin Vega-Frias
2018-03-06 14:04   ` Agustin Vega-Frias
2018-03-09  8:43   ` [tip:perf/core] " tip-bot for Agustin Vega-Frias
2018-03-07 10:04 ` [RFC V3 0/3] perf stat: improvements for handling of multiple PMUs Jiri Olsa
2018-03-07 10:04   ` Jiri Olsa
2018-03-07 10:04   ` Jiri Olsa
2018-03-07 13:36   ` Arnaldo Carvalho de Melo
2018-03-07 13:36     ` Arnaldo Carvalho de Melo
2018-03-07 13:51     ` Jiri Olsa
2018-03-07 13:51       ` Jiri Olsa
2018-03-07 14:30       ` Arnaldo Carvalho de Melo
2018-03-07 14:30         ` Arnaldo Carvalho de Melo
2018-03-07 17:09         ` Andi Kleen
2018-03-07 17:09           ` Andi Kleen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180307160224.GN3701@kernel.org \
    --to=acme@kernel.org \
    --cc=agustinv@codeaurora.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@redhat.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=timur@codeaurora.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.