RFC perf tools: Add threads to record command
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v2 RFC Latest48 patches 47 repliesIn review
- v1 RFC49 patches 1 replySuperseded
Changes in v2 from the cover letter
- rebased to current Arnaldo's perf/core
(also based on few fixes from my perf/core, see the branch details below)
Patches in v2 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/48 | perf tools: Remove perf_tool from event_op2tools/ tools/ tools/ +11 more | +103 | 0 replies | |
| 2/48 | perf tools: Remove perf_tool from event_op3tools/ tools/ tools/ +2 more | +12 | 2 replies | |
| 3/48 | perf tools: Pass struct perf_mmap into auxtrace_mmap__read* functionstools/ tools/ tools/ | +22 | 0 replies | |
| 4/48 | perf tools: Add struct perf_mmap arg into record__writetools/ tools/ tools/ +2 more | +20 | 0 replies | |
| 5/48 | perf tools: Use a software dummy event to track task/mmap eventstools/ tools/ tools/ | +46 | 0 replies | |
| 6/48 | perf tools: Create separate mmap for dummy tracking eventtools/ tools/ tools/ +1 more | +58 | 0 replies | |
| 7/48 | perf tools: Extend perf_evlist__mmap_ex() to use track mmaptools/ tools/ tools/ | +6 | 0 replies | |
| 8/48 | perf report: Skip dummy tracking eventtools/ tools/ tools/ | +30 | 0 replies | |
| 9/48 | perf tools: Make copyfile_offset globaltools/ tools/ | +3 | 2 replies | |
| 10/48 | perf tools: Add HEADER_DATA_INDEX featuretools/ tools/ tools/ | +80 | 0 replies | |
| 11/48 | perf tools: Handle indexed data file properlytools/ tools/ tools/ +2 more | +48 | 0 replies | |
| 12/48 | perf tools: Add perf_data__create_index functiontools/ tools/ | +69 | 0 replies | |
| 13/48 | perf record: Add --index option for building index tabletools/ tools/ tools/ +1 more | +146 | 0 replies | |
| 14/48 | perf tools: Introduce thread__comm(_str)_by_time() helperstools/ tools/ | +34 | 0 replies | |
| 15/48 | perf tools: Add a test case for thread comm handlingtools/ tools/ tools/ +1 more | +54 | 0 replies | |
| 16/48 | perf tools: Use thread__comm_by_time() when adding hist entriestools/ | +2 | 0 replies | |
| 17/48 | perf tools: Convert dead thread list into rbtreetools/ tools/ tools/ +2 more | +93 | 0 replies | |
| 18/48 | perf tools: Introduce machine__find*_thread_by_time()tools/ tools/ tools/ +5 more | +148 | 0 replies | |
| 19/48 | perf tools: Add thread::exited flagtools/ tools/ | +6 | 0 replies | |
| 20/48 | perf tools: Add a test case for timed thread handlingtools/ tools/ tools/ +1 more | +187 | 0 replies | |
| 21/48 | perf tools: Maintain map groups list in a leader threadtools/ tools/ tools/ +4 more | +142 | 0 replies | |
| 22/48 | perf tools: Introduce thread__find_symbol_by_time() and friendstools/ tools/ tools/ +1 more | +92 | 0 replies | |
| 23/48 | perf callchain: Use thread__find_addr_location_by_time() and friendstools/ tools/ tools/ | +22 | 0 replies | |
| 24/48 | perf tools: Add a test case for timed map groups handlingtools/ tools/ tools/ +1 more | +100 | 0 replies | |
| 25/48 | perf tools: Save timestamp of a map creationtools/ tools/ tools/ +5 more | +42 | 0 replies | |
| 26/48 | perf tools: Introduce map_groups__{insert,find}_by_time()tools/ tools/ | +88 | 0 replies | |
| 27/48 | perf tools: Use map_groups__find_addr_by_time()tools/ tools/ | +79 | 0 replies | |
| 28/48 | perf tools: Add testcase for managing maps with timetools/ tools/ tools/ +1 more | +96 | 0 replies | |
| 29/48 | perf callchain: Maintain libunwind's address space in map_groupstools/ tools/ tools/ +2 more | +29 | 2 replies | |
| 30/48 | perf tools: Rename perf_evlist__munmap_filtered to perf_mmap__put_filteredtools/ tools/ | +4 | 0 replies | |
| 31/48 | tools lib fd array: Introduce fdarray__add_clone functiontools/ tools/ | +18 | 0 replies | |
| 32/48 | tools lib subcmd: Add OPT_INTEGER_OPTARG|_SET optionstools/ tools/ | +11 | 0 replies | |
| 33/48 | perf tools: Move __perf_session__process_events args into structtools/ | +25 | 0 replies | |
| 34/48 | perf ui progress: Fix index progress displaytools/ | +23 | 0 replies | |
| 35/48 | perf tools: Add threads debug variabletools/ tools/ tools/ | +4 | 0 replies | |
| 36/48 | perf tools: Add perf_mmap__read_tail functiontools/ | +7 | 0 replies | |
| 37/48 | perf record: Introduce struct record_threadtools/ | +179 | 2 replies | |
| 38/48 | perf record: Read record thread's mmapstools/ | +20 | 2 replies | |
| 39/48 | perf record: Move waking into struct recordtools/ | +5 | 2 replies | |
| 40/48 | perf record: Move samples into struct record_threadtools/ | +6 | 0 replies | |
| 41/48 | perf record: Move bytes_written into struct record_threadtools/ | +13 | 0 replies | |
| 42/48 | perf record: Add record_thread start/stop/process functionstools/ | +92 | 0 replies | |
| 43/48 | perf record: Wait for all threads being startedtools/ | +33 | 0 replies | |
| 44/48 | perf record: Add --threads optiontools/ | +36 | 1 reply | |
| 45/48 | perf record: Add --thread-stats option supporttools/ | +76 | 0 replies | |
| 46/48 | perf record: Add maps to --thread-stats outputtools/ | +33 | 0 replies | |
| 47/48 | perf record: Spread maps for --threads optiontools/ | +125 | 6 replies | |
| 48/48 | perf record: Spread maps for --threads=X optiontools/ | +98 | 0 replies |
Reviews trailers per patch
None of the 48 patches has a Reviewed-by or Acked-by.
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.
Cover letter [RFCv2 00/48] perf tools: Add threads to record command
hi,
sending *RFC* for threads support in perf record command.
In big picture this patchset adds perf record --threads option that allows to create threads in following modes:
1) single thread mode (current)
$ perf record ... $ perf record --threads=1 ...
- all maps are read/stored under process thread
2) mode with specific (X) number of threads
$ perf record --threads=X ...
- maps are spread equaly among threads
3) mode that creates thread for every monitored memory map
$ perf record --threads ...
- which in perf record is equal to number of CPUs, and it pins each thread to its map's cpu:
4) TODO - NUMA aware threads/maps separation
...
The perf.data stays as a single file.
v2 changes:
- rebased to current Arnaldo's perf/core
(also based on few fixes from my perf/core, see the branch details below)
This patchset contains lot of preparation changes to make threaded record possible:
- Namhyung's changes to create multiple data streams in perf data file, which allows having each thread data being stored in separate files and merged into single perf data after
- Namhyung's changes to create track mmaps for auxiliary events
- Namhyung's changes to search for threads/mmaps/comms using the time. This is needed because we have now multiple data streams which are processed separately, but they all need access to complete auxiliary events data (threads/mmaps/comms). That's also a reason why the auxiliary events are stored into separate data stream, which is processed before real data.
- the rest of the code that adds threads abstraction into record command allows to create them and distribute maps among them
- other preparational changes
The threaded monitoring currently can't monitor backward maps and there are probably more limitations which I haven't spotted yet.
So far I tested on laptop:
http://people.redhat.com/~jolsa/record_threads/test-4CPU.txt
and a one bigger server:
http://people.redhat.com/~jolsa/record_threads/test-208CPU.txt
I can see decrease in recorded LOST events, but both the benchmark and the monitoring must be carefully configured wrt:
- number of events (frequency)
- size of the memory maps
- size of events (callchains)
- final perf.data size
It's also available in:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/record_threads
thoughts? ;-) thanks
jirka
---
Jiri Olsa (30):
perf tools: Remove perf_tool from event_op2
perf tools: Remove perf_tool from event_op3
perf tools: Pass struct perf_mmap into auxtrace_mmap__read* functions perf tools: Add struct perf_mmap arg into record__write
perf tools: Create separate mmap for dummy tracking event perf tools: Make copyfile_offset global
perf tools: Add perf_data__create_index function
perf record: Add --index option for building index table
perf tools: Convert dead thread list into rbtree
perf tools: Add thread::exited flag
perf callchain: Maintain libunwind's address space in map_groups perf tools: Rename perf_evlist__munmap_filtered to perf_mmap__put_filtered tools lib fd array: Introduce fdarray__add_clone function tools lib subcmd: Add OPT_INTEGER_OPTARG|_SET options
perf tools: Move __perf_session__process_events args into struct perf ui progress: Fix index progress display
perf tools: Add threads debug variable
perf tools: Add perf_mmap__read_tail function
perf record: Introduce struct record_thread
perf record: Read record thread's mmaps
perf record: Move waking into struct record
perf record: Move samples into struct record_thread
perf record: Move bytes_written into struct record_thread perf record: Add record_thread start/stop/process functions perf record: Wait for all threads being started
perf record: Add --threads option
perf record: Add --thread-stats option support
perf record: Add maps to --thread-stats output
perf record: Spread maps for --threads option
perf record: Spread maps for --threads=X option
Namhyung Kim (18):
perf tools: Use a software dummy event to track task/mmap events perf tools: Extend perf_evlist__mmap_ex() to use track mmap perf report: Skip dummy tracking event
perf tools: Add HEADER_DATA_INDEX feature
perf tools: Handle indexed data file properly
perf tools: Introduce thread__comm(_str)_by_time() helpers perf tools: Add a test case for thread comm handling perf tools: Use thread__comm_by_time() when adding hist entries perf tools: Introduce machine__find*_thread_by_time() perf tools: Add a test case for timed thread handling perf tools: Maintain map groups list in a leader thread perf tools: Introduce thread__find_symbol_by_time() and friends perf callchain: Use thread__find_addr_location_by_time() and friends perf tools: Add a test case for timed map groups handling perf tools: Save timestamp of a map creation
perf tools: Introduce map_groups__{insert,find}_by_time() perf tools: Use map_groups__find_addr_by_time()
perf tools: Add testcase for managing maps with time
tools/lib/api/fd/array.c | 17 + tools/lib/api/fd/array.h | 1 + tools/lib/subcmd/parse-options.c | 2 + tools/lib/subcmd/parse-options.h | 9 + tools/perf/Documentation/perf-record.txt | 4 + tools/perf/Documentation/perf.txt | 1 + tools/perf/builtin-annotate.c | 7 +- tools/perf/builtin-inject.c | 32 +- tools/perf/builtin-record.c | 899 +++++++++++++++++++++++++++++-- tools/perf/builtin-report.c | 12 +- tools/perf/builtin-script.c | 38 +- tools/perf/builtin-stat.c | 23 +- tools/perf/perf.c | 1 + tools/perf/perf.h | 3 + tools/perf/tests/Build | 4 + tools/perf/tests/builtin-test.c | 16 + tools/perf/tests/dwarf-unwind.c | 4 +- tools/perf/tests/hists_common.c | 2 +- tools/perf/tests/hists_link.c | 2 +- tools/perf/tests/tests.h | 4 + tools/perf/tests/thread-comm.c | 48 ++ tools/perf/tests/thread-lookup-time.c | 181 +++++++ tools/perf/tests/thread-map-time.c | 90 ++++ tools/perf/tests/thread-mg-share.c | 7 +- tools/perf/tests/thread-mg-time.c | 94 ++++ tools/perf/ui/browsers/hists.c | 30 +- tools/perf/ui/gtk/hists.c | 3 + tools/perf/util/auxtrace.c | 30 +- tools/perf/util/auxtrace.h | 21 +- tools/perf/util/data.c | 64 +++ tools/perf/util/data.h | 5 + tools/perf/util/debug.c | 2 + tools/perf/util/debug.h | 1 + tools/perf/util/dso.c | 2 +- tools/perf/util/event.c | 135 ++++- tools/perf/util/evlist.c | 96 +++- tools/perf/util/evlist.h | 7 +- tools/perf/util/evsel.h | 15 + tools/perf/util/header.c | 93 +++- tools/perf/util/header.h | 18 +- tools/perf/util/hist.c | 4 +- tools/perf/util/intel-pt.c | 2 +- tools/perf/util/machine.c | 293 ++++++++-- tools/perf/util/machine.h | 22 +- tools/perf/util/map.c | 79 ++- tools/perf/util/map.h | 40 +- tools/perf/util/mmap.c | 6 +- tools/perf/util/mmap.h | 33 +- tools/perf/util/session.c | 178 +++--- tools/perf/util/session.h | 5 +- tools/perf/util/stat.c | 5 +- tools/perf/util/stat.h | 5 +- tools/perf/util/symbol-elf.c | 2 +- tools/perf/util/symbol.c | 4 +- tools/perf/util/thread.c | 200 ++++++- tools/perf/util/thread.h | 27 +- tools/perf/util/tool.h | 7 +- tools/perf/util/unwind-libdw.c | 6 +- tools/perf/util/unwind-libunwind-local.c | 39 +- tools/perf/util/unwind-libunwind.c | 9 +- tools/perf/util/unwind.h | 7 +- tools/perf/util/util.c | 2 +- tools/perf/util/util.h | 2 + 63 files changed, 2608 insertions(+), 392 deletions(-) create mode 100644 tools/perf/tests/thread-comm.c create mode 100644 tools/perf/tests/thread-lookup-time.c create mode 100644 tools/perf/tests/thread-map-time.c create mode 100644 tools/perf/tests/thread-mg-time.c