linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 00/23] PMU refactoring and improvements
@ 2023-05-17 14:57 Ian Rogers
  2023-05-17 14:57 ` [PATCH v1 01/23] perf tools: Warn if no user requested CPUs match PMU's CPUs Ian Rogers
                   ` (22 more replies)
  0 siblings, 23 replies; 39+ messages in thread
From: Ian Rogers @ 2023-05-17 14:57 UTC (permalink / raw)
  To: Suzuki K Poulose, Mike Leach, Leo Yan, John Garry, Will Deacon,
	James Clark, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Mark Rutland, Alexander Shishkin,
	Jiri Olsa, Namhyung Kim, Ian Rogers, Adrian Hunter, Kajol Jain,
	Jing Zhang, Kan Liang, Zhengjun Xing, Ravi Bangoria,
	Madhavan Srinivasan, Athira Rajeev, Ming Wang, Huacai Chen,
	Sandipan Das, Dmitrii Dolgov, Sean Christopherson, Raul Silvera,
	Ali Saidi, Rob Herring, Thomas Richter, Kang Minchul,
	linux-kernel, coresight, linux-arm-kernel, linux-perf-users

Separate the code in pmu.[ch] from the set/list of PMUs case and the
particular PMU case. Move the set/list of PMUs case code into
pmus.[ch]. Clean up hybrid code and remove hybrid PMU list, it is
sufficient to scan PMUs looking for core ones. Add core PMU list and
perf_pmus__scan_core that just reads core PMUs. Switch code that skips
non-core PMUs during a perf_pmus__scan, to use the
perf_pmus__scan_core variant. Don't scan sysfs for PMUs if all such
PMUs have been previously scanned/loaded. Scanning just just core
PMUs, for the cases it is applicable, can improve the sysfs reading
time by more than 4 fold on my laptop, as servers generally have many
more uncore PMUs the improvement there should be larger:

```
$ perf bench internals pmu-scan -i 1000
Computing performance of sysfs PMU event scan for 1000 times
  Average core PMU scanning took: 989.231 usec (+- 1.535 usec)
  Average PMU scanning took: 4309.425 usec (+- 74.322 usec)
```

The patch "perf pmu: Separate pmu and pmus" moves and renames a lot of
functions, and is consequently large. The changes are trivial, but
kept together to keep the overall number of patches more reasonable.

Ian Rogers (23):
  perf tools: Warn if no user requested CPUs match PMU's CPUs
  perf evlist: Remove evlist__warn_hybrid_group
  perf evlist: Remove __evlist__add_default
  perf evlist: Reduce scope of evlist__has_hybrid
  perf pmu: Remove perf_pmu__hybrid_mounted
  perf pmu: Detect ARM and hybrid PMUs with sysfs
  perf pmu: Add is_core to pmu
  perf pmu: Rewrite perf_pmu__has_hybrid to avoid list
  perf x86: Iterate hybrid PMUs as core PMUs
  perf topology: Avoid hybrid list for hybrid topology
  perf evsel: Compute is_hybrid from PMU being core
  perf header: Avoid hybrid PMU list in write_pmu_caps
  perf metrics: Remove perf_pmu__is_hybrid use
  perf stat: Avoid hybrid PMU list
  perf mem: Avoid hybrid PMU list
  perf pmu: Remove perf_pmu__hybrid_pmus list
  perf pmus: Prefer perf_pmu__scan over perf_pmus__for_each_pmu
  perf x86 mem: minor refactor to is_mem_loads_aux_event
  perf pmu: Separate pmu and pmus
  perf pmus: Split pmus list into core and uncore
  perf pmus: Allow just core PMU scanning
  perf pmus: Avoid repeated sysfs scanning
  perf pmus: Ensure all PMUs are read for find_by_type

 tools/perf/arch/arm/util/auxtrace.c   |   7 +-
 tools/perf/arch/arm/util/cs-etm.c     |   4 +-
 tools/perf/arch/arm64/util/pmu.c      |   6 +-
 tools/perf/arch/x86/tests/hybrid.c    |   7 +-
 tools/perf/arch/x86/util/auxtrace.c   |   5 +-
 tools/perf/arch/x86/util/evlist.c     |  25 +-
 tools/perf/arch/x86/util/evsel.c      |  27 +-
 tools/perf/arch/x86/util/intel-bts.c  |   4 +-
 tools/perf/arch/x86/util/intel-pt.c   |   4 +-
 tools/perf/arch/x86/util/mem-events.c |  17 +-
 tools/perf/arch/x86/util/perf_regs.c  |  15 +-
 tools/perf/arch/x86/util/topdown.c    |   5 +-
 tools/perf/bench/pmu-scan.c           |  60 ++--
 tools/perf/builtin-c2c.c              |   9 +-
 tools/perf/builtin-list.c             |   4 +-
 tools/perf/builtin-mem.c              |   9 +-
 tools/perf/builtin-record.c           |  29 +-
 tools/perf/builtin-stat.c             |  15 +-
 tools/perf/builtin-top.c              |  10 +-
 tools/perf/tests/attr.c               |   4 +-
 tools/perf/tests/event_groups.c       |   7 +-
 tools/perf/tests/parse-events.c       |  15 +-
 tools/perf/tests/parse-metric.c       |   4 +-
 tools/perf/tests/pmu-events.c         |   6 +-
 tools/perf/tests/switch-tracking.c    |   4 +-
 tools/perf/tests/topology.c           |   4 +-
 tools/perf/util/Build                 |   2 -
 tools/perf/util/cpumap.h              |   2 +-
 tools/perf/util/cputopo.c             |  16 +-
 tools/perf/util/env.c                 |   5 +-
 tools/perf/util/evlist-hybrid.c       | 162 ---------
 tools/perf/util/evlist-hybrid.h       |  15 -
 tools/perf/util/evlist.c              |  67 +++-
 tools/perf/util/evlist.h              |   9 +-
 tools/perf/util/evsel.c               |  57 +--
 tools/perf/util/evsel.h               |   3 -
 tools/perf/util/header.c              |  27 +-
 tools/perf/util/mem-events.c          |  17 +-
 tools/perf/util/metricgroup.c         |   9 +-
 tools/perf/util/parse-events.c        |  24 +-
 tools/perf/util/parse-events.y        |   3 +-
 tools/perf/util/pfm.c                 |   6 +-
 tools/perf/util/pmu-hybrid.c          |  52 ---
 tools/perf/util/pmu-hybrid.h          |  32 --
 tools/perf/util/pmu.c                 | 482 ++------------------------
 tools/perf/util/pmu.h                 |  26 +-
 tools/perf/util/pmus.c                | 477 ++++++++++++++++++++++++-
 tools/perf/util/pmus.h                |  15 +-
 tools/perf/util/print-events.c        |  15 +-
 tools/perf/util/python-ext-sources    |   1 -
 tools/perf/util/stat-display.c        |  21 +-
 51 files changed, 819 insertions(+), 1032 deletions(-)
 delete mode 100644 tools/perf/util/evlist-hybrid.c
 delete mode 100644 tools/perf/util/evlist-hybrid.h
 delete mode 100644 tools/perf/util/pmu-hybrid.c
 delete mode 100644 tools/perf/util/pmu-hybrid.h

-- 
2.40.1.606.ga4b1b128d6-goog


^ permalink raw reply	[flat|nested] 39+ messages in thread

end of thread, other threads:[~2023-05-23 17:47 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-17 14:57 [PATCH v1 00/23] PMU refactoring and improvements Ian Rogers
2023-05-17 14:57 ` [PATCH v1 01/23] perf tools: Warn if no user requested CPUs match PMU's CPUs Ian Rogers
2023-05-21 19:04   ` Liang, Kan
2023-05-22  4:52     ` Ian Rogers
2023-05-22 11:33       ` Liang, Kan
2023-05-17 14:57 ` [PATCH v1 02/23] perf evlist: Remove evlist__warn_hybrid_group Ian Rogers
2023-05-17 14:57 ` [PATCH v1 03/23] perf evlist: Remove __evlist__add_default Ian Rogers
2023-05-21 19:12   ` Liang, Kan
2023-05-22  5:12     ` Ian Rogers
2023-05-17 14:57 ` [PATCH v1 04/23] perf evlist: Reduce scope of evlist__has_hybrid Ian Rogers
2023-05-17 14:57 ` [PATCH v1 05/23] perf pmu: Remove perf_pmu__hybrid_mounted Ian Rogers
2023-05-21 19:23   ` Liang, Kan
2023-05-22  5:21     ` Ian Rogers
2023-05-22 11:55       ` Liang, Kan
2023-05-22 14:06         ` Ian Rogers
2023-05-23 17:23           ` Liang, Kan
2023-05-23 17:45             ` Ian Rogers
2023-05-17 14:57 ` [PATCH v1 06/23] perf pmu: Detect ARM and hybrid PMUs with sysfs Ian Rogers
2023-05-17 14:57 ` [PATCH v1 07/23] perf pmu: Add is_core to pmu Ian Rogers
2023-05-17 14:57 ` [PATCH v1 08/23] perf pmu: Rewrite perf_pmu__has_hybrid to avoid list Ian Rogers
2023-05-17 14:57 ` [PATCH v1 09/23] perf x86: Iterate hybrid PMUs as core PMUs Ian Rogers
2023-05-17 14:57 ` [PATCH v1 10/23] perf topology: Avoid hybrid list for hybrid topology Ian Rogers
2023-05-17 14:57 ` [PATCH v1 11/23] perf evsel: Compute is_hybrid from PMU being core Ian Rogers
2023-05-17 14:57 ` [PATCH v1 12/23] perf header: Avoid hybrid PMU list in write_pmu_caps Ian Rogers
2023-05-17 14:57 ` [PATCH v1 13/23] perf metrics: Remove perf_pmu__is_hybrid use Ian Rogers
2023-05-17 14:57 ` [PATCH v1 14/23] perf stat: Avoid hybrid PMU list Ian Rogers
2023-05-17 14:57 ` [PATCH v1 15/23] perf mem: " Ian Rogers
2023-05-17 14:57 ` [PATCH v1 16/23] perf pmu: Remove perf_pmu__hybrid_pmus list Ian Rogers
2023-05-17 14:57 ` [PATCH v1 17/23] perf pmus: Prefer perf_pmu__scan over perf_pmus__for_each_pmu Ian Rogers
2023-05-21 19:43   ` Liang, Kan
2023-05-17 14:57 ` [PATCH v1 18/23] perf x86 mem: minor refactor to is_mem_loads_aux_event Ian Rogers
2023-05-21 19:47   ` Liang, Kan
2023-05-17 14:57 ` [PATCH v1 19/23] perf pmu: Separate pmu and pmus Ian Rogers
2023-05-17 14:58 ` [PATCH v1 20/23] perf pmus: Split pmus list into core and uncore Ian Rogers
2023-05-21 20:02   ` Liang, Kan
2023-05-22  5:30     ` Ian Rogers
2023-05-17 14:58 ` [PATCH v1 21/23] perf pmus: Allow just core PMU scanning Ian Rogers
2023-05-17 14:58 ` [PATCH v1 22/23] perf pmus: Avoid repeated sysfs scanning Ian Rogers
2023-05-17 14:58 ` [PATCH v1 23/23] perf pmus: Ensure all PMUs are read for find_by_type Ian Rogers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).