[PATCH v1] perf pfm: Don't force loading of all PMUs

Ian Rogers posted 1 patch 2 months, 2 weeks ago
tools/perf/util/pfm.c | 4 ----
1 file changed, 4 deletions(-)
[PATCH v1] perf pfm: Don't force loading of all PMUs
Posted by Ian Rogers 2 months, 2 weeks ago
Force loading all PMUs adds significant cost because DRM and other
PMUs are loaded, it should also not be required if the pmus__
functions are used.

Tested by run perf test, in particular the pfm related tests. Also
`perf list` is identical before and after.

Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/util/pfm.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/tools/perf/util/pfm.c b/tools/perf/util/pfm.c
index 0dacc133ed39..e89395814e88 100644
--- a/tools/perf/util/pfm.c
+++ b/tools/perf/util/pfm.c
@@ -47,10 +47,6 @@ int parse_libpfm_events_option(const struct option *opt, const char *str,
 	p_orig = p = strdup(str);
 	if (!p)
 		return -1;
-	/*
-	 * force loading of the PMU list
-	 */
-	perf_pmus__scan(NULL);
 
 	for (q = p; strsep(&p, ",{}"); q = p) {
 		sep = p ? str + (p - p_orig - 1) : "";
-- 
2.50.0.727.gbf7dc18ff4-goog
Re: [PATCH v1] perf pfm: Don't force loading of all PMUs
Posted by Namhyung Kim 2 months, 1 week ago
On Mon, 21 Jul 2025 18:34:49 -0700, Ian Rogers wrote:
> Force loading all PMUs adds significant cost because DRM and other
> PMUs are loaded, it should also not be required if the pmus__
> functions are used.
> 
> Tested by run perf test, in particular the pfm related tests. Also
> `perf list` is identical before and after.
> 
> [...]
Applied to perf-tools-next, thanks!

Best regards,
Namhyung
Re: [PATCH v1] perf pfm: Don't force loading of all PMUs
Posted by Namhyung Kim 2 months, 1 week ago
On Mon, Jul 21, 2025 at 06:34:49PM -0700, Ian Rogers wrote:
> Force loading all PMUs adds significant cost because DRM and other
> PMUs are loaded, it should also not be required if the pmus__
> functions are used.
> 
> Tested by run perf test, in particular the pfm related tests. Also
> `perf list` is identical before and after.

I've also checked it with timing.  I'll add this to the commit message.

Before:
  $ time ./perf test pfm
   54: Test libpfm4 support                                            :
   54.1: test of individual --pfm-events                               : Ok
   54.2: test groups of --pfm-events                                   : Ok
  103: perf all libpfm4 events test                                    : Ok
  
  real	0m8.933s
  user	0m1.824s
  sys	0m7.122s
  
After:
  $ time ./perf test pfm
   54: Test libpfm4 support                                            :
   54.1: test of individual --pfm-events                               : Ok
   54.2: test groups of --pfm-events                                   : Ok
  103: perf all libpfm4 events test                                    : Ok
  
  real	0m5.259s
  user	0m1.793s
  sys	0m3.570s

Tested-by: Namhyung Kim <namhyung@kernel.org>

Thanks,
Namhyung

> 
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/util/pfm.c | 4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/tools/perf/util/pfm.c b/tools/perf/util/pfm.c
> index 0dacc133ed39..e89395814e88 100644
> --- a/tools/perf/util/pfm.c
> +++ b/tools/perf/util/pfm.c
> @@ -47,10 +47,6 @@ int parse_libpfm_events_option(const struct option *opt, const char *str,
>  	p_orig = p = strdup(str);
>  	if (!p)
>  		return -1;
> -	/*
> -	 * force loading of the PMU list
> -	 */
> -	perf_pmus__scan(NULL);
>  
>  	for (q = p; strsep(&p, ",{}"); q = p) {
>  		sep = p ? str + (p - p_orig - 1) : "";
> -- 
> 2.50.0.727.gbf7dc18ff4-goog
>