linux/tools/perf
Don Zickus 9b32ba71ba perf tools: Add dcacheline sort
In perf's 'mem-mode', one can get access to a whole bunch of details specific to a
particular sample instruction.  A bunch of those details relate to the data
address.

One interesting thing you can do with data addresses is to convert them into a unique
cacheline they belong too.  Organizing these data cachelines into similar groups and sorting
them can reveal cache contention.

This patch creates an alogorithm based on various sample details that can help group
entries together into data cachelines and allows 'perf report' to sort on it.

The algorithm relies on having proper mmap2 support in the kernel to help determine
if the memory map the data address belongs to is private to a pid or globally shared.

The alogortithm is as follows:

o group cpumodes together
o group entries with discovered maps together
o sort on major, minor, inode and inode generation numbers
o if userspace anon, then sort on pid
o sort on cachelines based on data addresses

The 'dcacheline' sort option in 'perf report' only works in 'mem-mode'.

Sample output:

 #
 # Samples: 206  of event 'cpu/mem-loads/pp'
 # Total weight : 2534
 # Sort order   : dcacheline,pid
 #
 # Overhead       Samples                                                          Data Cacheline       Command:  Pid
 # ........  ............  ......................................................................  ..................
 #
    13.22%             1  [k] 0xffff88042f08ebc0                                                       swapper:    0
     9.27%             1  [k] 0xffff88082e8cea80                                                       swapper:    0
     3.59%             2  [k] 0xffffffff819ba180                                                       swapper:    0
     0.32%             1  [k] arch_trigger_all_cpu_backtrace_handler_na.23901+0xffffffffffffffe0       swapper:    0
     0.32%             1  [k] timekeeper_seq+0xfffffffffffffff8                                        swapper:    0

Note:  Added a '+1' to symlen size in hists__calc_col_len to prevent the next column
from prematurely tabbing over and mis-aligning.  Not sure what the problem is.

Signed-off-by: Don Zickus <dzickus@redhat.com>
Link: http://lkml.kernel.org/r/1401208087-181977-8-git-send-email-dzickus@redhat.com
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
2014-06-09 13:34:49 +02:00
..
arch perf tools: Add libdw DWARF post unwind support for ARM 2014-05-16 11:39:29 +02:00
bench Merge branch 'perf-core-for-mingo' into perf/urgent 2014-04-14 16:45:39 +02:00
config perf tools: Fix 'make help' message error 2014-06-03 21:35:12 +02:00
Documentation perf tools: Add dcacheline sort 2014-06-09 13:34:49 +02:00
python perf python: Remove duplicate TID bit from mask 2013-08-07 17:35:25 -03:00
scripts perf tools: Finish the removal of 'self' arguments 2013-11-05 15:32:36 -03:00
tests Revert "perf: Disable PERF_RECORD_MMAP2 support" 2014-06-09 13:34:46 +02:00
ui perf tools: Move elide bool into perf_hpp_fmt struct 2014-06-03 21:34:59 +02:00
util perf tools: Add dcacheline sort 2014-06-09 13:34:49 +02:00
.gitignore perf tools: Ignore 'perf timechart' output file 2013-10-11 12:17:37 -03:00
builtin-annotate.c perf hists: Check if accumulated when adding a hist entry 2014-06-01 14:34:56 +02:00
builtin-bench.c perf bench: Fix segfault at the end of an 'all' execution 2014-04-14 12:55:53 +02:00
builtin-buildid-cache.c perf buildid-cache: Check relocation when checking for existing kcore 2014-01-31 17:21:54 -03:00
builtin-buildid-list.c perf session: Separating data file properties from session 2013-10-21 17:33:25 -03:00
builtin-diff.c perf hists: Check if accumulated when adding a hist entry 2014-06-01 14:34:56 +02:00
builtin-evlist.c perf evlist: Introduce evlist__for_each() & friends 2014-01-13 10:06:25 -03:00
builtin-help.c perf help: Fix --help for builtins 2012-10-22 12:35:49 -02:00
builtin-inject.c perf tools: Fix pipe check regression in attr event callback 2014-06-09 12:20:34 +02:00
builtin-kmem.c perf tools: Use tid for finding thread 2014-05-12 11:09:50 +02:00
builtin-kvm.c perf kvm: Fix 'Min time' counting in report command 2014-04-20 00:14:08 +02:00
builtin-list.c perf list: Add usage 2013-11-05 14:26:41 -03:00
builtin-lock.c perf lock: Introduce --list-cmds for use by scripts 2014-04-16 17:16:04 +02:00
builtin-mem.c perf mem: Introduce --list-cmds for use by scripts 2014-04-16 17:16:04 +02:00
builtin-probe.c perf probe: Replace line_list with intlist 2014-02-18 09:34:50 -03:00
builtin-record.c perf/tool: Add conditional branch filter 'cond' to perf record 2014-06-05 12:30:19 +02:00
builtin-report.c perf tools: Add callback function to hist_entry_iter 2014-06-01 14:35:05 +02:00
builtin-sched.c perf tools: Introduce hists__inc_nr_samples() 2014-06-01 14:34:55 +02:00
builtin-script.c perf evlist: Introduce evlist__for_each() & friends 2014-01-13 10:06:25 -03:00
builtin-stat.c perf stat: Initialize statistics correctly 2014-04-14 12:56:06 +02:00
builtin-timechart.c perf symbols: Record the reason for filtering an address_location 2014-03-18 18:16:57 -03:00
builtin-top.c perf top: Add top.children config option 2014-06-01 14:35:07 +02:00
builtin-trace.c perf trace: Decode architecture-specific signal numbers 2014-03-10 11:10:45 -03:00
builtin.h perf tools: Add new mem command for memory access profiling 2013-04-01 12:21:44 -03:00
command-list.txt perf tools: Add new mem command for memory access profiling 2013-04-01 12:21:44 -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 some code references in design.txt 2014-03-18 18:17:06 -03:00
Makefile perf tools: Add 'build-test' make target 2014-01-16 16:26:26 -03:00
Makefile.perf perf tools: Prettify the tags/TAGS/cscope targets output 2014-06-09 12:21:02 +02:00
MANIFEST tools: Consolidate types.h 2014-05-01 21:22:39 +02:00
perf-archive.sh perf archive: Make 'f' the last parameter for tar 2012-09-17 13:10:42 -03:00
perf-completion.sh perf sched: Introduce --list-cmds for use by scripts 2014-04-16 17:16:05 +02:00
perf-sys.h perf tools: Move sys_perf_event_open function from perf.h 2014-05-05 17:48:51 +02:00
perf.c perf tools: Add support to dynamically get cacheline size 2014-06-09 13:34:48 +02:00
perf.h perf tools: Move ACCESS_ONCE from perf.h header 2014-05-05 17:49:07 +02:00