Commit eac23d1c384b55e4bbb89ea9e5a6bb77fb4d1140

Authored by Ian Munsie
Committed by Arnaldo Carvalho de Melo
1 parent 21ef97f05a

perf record,report,annotate,diff: Process events in order

This patch changes perf report to ask for the ID info on all events be
default if recording from multiple CPUs.

Perf report, annotate and diff will now process the events in order if
the kernel is able to provide timestamps on all events. This ensures
that events such as COMM and MMAP which are necessary to correctly
interpret samples are processed prior to those samples so that they are
attributed correctly.

Before:
 # perf record ./cachetest
 # perf report

 # Events: 6K cycles
 #
 # Overhead  Command      Shared Object                           Symbol
 # ........  .......  .................  ...............................
 #
     74.11%    :3259  [unknown]          [k] 0x4a6c
      1.50%  cachetest  ld-2.11.2.so       [.] 0x1777c
      1.46%    :3259  [kernel.kallsyms]  [k] .perf_event_mmap_ctx
      1.25%    :3259  [kernel.kallsyms]  [k] restore
      0.74%    :3259  [kernel.kallsyms]  [k] ._raw_spin_lock
      0.71%    :3259  [kernel.kallsyms]  [k] .filemap_fault
      0.66%    :3259  [kernel.kallsyms]  [k] .memset
      0.54%  cachetest  [kernel.kallsyms]  [k] .sha_transform
      0.54%    :3259  [kernel.kallsyms]  [k] .copy_4K_page
      0.54%    :3259  [kernel.kallsyms]  [k] .find_get_page
      0.52%    :3259  [kernel.kallsyms]  [k] .trace_hardirqs_off
      0.50%    :3259  [kernel.kallsyms]  [k] .__do_fault
<SNIP>

After:
 # perf report

 # Events: 6K cycles
 #
 # Overhead  Command      Shared Object                           Symbol
 # ........  .......  .................  ...............................
 #
     44.28%  cachetest  cachetest          [.] sumArrayNaive
     22.53%  cachetest  cachetest          [.] sumArrayOptimal
      6.59%  cachetest  ld-2.11.2.so       [.] 0x1777c
      2.13%  cachetest  [unknown]          [k] 0x340
      1.46%  cachetest  [kernel.kallsyms]  [k] .perf_event_mmap_ctx
      1.25%  cachetest  [kernel.kallsyms]  [k] restore
      0.74%  cachetest  [kernel.kallsyms]  [k] ._raw_spin_lock
      0.71%  cachetest  [kernel.kallsyms]  [k] .filemap_fault
      0.66%  cachetest  [kernel.kallsyms]  [k] .memset
      0.54%  cachetest  [kernel.kallsyms]  [k] .copy_4K_page
      0.54%  cachetest  [kernel.kallsyms]  [k] .find_get_page
      0.54%  cachetest  [kernel.kallsyms]  [k] .sha_transform
      0.52%  cachetest  [kernel.kallsyms]  [k] .trace_hardirqs_off
      0.50%  cachetest  [kernel.kallsyms]  [k] .__do_fault
<SNIP>

Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
LKML-Reference: <1291872833-839-1-git-send-email-imunsie@au1.ibm.com>
Signed-off-by: Ian Munsie <imunsie@au1.ibm.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

Showing 4 changed files with 10 additions and 1 deletions Side-by-side Diff

tools/perf/builtin-annotate.c
... ... @@ -375,6 +375,8 @@
375 375 .mmap = event__process_mmap,
376 376 .comm = event__process_comm,
377 377 .fork = event__process_task,
  378 + .ordered_samples = true,
  379 + .ordering_requires_timestamps = true,
378 380 };
379 381  
380 382 static int __cmd_annotate(void)
tools/perf/builtin-diff.c
... ... @@ -61,6 +61,8 @@
61 61 .exit = event__process_task,
62 62 .fork = event__process_task,
63 63 .lost = event__process_lost,
  64 + .ordered_samples = true,
  65 + .ordering_requires_timestamps = true,
64 66 };
65 67  
66 68 static void perf_session__insert_hist_entry_by_name(struct rb_root *root,
tools/perf/builtin-record.c
... ... @@ -285,7 +285,7 @@
285 285 if (system_wide)
286 286 attr->sample_type |= PERF_SAMPLE_CPU;
287 287  
288   - if (sample_time)
  288 + if (sample_time || system_wide || !no_inherit || cpu_list)
289 289 attr->sample_type |= PERF_SAMPLE_TIME;
290 290  
291 291 if (raw_samples) {
... ... @@ -327,6 +327,9 @@
327 327 * Old kernel, no attr->sample_id_type_all field
328 328 */
329 329 sample_id_all_avail = false;
  330 + if (!sample_time && !raw_samples)
  331 + attr->sample_type &= ~PERF_SAMPLE_TIME;
  332 +
330 333 goto retry_sample_id;
331 334 }
332 335  
tools/perf/builtin-report.c
... ... @@ -244,6 +244,8 @@
244 244 .event_type = event__process_event_type,
245 245 .tracing_data = event__process_tracing_data,
246 246 .build_id = event__process_build_id,
  247 + .ordered_samples = true,
  248 + .ordering_requires_timestamps = true,
247 249 };
248 250  
249 251 extern volatile int session_done;