2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-28 23:23:55 +08:00
linux-next/tools/perf/util
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
..
include perf evsel: Introduce perf_evlist 2011-01-22 19:56:28 -02:00
scripting-engines perf: Rename 'perf trace' to 'perf script' 2010-11-16 19:37:44 +01:00
ui perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
abspath.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
alias.c perf_counter tools: Add more warnings and fix/annotate them 2009-07-01 12:49:48 +02:00
bitmap.c perf tools: Don't use code surrounded by __KERNEL__ 2010-05-02 12:00:44 -03:00
build-id.c perf session: Parse sample earlier 2010-12-04 23:05:19 -02:00
build-id.h perf annotate: Use build-ids to find the right DSO 2010-05-20 12:15:33 -03:00
cache.h perf tools: add test for strlcpy() 2010-08-21 11:22:47 -03:00
callchain.c perf callchain: Feed callchains into a cursor 2011-01-22 19:56:31 -02:00
callchain.h perf callchain: Feed callchains into a cursor 2011-01-22 19:56:31 -02:00
color.c perf hist: Replace ->print() routines by ->snprintf() equivalents 2010-04-02 16:28:15 -03:00
color.h perf hist: Replace ->print() routines by ->snprintf() equivalents 2010-04-02 16:28:15 -03:00
config.c perf buildid: add perfconfig option to specify buildid cache dir 2010-06-05 09:34:04 -03:00
cpumap.c perf tools: Add missing cpu_map__delete() 2011-01-22 19:56:30 -02:00
cpumap.h perf tools: Add missing cpu_map__delete() 2011-01-22 19:56:30 -02:00
ctype.c perf tools: Move graph_line and graph_dotted_line from top 2009-11-23 21:55:20 +01:00
debug.c perf debug: Simplify trace_event 2010-11-30 20:58:42 -02:00
debug.h perf tools: Fix lost and unknown events handling 2010-11-27 02:41:01 -02:00
debugfs.c perf trace: Clean up find_debugfs() 2009-12-28 10:36:36 +01:00
debugfs.h perf tools: Mount debugfs automatically 2009-12-28 10:36:36 +01:00
environment.c perf_counter tools: Move from Documentation/perf_counter/ to tools/perf/ 2009-06-06 20:33:43 +02:00
event.c perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
event.h perf session: Consolidate the dump code 2010-12-09 11:18:06 -02:00
evlist.c perf evlist: Steal mmap reading routine from 'perf top' 2011-01-22 19:56:30 -02:00
evlist.h perf evlist: Steal mmap reading routine from 'perf top' 2011-01-22 19:56:30 -02:00
evsel.c perf evlist: Move the mmap array from perf_evsel 2011-01-22 19:56:29 -02:00
evsel.h perf evlist: Move the mmap array from perf_evsel 2011-01-22 19:56:29 -02:00
exec_cmd.c perf tools: remove xstrndup, xmalloc, xzalloc 2010-05-18 23:05:28 -03:00
exec_cmd.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
generate-cmdlist.sh perf_counter tools: Move from Documentation/perf_counter/ to tools/perf/ 2009-06-06 20:33:43 +02:00
header.c perf evsel: Introduce perf_evlist 2011-01-22 19:56:28 -02:00
header.h perf evsel: Introduce perf_evlist 2011-01-22 19:56:28 -02:00
help.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
help.h perf tools: Protect header files with a consistent style 2009-09-24 21:27:51 +02:00
hist.c perf callchain: Feed callchains into a cursor 2011-01-22 19:56:31 -02:00
hist.h perf callchain: Feed callchains into a cursor 2011-01-22 19:56:31 -02:00
hweight.c perf tools: Don't use code surrounded by __KERNEL__ 2010-05-02 12:00:44 -03:00
levenshtein.c perf_counter tools: Move from Documentation/perf_counter/ to tools/perf/ 2009-06-06 20:33:43 +02:00
levenshtein.h perf tools: Protect header files with a consistent style 2009-09-24 21:27:51 +02:00
map.c perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
map.h perf probe: Add basic module support 2010-10-21 16:11:44 -02:00
pager.c perf_counter tools: Remove dead code 2009-06-27 06:06:39 +02:00
parse-events.c perf evsel: Introduce perf_evlist 2011-01-22 19:56:28 -02:00
parse-events.h perf evsel: Introduce perf_evlist 2011-01-22 19:56:28 -02:00
parse-options.c perf options: Type check all the remaining OPT_ variants 2010-05-17 16:22:41 -03:00
parse-options.h perf options: add OPT_CALLBACK_DEFAULT_NOOPT 2010-12-06 15:33:29 -02:00
path.c perf tools: add test for strlcpy() 2010-08-21 11:22:47 -03:00
PERF-VERSION-GEN perf: Version String fix, for fallback if not from git 2010-07-05 10:42:58 +02:00
probe-event.c perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
probe-event.h perf probe: Add basic module support 2010-10-21 16:11:44 -02:00
probe-finder.c Merge commit 'v2.6.37-rc8' into perf/core 2011-01-04 08:08:54 +01:00
probe-finder.h perf tools: Remove hardcoded include paths for elfutils 2010-11-19 16:38:04 -02:00
pstack.c perf newt: Make <- zoom out filters 2010-05-14 20:05:21 -03:00
pstack.h perf ui: Move hists browser to util/ui/browsers/ 2010-08-10 16:11:08 -03:00
quote.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
quote.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
run-command.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
run-command.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
session.c perf callchain: Feed callchains into a cursor 2011-01-22 19:56:31 -02:00
session.h perf callchain: Feed callchains into a cursor 2011-01-22 19:56:31 -02:00
sigchain.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
sigchain.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
sort.c perf hist: Better displaying of unresolved DSOs and symbols 2010-12-06 15:12:34 -02:00
sort.h perf: Keep track of the max depth of a callchain 2010-08-22 20:43:17 +02:00
strbuf.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
strbuf.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
string.c perf tools: Fix lazy wildcard matching 2010-12-21 19:15:42 -02:00
strlist.c perf probe: Fix --del to update current event list 2009-12-15 20:22:01 +01:00
strlist.h perf tools: Add for_each macros for strlist 2009-12-15 20:22:02 +01:00
svghelper.c perf tools: Fix time function double declaration with glibc 2011-01-22 19:53:00 -02:00
svghelper.h perf tools: Protect header files with a consistent style 2009-09-24 21:27:51 +02:00
symbol.c perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
symbol.h Merge commit 'v2.6.37-rc8' into perf/core 2011-01-04 08:08:54 +01:00
thread.c perf tools: Refactor all_tids to hold nr and the map 2011-01-04 00:24:16 -02:00
thread.h perf tools: Refactor all_tids to hold nr and the map 2011-01-04 00:24:16 -02:00
trace-event-info.c perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00
trace-event-parse.c Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-05-18 08:19:03 -07:00
trace-event-read.c perf: Use read() instead of lseek() in trace_event_read.c:skip() 2010-05-20 08:37:17 +02:00
trace-event-scripting.c perf trace scripting: Fix extern struct definitions 2010-10-04 12:24:51 -03:00
trace-event.h perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00
types.h perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
usage.c perf top: Fall back to cpu-clock-tick hrtimer sampling if no cycle counter available 2009-06-07 17:31:52 +02:00
util.c perf util: Move do_read from session to util 2011-01-03 16:50:55 -02:00
util.h perf util: Move do_read from session to util 2011-01-03 16:50:55 -02:00
values.c perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
values.h perf tools: Protect header files with a consistent style 2009-09-24 21:27:51 +02:00
wrapper.c perf tools: remove xstrndup, xmalloc, xzalloc 2010-05-18 23:05:28 -03:00
xyarray.c perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00
xyarray.h perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00