linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 00/47] maps/threads/dsos memory improvements and fixes
@ 2023-12-07  1:16 Ian Rogers
  2023-12-07  1:16 ` [PATCH v6 01/47] perf map: Improve map/unmap parameter names Ian Rogers
                   ` (47 more replies)
  0 siblings, 48 replies; 56+ messages in thread
From: Ian Rogers @ 2023-12-07  1:16 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	Ian Rogers, Adrian Hunter, Nick Terrell, Kan Liang, Andi Kleen,
	Kajol Jain, Athira Rajeev, Huacai Chen, Masami Hiramatsu,
	Vincent Whitchurch, Steinar H. Gunderson, Liam Howlett,
	Miguel Ojeda, Colin Ian King, Dmitrii Dolgov, Yang Jihong,
	Ming Wang, James Clark, K Prateek Nayak, Sean Christopherson,
	Leo Yan, Ravi Bangoria, German Gomez, Changbin Du, Paolo Bonzini,
	Li Dong, Sandipan Das, liuwenyu, linux-kernel, linux-perf-users,
	Guilherme Amadio

Modify the implementation of maps to not use an rbtree as the
container for maps, instead use a sorted array. Improve locking and
reference counting issues.

Similar to maps separate out and reimplement threads to use a hashmap
for lower memory consumption and faster look up. The fixes a
regression in memory usage where reference count checking switched to
using non-invasive tree nodes.  Reduce its default size by 32 times
and improve locking discipline. Also, fix regressions where tids had
become unordered to make `perf report --tasks` and
`perf trace --summary` output easier to read.

Better encapsulate the dsos abstraction. Remove the linked list and
rbtree used for faster iteration and log(n) lookup to a sorted array
for similar performance but half the memory usage per dso. Improve
reference counting and locking discipline, adding reference count
checking to dso.

v6:
 - Patch 1 is a parameter name fix requested by Namhyung.
 - Patches 2 to 13 split apart a macro to function callback refactor
   requested by Arnaldo.
 - Add fixes and acked-by to later patches from Namhyung.

v5 series is here:
https://lore.kernel.org/lkml/20231127220902.1315692-1-irogers@google.com/

Ian Rogers (47):
  perf map: Improve map/unmap parameter names
  perf maps: Add maps__for_each_map to iterate maps holding the lock
  perf events x86: Use function to add missing lock
  perf report: Use function to add missing maps lock
  perf tests: Use function to add missing maps lock
  perf machine: Use function to add missing maps lock
  perf probe-event: Use function to add missing maps lock
  perf symbol: Use function to add missing maps lock
  perf synthetic-events: Use function to add missing maps lock
  perf thread: Use function to add missing maps lock
  perf unwind: Use function to add missing maps lock
  perf vdso: Use function to add missing maps lock
  perf maps: Reduce scope of maps__for_each_entry
  perf maps: Add remove maps function to remove a map based on callback
  perf debug: Expose debug file
  perf maps: Refactor maps__fixup_overlappings
  perf maps: Do simple merge if given map doesn't overlap
  perf maps: Rename clone to copy from
  perf maps: Add maps__load_first
  perf maps: Add find next entry to give entry after the given map
  perf maps: Reduce scope of map_rb_node and maps internals
  perf maps: Fix up overlaps during fixup_end
  perf maps: Switch from rbtree to lazily sorted array for addresses
  perf maps: Get map before returning in maps__find
  perf maps: Get map before returning in maps__find_by_name
  perf maps: Get map before returning in maps__find_next_entry
  perf maps: Hide maps internals
  perf maps: Locking tidy up of nr_maps
  perf dso: Reorder variables to save space in struct dso
  perf report: Sort child tasks by tid
  perf trace: Ignore thread hashing in summary
  perf machine: Move fprintf to for_each loop and a callback
  perf threads: Move threads to its own files
  perf threads: Switch from rbtree to hashmap
  perf threads: Reduce table size from 256 to 8
  perf dsos: Attempt to better abstract dsos internals
  perf dsos: Tidy reference counting and locking
  perf dsos: Add dsos__for_each_dso
  perf dso: Move dso functions out of dsos
  perf dsos: Switch more loops to dsos__for_each_dso
  perf dsos: Switch backing storage to array from rbtree/list
  perf dsos: Remove __dsos__addnew
  perf dsos: Remove __dsos__findnew_link_by_longname_id
  perf dsos: Switch hand code to bsearch
  perf dso: Add reference count checking and accessor functions
  perf dso: Reference counting related fixes
  perf dso: Use container_of to avoid a pointer in dso_data

 tools/perf/arch/x86/tests/dwarf-unwind.c      |    1 +
 tools/perf/arch/x86/util/event.c              |  103 +-
 tools/perf/builtin-annotate.c                 |    6 +-
 tools/perf/builtin-buildid-cache.c            |    2 +-
 tools/perf/builtin-buildid-list.c             |   18 +-
 tools/perf/builtin-inject.c                   |   96 +-
 tools/perf/builtin-kallsyms.c                 |    2 +-
 tools/perf/builtin-mem.c                      |    4 +-
 tools/perf/builtin-record.c                   |    2 +-
 tools/perf/builtin-report.c                   |  243 +--
 tools/perf/builtin-script.c                   |    8 +-
 tools/perf/builtin-top.c                      |    4 +-
 tools/perf/builtin-trace.c                    |   41 +-
 tools/perf/tests/code-reading.c               |    8 +-
 tools/perf/tests/dso-data.c                   |   67 +-
 tools/perf/tests/hists_common.c               |    6 +-
 tools/perf/tests/hists_cumulate.c             |    4 +-
 tools/perf/tests/hists_output.c               |    2 +-
 tools/perf/tests/maps.c                       |   64 +-
 tools/perf/tests/symbols.c                    |    2 +-
 tools/perf/tests/thread-maps-share.c          |    8 +-
 tools/perf/tests/vmlinux-kallsyms.c           |  181 ++-
 tools/perf/ui/browsers/annotate.c             |    6 +-
 tools/perf/ui/browsers/hists.c                |    8 +-
 tools/perf/ui/browsers/map.c                  |    4 +-
 tools/perf/util/Build                         |    1 +
 tools/perf/util/annotate.c                    |   44 +-
 tools/perf/util/auxtrace.c                    |    2 +-
 tools/perf/util/block-info.c                  |    2 +-
 tools/perf/util/bpf-event.c                   |    9 +-
 tools/perf/util/bpf_lock_contention.c         |   10 +-
 tools/perf/util/build-id.c                    |  136 +-
 tools/perf/util/build-id.h                    |    2 -
 tools/perf/util/callchain.c                   |    4 +-
 tools/perf/util/data-convert-json.c           |    2 +-
 tools/perf/util/db-export.c                   |    6 +-
 tools/perf/util/debug.c                       |   22 +-
 tools/perf/util/debug.h                       |    1 +
 tools/perf/util/dlfilter.c                    |   12 +-
 tools/perf/util/dso.c                         |  468 +++---
 tools/perf/util/dso.h                         |  544 ++++++-
 tools/perf/util/dsos.c                        |  529 ++++---
 tools/perf/util/dsos.h                        |   40 +-
 tools/perf/util/event.c                       |   12 +-
 tools/perf/util/header.c                      |    8 +-
 tools/perf/util/hist.c                        |    4 +-
 tools/perf/util/intel-pt.c                    |   22 +-
 tools/perf/util/machine.c                     |  630 +++-----
 tools/perf/util/machine.h                     |   32 +-
 tools/perf/util/map.c                         |   73 +-
 tools/perf/util/map.h                         |   16 +-
 tools/perf/util/maps.c                        | 1398 +++++++++++------
 tools/perf/util/maps.h                        |  105 +-
 tools/perf/util/probe-event.c                 |   62 +-
 tools/perf/util/rb_resort.h                   |    5 -
 .../scripting-engines/trace-event-python.c    |   21 +-
 tools/perf/util/session.c                     |   21 +
 tools/perf/util/session.h                     |    2 +
 tools/perf/util/sort.c                        |   19 +-
 tools/perf/util/srcline.c                     |   65 +-
 tools/perf/util/symbol-elf.c                  |  132 +-
 tools/perf/util/symbol.c                      |  275 ++--
 tools/perf/util/symbol_fprintf.c              |    4 +-
 tools/perf/util/synthetic-events.c            |  134 +-
 tools/perf/util/thread.c                      |   48 +-
 tools/perf/util/thread.h                      |    6 -
 tools/perf/util/threads.c                     |  186 +++
 tools/perf/util/threads.h                     |   35 +
 tools/perf/util/unwind-libunwind-local.c      |   50 +-
 tools/perf/util/unwind-libunwind.c            |    9 +-
 tools/perf/util/vdso.c                        |   89 +-
 71 files changed, 3691 insertions(+), 2496 deletions(-)
 create mode 100644 tools/perf/util/threads.c
 create mode 100644 tools/perf/util/threads.h

-- 
2.43.0.rc2.451.g8631bc7472-goog


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

end of thread, other threads:[~2023-12-20 18:07 UTC | newest]

Thread overview: 56+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-07  1:16 [PATCH v6 00/47] maps/threads/dsos memory improvements and fixes Ian Rogers
2023-12-07  1:16 ` [PATCH v6 01/47] perf map: Improve map/unmap parameter names Ian Rogers
2023-12-11 23:38   ` Namhyung Kim
2023-12-11 23:39     ` Namhyung Kim
2023-12-11 23:52       ` Ian Rogers
2023-12-19  6:06         ` Namhyung Kim
2023-12-07  1:16 ` [PATCH v6 02/47] perf maps: Add maps__for_each_map to iterate maps holding the lock Ian Rogers
2023-12-07  1:16 ` [PATCH v6 03/47] perf events x86: Use function to add missing lock Ian Rogers
2023-12-07  1:16 ` [PATCH v6 04/47] perf report: Use function to add missing maps lock Ian Rogers
2023-12-07  1:16 ` [PATCH v6 05/47] perf tests: " Ian Rogers
2023-12-07  1:16 ` [PATCH v6 06/47] perf machine: " Ian Rogers
2023-12-07  1:16 ` [PATCH v6 07/47] perf probe-event: " Ian Rogers
2023-12-07  1:16 ` [PATCH v6 08/47] perf symbol: " Ian Rogers
2023-12-07  1:16 ` [PATCH v6 09/47] perf synthetic-events: " Ian Rogers
2023-12-07  1:16 ` [PATCH v6 10/47] perf thread: " Ian Rogers
2023-12-07  1:16 ` [PATCH v6 11/47] perf unwind: " Ian Rogers
2023-12-07  1:16 ` [PATCH v6 12/47] perf vdso: " Ian Rogers
2023-12-07  1:16 ` [PATCH v6 13/47] perf maps: Reduce scope of maps__for_each_entry Ian Rogers
2023-12-07  1:16 ` [PATCH v6 14/47] perf maps: Add remove maps function to remove a map based on callback Ian Rogers
2023-12-07  1:16 ` [PATCH v6 15/47] perf debug: Expose debug file Ian Rogers
2023-12-07  1:16 ` [PATCH v6 16/47] perf maps: Refactor maps__fixup_overlappings Ian Rogers
2023-12-07  1:16 ` [PATCH v6 17/47] perf maps: Do simple merge if given map doesn't overlap Ian Rogers
2023-12-07  1:16 ` [PATCH v6 18/47] perf maps: Rename clone to copy from Ian Rogers
2023-12-07  1:16 ` [PATCH v6 19/47] perf maps: Add maps__load_first Ian Rogers
2023-12-07  1:16 ` [PATCH v6 20/47] perf maps: Add find next entry to give entry after the given map Ian Rogers
2023-12-07  1:16 ` [PATCH v6 21/47] perf maps: Reduce scope of map_rb_node and maps internals Ian Rogers
2023-12-07  1:16 ` [PATCH v6 22/47] perf maps: Fix up overlaps during fixup_end Ian Rogers
2023-12-07  1:16 ` [PATCH v6 23/47] perf maps: Switch from rbtree to lazily sorted array for addresses Ian Rogers
2023-12-07  1:16 ` [PATCH v6 24/47] perf maps: Get map before returning in maps__find Ian Rogers
2023-12-07  1:16 ` [PATCH v6 25/47] perf maps: Get map before returning in maps__find_by_name Ian Rogers
2023-12-07  1:17 ` [PATCH v6 26/47] perf maps: Get map before returning in maps__find_next_entry Ian Rogers
2023-12-07  1:17 ` [PATCH v6 27/47] perf maps: Hide maps internals Ian Rogers
2023-12-07  1:17 ` [PATCH v6 28/47] perf maps: Locking tidy up of nr_maps Ian Rogers
2023-12-07  1:17 ` [PATCH v6 29/47] perf dso: Reorder variables to save space in struct dso Ian Rogers
2023-12-07  1:17 ` [PATCH v6 30/47] perf report: Sort child tasks by tid Ian Rogers
2023-12-07  1:17 ` [PATCH v6 31/47] perf trace: Ignore thread hashing in summary Ian Rogers
2023-12-07  1:17 ` [PATCH v6 32/47] perf machine: Move fprintf to for_each loop and a callback Ian Rogers
2023-12-07  1:17 ` [PATCH v6 33/47] perf threads: Move threads to its own files Ian Rogers
2023-12-07  1:17 ` [PATCH v6 34/47] perf threads: Switch from rbtree to hashmap Ian Rogers
2023-12-07  1:17 ` [PATCH v6 35/47] perf threads: Reduce table size from 256 to 8 Ian Rogers
2023-12-07  1:17 ` [PATCH v6 36/47] perf dsos: Attempt to better abstract dsos internals Ian Rogers
2023-12-07  1:17 ` [PATCH v6 37/47] perf dsos: Tidy reference counting and locking Ian Rogers
2023-12-07  1:17 ` [PATCH v6 38/47] perf dsos: Add dsos__for_each_dso Ian Rogers
2023-12-07  1:17 ` [PATCH v6 39/47] perf dso: Move dso functions out of dsos Ian Rogers
2023-12-07  1:17 ` [PATCH v6 40/47] perf dsos: Switch more loops to dsos__for_each_dso Ian Rogers
2023-12-07  1:17 ` [PATCH v6 41/47] perf dsos: Switch backing storage to array from rbtree/list Ian Rogers
2023-12-07  1:17 ` [PATCH v6 42/47] perf dsos: Remove __dsos__addnew Ian Rogers
2023-12-07  1:17 ` [PATCH v6 43/47] perf dsos: Remove __dsos__findnew_link_by_longname_id Ian Rogers
2023-12-07  1:17 ` [PATCH v6 44/47] perf dsos: Switch hand code to bsearch Ian Rogers
2023-12-07  1:17 ` [PATCH v6 45/47] perf dso: Add reference count checking and accessor functions Ian Rogers
2023-12-07  1:17 ` [PATCH v6 46/47] perf dso: Reference counting related fixes Ian Rogers
2023-12-07  1:17 ` [PATCH v6 47/47] perf dso: Use container_of to avoid a pointer in dso_data Ian Rogers
2023-12-18 20:53 ` [PATCH v6 00/47] maps/threads/dsos memory improvements and fixes Arnaldo Carvalho de Melo
2023-12-19  1:27   ` Arnaldo Carvalho de Melo
2023-12-20 17:46     ` Arnaldo Carvalho de Melo
2023-12-20 18:07       ` Arnaldo Carvalho de Melo

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).