[BUG] Perf refers to garbage events on 32-bit.

From: David Miller
Date: Mon Oct 15 2012 - 15:44:31 EST



When the perf tool is built 32-bit, it uses a sliding window mechanism
to mmap the events from the perf.data file.

However things stop working once we get past 8 times the 32-bit window
size (which is 32MB).

That's because the session code that reads in the events maintains an
array of 8 mmap'd areas, and wraps around to the first, remapping it,
if it runs through the full set of 8 entries.

But this doesn't work since the perf backends maintain references to
the entry pointers (in iterators, etc.). But after a remap, that
entry points to a random location in the newly mmap()'d area.

This means any perf.data file larger than 8 * 32MB cannot be correctly
analyzed by the perf tools on 32-bit.

The best solution is probably to make the mmap array variable size,
trying to map everything in sliding window sized chunks, and fail if
we run out of address space. There are hard dependencies in the perf
code to being able to keep all of the events from a perf.data file
in memory at one time.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/