All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/48] Refactor perf cpumap
@ 2021-12-30  7:19 ` Ian Rogers
  0 siblings, 0 replies; 130+ messages in thread
From: Ian Rogers @ 2021-12-30  7:19 UTC (permalink / raw)
  To: Andi Kleen, Jiri Olsa, Namhyung Kim, John Garry, Kajol Jain,
	Paul A . Clarke, Arnaldo Carvalho de Melo, Riccardo Mancini,
	Kan Liang, Peter Zijlstra, Ingo Molnar, Mark Rutland,
	Alexander Shishkin, linux-perf-users, linux-kernel, Vineet Singh,
	James Clark, Mathieu Poirier, Suzuki K Poulose, Mike Leach,
	Leo Yan, coresight, linux-arm-kernel, zhengjun.xing
  Cc: eranian, Ian Rogers

Perf cpu map has various functions where a cpumap and index are passed
in order to load the cpu. A problem with this is that the wrong index
may be passed for the cpumap, causing problems like aggregation on the
wrong CPU:
https://lore.kernel.org/lkml/20211204023409.969668-1-irogers@google.com/

This patch set refactors the cpu map API, reducing it and explicitly
passing the cpu (rather than the pair) to functions that need
it. Comments are added at the same time. Changes modify the same
file/function more than once as refactoring and fixes are broken apart
for the sake of bisection.

v2. Incorproates fixes suggested Jiri Olsa, rewrites the evlist CPU
    iterator in part in a way suggested by Riccardo Mancini. The new
    fixes start at patch 23. The final change was suggested by John
    Garry to make the CPUs have their own struct wrapper.

v3. Incorporates fixes suggested by Namhyung Kim.

Ian Rogers (48):
  libperf: Add comments to perf_cpu_map.
  perf stat: Add aggr creators that are passed a cpu.
  perf stat: Correct aggregation CPU map
  perf stat: Switch aggregation to use for_each loop
  perf stat: Switch to cpu version of cpu_map__get
  perf cpumap: Switch cpu_map__build_map to cpu function
  perf cpumap: Remove map+index get_socket
  perf cpumap: Remove map+index get_die
  perf cpumap: Remove map+index get_core
  perf cpumap: Remove map+index get_node
  perf cpumap: Add comments to aggr_cpu_id
  perf cpumap: Remove unused cpu_map__socket
  perf cpumap: Simplify equal function name.
  perf cpumap: Rename empty functions.
  perf cpumap: Document cpu__get_node and remove redundant function
  perf cpumap: Remove map from function names that don't use a map.
  perf cpumap: Remove cpu_map__cpu, use libperf function.
  perf cpumap: Refactor cpu_map__build_map
  perf cpumap: Rename cpu_map__get_X_aggr_by_cpu functions
  perf cpumap: Move 'has' function to libperf
  perf cpumap: Add some comments to cpu_aggr_map
  perf cpumap: Trim the cpu_aggr_map
  perf stat: Fix memory leak in check_per_pkg
  perf cpumap: Add CPU to aggr_cpu_id
  perf stat-display: Avoid use of core for CPU.
  perf evsel: Derive CPUs and threads in alloc_counts
  libperf: Switch cpu to more accurate cpu_map_idx
  libperf: Use cpu not index for evsel mmap
  perf counts: Switch name cpu to cpu_map_idx
  perf stat: Rename aggr_data cpu to imply it's an index
  perf stat: Use perf_cpu_map__for_each_cpu
  perf script: Use for each cpu to aid readability
  libperf: Allow NULL in perf_cpu_map__idx
  perf evlist: Refactor evlist__for_each_cpu.
  perf evsel: Pass cpu not cpu map index to synthesize
  perf stat: Correct variable name for read counter
  perf evsel: Rename CPU around get_group_fd
  perf evsel: Reduce scope of evsel__ignore_missing_thread
  perf evsel: Rename variable cpu to index
  perf test: Use perf_cpu_map__for_each_cpu
  perf stat: Correct check_per_pkg cpu
  perf stat: Swap variable name cpu to index
  libperf: Sync evsel documentation
  perf bpf: Rename cpu to cpu_map_idx
  perf c2c: Use more intention revealing iterator
  perf script: Fix flipped index and cpu
  perf stat: Correct first_shadow_cpu to return index
  perf cpumap: Give CPUs their own type.

 tools/lib/perf/Documentation/libperf.txt      |  11 +-
 tools/lib/perf/cpumap.c                       | 131 +++--
 tools/lib/perf/evlist.c                       |   4 +-
 tools/lib/perf/evsel.c                        |  92 ++--
 tools/lib/perf/include/internal/cpumap.h      |  18 +-
 tools/lib/perf/include/internal/evlist.h      |   3 +-
 tools/lib/perf/include/internal/evsel.h       |   4 +-
 tools/lib/perf/include/internal/mmap.h        |   5 +-
 tools/lib/perf/include/perf/cpumap.h          |   8 +-
 tools/lib/perf/include/perf/evsel.h           |  10 +-
 tools/lib/perf/libperf.map                    |   1 +
 tools/lib/perf/mmap.c                         |   2 +-
 tools/perf/arch/arm/util/cs-etm.c             |  16 +-
 tools/perf/bench/epoll-ctl.c                  |   2 +-
 tools/perf/bench/epoll-wait.c                 |   2 +-
 tools/perf/bench/futex-hash.c                 |   2 +-
 tools/perf/bench/futex-lock-pi.c              |   2 +-
 tools/perf/bench/futex-requeue.c              |   2 +-
 tools/perf/bench/futex-wake-parallel.c        |   2 +-
 tools/perf/bench/futex-wake.c                 |   2 +-
 tools/perf/builtin-c2c.c                      |  15 +-
 tools/perf/builtin-ftrace.c                   |   2 +-
 tools/perf/builtin-kmem.c                     |   2 +-
 tools/perf/builtin-record.c                   |   2 +-
 tools/perf/builtin-sched.c                    |  71 +--
 tools/perf/builtin-script.c                   |  10 +-
 tools/perf/builtin-stat.c                     | 516 +++++++++---------
 tools/perf/tests/attr.c                       |   6 +-
 tools/perf/tests/bitmap.c                     |   2 +-
 tools/perf/tests/cpumap.c                     |   6 +-
 tools/perf/tests/event_update.c               |   6 +-
 tools/perf/tests/mem2node.c                   |   2 +-
 tools/perf/tests/mmap-basic.c                 |   4 +-
 tools/perf/tests/openat-syscall-all-cpus.c    |  39 +-
 tools/perf/tests/stat.c                       |   3 +-
 tools/perf/tests/topology.c                   |  43 +-
 tools/perf/util/affinity.c                    |   2 +-
 tools/perf/util/auxtrace.c                    |  12 +-
 tools/perf/util/auxtrace.h                    |   5 +-
 tools/perf/util/bpf_counter.c                 |  16 +-
 tools/perf/util/bpf_counter.h                 |   4 +-
 tools/perf/util/counts.c                      |   8 +-
 tools/perf/util/counts.h                      |  14 +-
 tools/perf/util/cpumap.c                      | 253 ++++-----
 tools/perf/util/cpumap.h                      | 116 ++--
 tools/perf/util/cputopo.c                     |   6 +-
 tools/perf/util/env.c                         |  29 +-
 tools/perf/util/env.h                         |   3 +-
 tools/perf/util/evlist.c                      | 148 ++---
 tools/perf/util/evlist.h                      |  50 +-
 tools/perf/util/evsel.c                       | 143 ++---
 tools/perf/util/evsel.h                       |  27 +-
 tools/perf/util/expr.c                        |   2 +-
 tools/perf/util/header.c                      |   6 +-
 tools/perf/util/mmap.c                        |  19 +-
 tools/perf/util/mmap.h                        |   3 +-
 tools/perf/util/perf_api_probe.c              |  15 +-
 tools/perf/util/python.c                      |   4 +-
 tools/perf/util/record.c                      |  11 +-
 .../scripting-engines/trace-event-python.c    |   6 +-
 tools/perf/util/session.c                     |  10 +-
 tools/perf/util/stat-display.c                | 138 ++---
 tools/perf/util/stat-shadow.c                 | 308 +++++------
 tools/perf/util/stat.c                        |  47 +-
 tools/perf/util/stat.h                        |   9 +-
 tools/perf/util/svghelper.c                   |   6 +-
 tools/perf/util/synthetic-events.c            |  12 +-
 tools/perf/util/synthetic-events.h            |   3 +-
 tools/perf/util/util.h                        |   5 +-
 69 files changed, 1333 insertions(+), 1155 deletions(-)

-- 
2.34.1.448.ga2b2bfdf31-goog


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

end of thread, other threads:[~2022-01-11 15:13 UTC | newest]

Thread overview: 130+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-30  7:19 [PATCH v3 00/48] Refactor perf cpumap Ian Rogers
2021-12-30  7:19 ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 01/48] libperf: Add comments to perf_cpu_map Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3] perf evlist: Remove group option Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2022-01-04 14:21   ` Jiri Olsa
2022-01-04 14:21     ` Jiri Olsa
2022-01-04 17:01     ` Ian Rogers
2022-01-04 17:01       ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 02/48] perf stat: Add aggr creators that are passed a cpu Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 03/48] perf stat: Correct aggregation CPU map Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2022-01-04 14:19   ` Jiri Olsa
2022-01-04 14:19     ` Jiri Olsa
2021-12-30  7:19 ` [PATCH v3 04/48] perf stat: Switch aggregation to use for_each loop Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 05/48] perf stat: Switch to cpu version of cpu_map__get Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 06/48] perf cpumap: Switch cpu_map__build_map to cpu function Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2022-01-10 20:46   ` Arnaldo Carvalho de Melo
2022-01-10 20:46     ` Arnaldo Carvalho de Melo
2022-01-10 21:03     ` Arnaldo Carvalho de Melo
2022-01-10 21:03       ` Arnaldo Carvalho de Melo
2022-01-10 21:23       ` Arnaldo Carvalho de Melo
2022-01-10 21:23         ` Arnaldo Carvalho de Melo
2022-01-10 21:34         ` Arnaldo Carvalho de Melo
2022-01-10 21:34           ` Arnaldo Carvalho de Melo
2022-01-10 22:29           ` Ian Rogers
2022-01-10 22:29             ` Ian Rogers
2022-01-11  0:41             ` Arnaldo Carvalho de Melo
2022-01-11  0:41               ` Arnaldo Carvalho de Melo
2022-01-11  0:50               ` Arnaldo Carvalho de Melo
2022-01-11  0:50                 ` Arnaldo Carvalho de Melo
2022-01-11 15:12               ` Arnaldo Carvalho de Melo
2022-01-11 15:12                 ` Arnaldo Carvalho de Melo
2021-12-30  7:19 ` [PATCH v3 07/48] perf cpumap: Remove map+index get_socket Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 08/48] perf cpumap: Remove map+index get_die Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2022-01-04 14:19   ` Jiri Olsa
2022-01-04 14:19     ` Jiri Olsa
2021-12-30  7:19 ` [PATCH v3 09/48] perf cpumap: Remove map+index get_core Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 10/48] perf cpumap: Remove map+index get_node Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 11/48] perf cpumap: Add comments to aggr_cpu_id Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 12/48] perf cpumap: Remove unused cpu_map__socket Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 13/48] perf cpumap: Simplify equal function name Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 14/48] perf cpumap: Rename empty functions Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 15/48] perf cpumap: Document cpu__get_node and remove redundant function Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 16/48] perf cpumap: Remove map from function names that don't use a map Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:19 ` [PATCH v3 17/48] perf cpumap: Remove cpu_map__cpu, use libperf function Ian Rogers
2021-12-30  7:19   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 18/48] perf cpumap: Refactor cpu_map__build_map Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2022-01-04 14:20   ` Jiri Olsa
2022-01-04 14:20     ` Jiri Olsa
2021-12-30  7:20 ` [PATCH v3 19/48] perf cpumap: Rename cpu_map__get_X_aggr_by_cpu functions Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 20/48] perf cpumap: Move 'has' function to libperf Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 21/48] perf cpumap: Add some comments to cpu_aggr_map Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 22/48] perf cpumap: Trim the cpu_aggr_map Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 23/48] perf stat: Fix memory leak in check_per_pkg Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 24/48] perf cpumap: Add CPU to aggr_cpu_id Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 25/48] perf stat-display: Avoid use of core for CPU Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 26/48] perf evsel: Derive CPUs and threads in alloc_counts Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 27/48] libperf: Switch cpu to more accurate cpu_map_idx Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 28/48] libperf: Use cpu not index for evsel mmap Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 29/48] perf counts: Switch name cpu to cpu_map_idx Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 30/48] perf stat: Rename aggr_data cpu to imply it's an index Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 31/48] perf stat: Use perf_cpu_map__for_each_cpu Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 32/48] perf script: Use for each cpu to aid readability Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 33/48] libperf: Allow NULL in perf_cpu_map__idx Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 34/48] perf evlist: Refactor evlist__for_each_cpu Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 35/48] perf evsel: Pass cpu not cpu map index to synthesize Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 36/48] perf stat: Correct variable name for read counter Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 37/48] perf evsel: Rename CPU around get_group_fd Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 38/48] perf evsel: Reduce scope of evsel__ignore_missing_thread Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 39/48] perf evsel: Rename variable cpu to index Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 40/48] perf test: Use perf_cpu_map__for_each_cpu Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 41/48] perf stat: Correct check_per_pkg cpu Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 42/48] perf stat: Swap variable name cpu to index Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 43/48] libperf: Sync evsel documentation Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 44/48] perf bpf: Rename cpu to cpu_map_idx Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 45/48] perf c2c: Use more intention revealing iterator Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 46/48] perf script: Fix flipped index and cpu Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 47/48] perf stat: Correct first_shadow_cpu to return index Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2021-12-30  7:20 ` [PATCH v3 48/48] perf cpumap: Give CPUs their own type Ian Rogers
2021-12-30  7:20   ` Ian Rogers
2022-01-04 14:24 ` [PATCH v3 00/48] Refactor perf cpumap Jiri Olsa
2022-01-04 14:24   ` Jiri Olsa
2022-01-04 17:08   ` Ian Rogers
2022-01-04 17:08     ` Ian Rogers

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.