linux/tools/perf
David Miller 35d48ddfc0 perf tools: Fix mmap limitations on 32-bit
This is a suggested patch to fix the bug I reported at:

	http://marc.info/?l=linux-kernel&m=135033028924652&w=2

Essentially, there is a hard requirement that when perf analyzes a
trace, it must have the entire thing mmap()'d.

Therefore the scheme used on 32-bit where we have a fixed (8) number of
32MB mmaps, and cycle through them, simply does not work.

One of the reasons this requirement exists is because the iterators
maintain references to perf entry objects and those references don't
just simply go away when this mmap code decides to cycle an old mmap
area out and reuse it.  At this point, those entry pointers now point to
garbage resulting in unpredictable behavior and crashes.

It is better to try to mmap() as much as we can and if we do actually
run into address space limitations, the failure of the mmap() call will
indicate that and stop processing.

I noticed that perf_session->mmap_window is set to a constant in one
location, and only used in one other location.  So I got rid of it
altogether.

So we adjust the size of the mmaps[] array to the maximum we could need.
On 64-bit we only need one slot.  On 32-bit we could need up to 128 (128
* 32MB == 4GB).

I've verified that this allows a large (~600MB) perf.data file to be
analyzed properly with a 32-bit perf binary, which previously was not
possible.

Signed-off-by: David S. Miller <davem@davemloft.net>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20121110.141219.582924082787523608.davem@davemloft.net
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2012-12-09 08:46:05 -03:00
..
arch Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00
bench perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
config perf tools: Always show CHK message when doing try-cc 2012-10-26 11:22:24 -02:00
Documentation perf tools: Don't check configuration on make clean 2012-12-09 08:46:04 -03:00
python perf python: Use attr.watermark in twatch.py 2012-01-30 18:38:23 -02:00
scripts perf scripts: Add event_analyzing_sample-record/report 2012-09-17 13:11:15 -03:00
tests Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00
ui perf ui/helpline: Introduce ui_helpline__vshow() 2012-12-09 08:46:04 -03:00
util perf tools: Fix mmap limitations on 32-bit 2012-12-09 08:46:05 -03:00
.gitignore perf tools: Ignore compiled python binaries 2012-09-07 12:10:58 -03:00
bash_completion perf tools: Complete tracepoint event names 2012-10-04 12:44:52 -03:00
builtin-annotate.c perf tools: Introduce struct hist_browser_timer 2012-11-05 14:03:58 -03:00
builtin-bench.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
builtin-buildid-cache.c perf tools: Move BUILD_ID_SIZE into build-id object 2012-10-29 11:35:32 -02:00
builtin-buildid-list.c perf tools: Add a global variable "const char *input_name" 2012-10-29 11:45:34 -02:00
builtin-diff.c perf diff: Use hists__link when not pairing just with baseline 2012-11-08 18:08:26 -03:00
builtin-evlist.c perf tools: Add a global variable "const char *input_name" 2012-10-29 11:45:34 -02:00
builtin-help.c perf help: Fix --help for builtins 2012-10-22 12:35:49 -02:00
builtin-inject.c perf inject: Mark a dso if it's used 2012-10-26 11:22:25 -02:00
builtin-kmem.c perf tools: Add a global variable "const char *input_name" 2012-10-29 11:45:34 -02:00
builtin-kvm.c Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00
builtin-list.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
builtin-lock.c perf tools: Add a global variable "const char *input_name" 2012-10-29 11:45:34 -02:00
builtin-probe.c perf probe: Don't use globals where not needed to 2012-10-02 18:36:37 -03:00
builtin-record.c perf tools: Ensure single disable call per event in record comand 2012-11-14 16:52:09 -03:00
builtin-report.c perf report: Postpone objdump check until annotation requested 2012-11-05 14:03:58 -03:00
builtin-sched.c perf tools: Add a global variable "const char *input_name" 2012-10-29 11:45:34 -02:00
builtin-script.c perf script: Add more filter to find_scripts() 2012-10-29 11:46:23 -02:00
builtin-stat.c perf evsel: Introduce is_group_member method 2012-11-14 16:53:45 -03:00
builtin-timechart.c perf tools: Add a global variable "const char *input_name" 2012-10-29 11:45:34 -02:00
builtin-top.c perf top: Add missing newline on pr_err call 2012-12-09 08:46:05 -03:00
builtin-trace.c perf trace: Use sched:sched_stat_runtime to provide a thread summary 2012-10-25 10:57:43 -02:00
builtin.h perf trace: New tool 2012-09-26 20:42:23 -03:00
command-list.txt perf trace: New tool 2012-09-26 20:42:23 -03:00
CREDITS perf_counter tools: Add CREDITS file for Git contributors 2009-06-24 19:54:29 +02:00
design.txt perf tools: Update ioctl documentation for PERF_IOC_FLAG_GROUP 2012-05-31 11:38:42 -03:00
Makefile perf tools: Don't check configuration on make clean 2012-12-09 08:46:04 -03:00
MANIFEST perf kvm: Events analysis tool 2012-09-21 12:51:22 -03:00
perf-archive.sh perf archive: Make 'f' the last parameter for tar 2012-09-17 13:10:42 -03:00
perf.c perf tools: Add gtk.<command> config option for launching GTK browser 2012-11-14 16:51:30 -03:00
perf.h Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00