linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v7 00/25] maps/threads/dsos memory improvements and fixes
@ 2024-01-03  5:06 Ian Rogers
  2024-01-03  5:06 ` [PATCH v7 01/25] perf maps: Switch from rbtree to lazily sorted array for addresses Ian Rogers
                   ` (25 more replies)
  0 siblings, 26 replies; 31+ messages in thread
From: Ian Rogers @ 2024-01-03  5:06 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.

v7:
 - rebase to latest perf-tools-next where 22 patches were applied by Arnaldo.
 - resolve merge conflicts, in particular with fc044c53b99f ("perf
   annotate-data: Add dso->data_types tree") that required more dso
   accessor functions.

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

Ian Rogers (25):
  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/builtin-annotate.c                 |    8 +-
 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                   |  209 +--
 tools/perf/builtin-script.c                   |    8 +-
 tools/perf/builtin-top.c                      |    4 +-
 tools/perf/builtin-trace.c                    |   43 +-
 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                       |    7 +-
 tools/perf/tests/symbols.c                    |    2 +-
 tools/perf/tests/thread-maps-share.c          |    8 +-
 tools/perf/tests/vmlinux-kallsyms.c           |   16 +-
 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-data.c               |    6 +-
 tools/perf/util/annotate.c                    |   45 +-
 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         |    8 +-
 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/dlfilter.c                    |   12 +-
 tools/perf/util/dso.c                         |  469 +++---
 tools/perf/util/dso.h                         |  549 +++++--
 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                     |  570 +++-----
 tools/perf/util/machine.h                     |   32 +-
 tools/perf/util/map.c                         |   73 +-
 tools/perf/util/maps.c                        | 1280 +++++++++++------
 tools/perf/util/maps.h                        |   65 +-
 tools/perf/util/probe-event.c                 |   26 +-
 tools/perf/util/rb_resort.h                   |    5 -
 .../util/scripting-engines/trace-event-perl.c |    6 +-
 .../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                      |  217 +--
 tools/perf/util/symbol_fprintf.c              |    4 +-
 tools/perf/util/synthetic-events.c            |   24 +-
 tools/perf/util/thread.c                      |    8 +-
 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      |   20 +-
 tools/perf/util/unwind-libunwind.c            |    9 +-
 tools/perf/util/vdso.c                        |   56 +-
 69 files changed, 3127 insertions(+), 2158 deletions(-)
 create mode 100644 tools/perf/util/threads.c
 create mode 100644 tools/perf/util/threads.h

-- 
2.43.0.472.g3155946c3a-goog


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

end of thread, other threads:[~2024-02-06  0:37 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-03  5:06 [PATCH v7 00/25] maps/threads/dsos memory improvements and fixes Ian Rogers
2024-01-03  5:06 ` [PATCH v7 01/25] perf maps: Switch from rbtree to lazily sorted array for addresses Ian Rogers
2024-02-02  2:48   ` Namhyung Kim
2024-02-02  4:20     ` Ian Rogers
2024-02-02  4:21       ` Ian Rogers
2024-02-06  0:37       ` Namhyung Kim
2024-01-03  5:06 ` [PATCH v7 02/25] perf maps: Get map before returning in maps__find Ian Rogers
2024-01-03  5:06 ` [PATCH v7 03/25] perf maps: Get map before returning in maps__find_by_name Ian Rogers
2024-01-03  5:06 ` [PATCH v7 04/25] perf maps: Get map before returning in maps__find_next_entry Ian Rogers
2024-01-03  5:06 ` [PATCH v7 05/25] perf maps: Hide maps internals Ian Rogers
2024-01-03  5:06 ` [PATCH v7 06/25] perf maps: Locking tidy up of nr_maps Ian Rogers
2024-01-03  5:06 ` [PATCH v7 07/25] perf dso: Reorder variables to save space in struct dso Ian Rogers
2024-01-03  5:06 ` [PATCH v7 08/25] perf report: Sort child tasks by tid Ian Rogers
2024-01-03  5:06 ` [PATCH v7 09/25] perf trace: Ignore thread hashing in summary Ian Rogers
2024-01-03  5:06 ` [PATCH v7 10/25] perf machine: Move fprintf to for_each loop and a callback Ian Rogers
2024-01-03  5:06 ` [PATCH v7 11/25] perf threads: Move threads to its own files Ian Rogers
2024-01-03  5:06 ` [PATCH v7 12/25] perf threads: Switch from rbtree to hashmap Ian Rogers
2024-01-03  5:06 ` [PATCH v7 13/25] perf threads: Reduce table size from 256 to 8 Ian Rogers
2024-01-03  5:06 ` [PATCH v7 14/25] perf dsos: Attempt to better abstract dsos internals Ian Rogers
2024-01-03  5:06 ` [PATCH v7 15/25] perf dsos: Tidy reference counting and locking Ian Rogers
2024-01-03  5:06 ` [PATCH v7 16/25] perf dsos: Add dsos__for_each_dso Ian Rogers
2024-01-03  5:06 ` [PATCH v7 17/25] perf dso: Move dso functions out of dsos Ian Rogers
2024-01-03  5:06 ` [PATCH v7 18/25] perf dsos: Switch more loops to dsos__for_each_dso Ian Rogers
2024-01-03  5:06 ` [PATCH v7 19/25] perf dsos: Switch backing storage to array from rbtree/list Ian Rogers
2024-01-03  5:06 ` [PATCH v7 20/25] perf dsos: Remove __dsos__addnew Ian Rogers
2024-01-03  5:06 ` [PATCH v7 21/25] perf dsos: Remove __dsos__findnew_link_by_longname_id Ian Rogers
2024-01-03  5:06 ` [PATCH v7 22/25] perf dsos: Switch hand code to bsearch Ian Rogers
2024-01-03  5:06 ` [PATCH v7 23/25] perf dso: Add reference count checking and accessor functions Ian Rogers
2024-01-03  5:06 ` [PATCH v7 24/25] perf dso: Reference counting related fixes Ian Rogers
2024-01-03  5:06 ` [PATCH v7 25/25] perf dso: Use container_of to avoid a pointer in dso_data Ian Rogers
2024-01-31 22:22 ` [PATCH v7 00/25] maps/threads/dsos memory improvements and fixes 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).