linux/tools/perf
Frederic Weisbecker 1b3a0e9592 perf callchain: Feed callchains into a cursor
The callchains are fed with an array of a fixed size.
As a result we iterate over each callchains three times:

- 1st to resolve symbols
- 2nd to filter out context boundaries
- 3rd for the insertion into the tree

This also involves some pairs of memory allocation/deallocation
everytime we insert a callchain, for the filtered out array of
addresses and for the array of symbols that comes along.

Instead, feed the callchains through a linked list with persistent
allocations. It brings several pros like:

- Merge the 1st and 2nd iterations in one. That was possible before
but in a way that would involve allocating an array slightly taller
than necessary because we don't know in advance the number of context
boundaries to filter out.

- Much lesser allocations/deallocations. The linked list keeps
persistent empty entries for the next usages and is extendable at
will.

- Makes it easier for multiple sources of callchains to feed a
stacktrace together. This is deemed to pave the way for cfi based
callchains wherein traditional frame pointer based kernel
stacktraces will precede cfi based user ones, producing an overall
callchain which size is hardly predictable. This requirement
makes the static array obsolete and makes a linked list based
iterator a much more flexible fit.

Basic testing on a big perf file containing callchains (~ 176 MB)
has shown a throughput gain of about 11% with perf report.

Cc: Ingo Molnar <mingo@elte.hu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1294977121-5700-2-git-send-email-fweisbec@gmail.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2011-01-22 19:56:31 -02:00
..
arch [S390] perf: add DWARF register lookup for s390 2011-01-05 12:47:31 +01:00
bench perf bench: Add feature that measures the performance of the arch/x86/lib/memcpy_64.S memcpy routines via 'perf bench mem' 2010-11-26 08:15:57 +01:00
Documentation perf record: Add "nodelay" mode, disabled by default 2011-01-13 11:38:44 -02:00
scripts perf script: Finish the rename from trace to script 2010-12-25 11:29:02 -02:00
util perf callchain: Feed callchains into a cursor 2011-01-22 19:56:31 -02:00
.gitignore perf tools: .gitignore += config.make config.make.autogen 2010-06-17 10:24:31 -03:00
builtin-annotate.c perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
builtin-bench.c perf options: Type check all the remaining OPT_ variants 2010-05-17 16:22:41 -03:00
builtin-buildid-cache.c perf buildid: add perfconfig option to specify buildid cache dir 2010-06-05 09:34:04 -03:00
builtin-buildid-list.c Merge commit 'v2.6.37-rc8' into perf/core 2011-01-04 08:08:54 +01:00
builtin-diff.c perf symbols: Add symfs option for off-box analysis using specified tree 2010-12-21 20:17:51 -02:00
builtin-help.c perf options: Type check all the remaining OPT_ variants 2010-05-17 16:22:41 -03:00
builtin-inject.c perf session: Fallback to unordered processing if no sample_id_all 2010-12-21 20:17:51 -02:00
builtin-kmem.c perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
builtin-kvm.c perf options: Type check all the remaining OPT_ variants 2010-05-17 16:22:41 -03:00
builtin-list.c perf list: Fix large list output by using the pager 2009-08-13 09:05:48 +02:00
builtin-lock.c perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
builtin-probe.c perf probe: Fix use of kernel image path given by 'k' option 2010-12-16 09:41:45 -02:00
builtin-record.c perf record: Use perf_evlist__mmap 2011-01-22 19:56:30 -02:00
builtin-report.c perf callchain: Feed callchains into a cursor 2011-01-22 19:56:31 -02:00
builtin-sched.c perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
builtin-script.c perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
builtin-stat.c perf evsel: Allow specifying if the inherit bit should be set 2011-01-22 19:56:29 -02:00
builtin-test.c perf test: Add test for the evlist mmap routines 2011-01-22 19:56:31 -02:00
builtin-timechart.c perf timechart: Adjust perf timechart to the new power events 2011-01-04 08:16:54 +01:00
builtin-top.c perf evlist: Steal mmap reading routine from 'perf top' 2011-01-22 19:56:30 -02:00
builtin.h perf: Rename 'perf trace' to 'perf script' 2010-11-16 19:37:44 +01:00
command-list.txt Merge branch 'perf/rename' into perf/core 2010-12-01 09:22:19 +01:00
CREDITS perf_counter tools: Add CREDITS file for Git contributors 2009-06-24 19:54:29 +02:00
design.txt perf: Fix few typos + cosmetics 2010-01-13 17:39:44 +01:00
feature-tests.mak perf tools: Remove hardcoded include paths for elfutils 2010-11-19 16:38:04 -02:00
Makefile perf evsel: Introduce perf_evlist 2011-01-22 19:56:28 -02:00
MANIFEST perf packaging: add memcpy to perf MANIFEST 2010-11-30 23:00:10 -02:00
perf-archive.sh perf buildid: add perfconfig option to specify buildid cache dir 2010-06-05 09:34:04 -03:00
perf.c perf evsel: Fix order of event list deletion 2011-01-11 12:51:03 -02:00
perf.h perf record: Move perf_mmap__write_tail to perf.h 2011-01-22 19:56:29 -02:00