linux/tools/perf/util
Namhyung Kim e803cf97a4 perf record: Synthesize COMM event for a command line workload
When perf creates a new child to profile, the events are enabled on
exec().  And in this case, it doesn't synthesize any event for the
child since they'll be generated during exec().  But there's an window
between the enabling and the event generation.

It used to be overcome since samples are only in kernel (so we always
have the map) and the comm is overridden by a later COMM event.
However it won't work if events are processed and displayed before the
COMM event overrides like in 'perf script'.  This leads to those early
samples (like native_write_msr_safe) not having a comm but pid (like
':15328').

So it needs to synthesize COMM event for the child explicitly before
enabling so that it can have a correct comm.  But at this time, the
comm will be "perf" since it's not exec-ed yet.

Committer note:

Before this patch:

  # perf record usleep 1
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.017 MB perf.data (7 samples) ]
  # perf script --show-task-events
    :4429  4429 27909.079372:          1 cycles:  ffffffff8105f45a native_write_msr_safe (/lib/modules/4.
    :4429  4429 27909.079375:          1 cycles:  ffffffff8105f45a native_write_msr_safe (/lib/modules/4.
    :4429  4429 27909.079376:         10 cycles:  ffffffff8105f45a native_write_msr_safe (/lib/modules/4.
    :4429  4429 27909.079377:        223 cycles:  ffffffff8105f45a native_write_msr_safe (/lib/modules/4.
    :4429  4429 27909.079378:       6571 cycles:  ffffffff8105f45a native_write_msr_safe (/lib/modules/4.
   usleep  4429 27909.079380: PERF_RECORD_COMM exec: usleep:4429/4429
   usleep  4429 27909.079381:     185403 cycles:  ffffffff810a72d3 flush_signal_handlers (/lib/modules/4.
   usleep  4429 27909.079444:    2241110 cycles:      7fc575355be3 _dl_start (/usr/lib64/ld-2.20.so)
   usleep  4429 27909.079875: PERF_RECORD_EXIT(4429:4429):(4429:4429)

After:

  # perf record usleep 1
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.017 MB perf.data (7 samples) ]
  # perf script --show-task
     perf     0     0.000000: PERF_RECORD_COMM: perf:8446/8446
     perf  8446 30154.038944:          1 cycles:  ffffffff8105f45a native_write_msr_safe (/lib/modules/4.
     perf  8446 30154.038948:          1 cycles:  ffffffff8105f45a native_write_msr_safe (/lib/modules/4.
     perf  8446 30154.038949:          9 cycles:  ffffffff8105f45a native_write_msr_safe (/lib/modules/4.
     perf  8446 30154.038950:        230 cycles:  ffffffff8105f45a native_write_msr_safe (/lib/modules/4.
     perf  8446 30154.038951:       6772 cycles:  ffffffff8105f45a native_write_msr_safe (/lib/modules/4.
   usleep  8446 30154.038952: PERF_RECORD_COMM exec: usleep:8446/8446
   usleep  8446 30154.038954:     196923 cycles:  ffffffff81766440 _raw_spin_lock (/lib/modules/4.3.0-rc1
   usleep  8446 30154.039021:    2292130 cycles:      7f609a173dc4 memcpy (/usr/lib64/ld-2.20.so)
   usleep  8446 30154.039349: PERF_RECORD_EXIT(8446:8446):(8446:8446)
  #

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1442881495-2928-1-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-09-22 22:43:12 -03:00
..
include perf tools: regs_query_register_offset() infrastructure 2015-09-15 09:48:33 -03:00
intel-pt-decoder x86/insn: perf tools: Add new xsave instructions 2015-09-04 12:01:04 -03:00
scripting-engines tools lib traceevent: Support function __get_dynamic_array_len 2015-09-02 16:30:46 -03:00
abspath.c
alias.c
annotate.c perf tools: /proc/kcore requires CAP_SYS_RAWIO message too noisy 2015-08-21 10:29:23 -03:00
annotate.h perf annotate: Compute IPC and basic block cycles 2015-08-06 16:36:12 -03:00
auxtrace.c perf tools: Add Intel BTS support 2015-08-21 11:34:10 -03:00
auxtrace.h perf tools: Add Intel BTS support 2015-08-21 11:34:10 -03:00
bitmap.c
Build perf env: Move perf_env out of header.h and session.c into separate object 2015-09-14 12:50:19 -03:00
build-id.c perf buildid: Introduce sysfs/filename__sprintf_build_id 2015-08-28 14:53:50 -03:00
build-id.h perf buildid: Introduce sysfs/filename__sprintf_build_id 2015-08-28 14:53:50 -03:00
cache.h perf report: Fix some option handling on --stdio 2015-05-14 10:05:22 -03:00
callchain.c perf callchain: Move option parsing code to util.c 2015-08-08 14:16:49 -03:00
callchain.h perf callchain: Move option parsing code to util.c 2015-08-08 14:16:49 -03:00
cgroup.c perf cgroup: Use atomic.h for refcounting 2015-05-15 16:12:20 -03:00
cgroup.h perf cgroup: Use atomic.h for refcounting 2015-05-15 16:12:20 -03:00
cloexec.c perf bench numa: Fix to show proper convergence stats 2015-06-25 12:28:35 -03:00
cloexec.h perf tools: Fix build errors with mipsel-linux-uclibc compiler 2015-08-05 16:56:16 -03:00
color.c perf tools: Do not include escape sequences in color_vfprintf return 2015-08-05 16:46:06 -03:00
color.h perf tools: Remove trail argument to color vsprintf 2015-08-05 16:44:02 -03:00
comm.c perf comm: Use atomic.h for refcounting 2015-05-27 12:21:43 -03:00
comm.h perf tools: Add facility to export data in database-friendly way 2014-10-29 10:32:49 -02:00
config.c perf tools: Introduce llvm config options 2015-08-07 10:16:59 -03:00
counts.c perf stat: Move perf_counts struct and functions into separate object 2015-08-08 14:16:49 -03:00
counts.h perf stat: Move perf_counts struct and functions into separate object 2015-08-08 14:16:49 -03:00
cpumap.c perf cpu_map: Use sysfs__read_int in get_{core,socket}_id() 2015-09-14 12:50:27 -03:00
cpumap.h perf cpumap: Factor out functions to get core_id and socket_id 2015-09-02 16:30:47 -03:00
ctype.c
data-convert-bt.c perf data: Fix signedness of value 2015-04-29 10:37:49 -03:00
data-convert-bt.h perf data: Support using -f to override perf.data file ownership for 'convert' 2015-04-02 13:18:52 -03:00
data.c perf util: Replace strerror with strerror_r for thread-safety 2014-08-15 10:58:35 -03:00
data.h
db-export.c perf db-export: Fix thread ref-counting 2015-05-29 12:43:39 -03:00
db-export.h perf db-export: No need to have ->thread twice in struct export_sample 2015-04-02 13:18:43 -03:00
debug.c perf tools: Introduce veprintf 2015-08-06 15:30:38 -03:00
debug.h perf tools: Introduce veprintf 2015-08-06 15:30:38 -03:00
dso.c perf tools: Reference count struct dso 2015-06-08 10:31:40 -03:00
dso.h perf annotate: Reset the dso find_symbol cache when removing symbols 2015-08-24 13:33:14 -03:00
dwarf-aux.c perf probe: Fix to add missed brace around if block 2015-08-13 14:51:26 -03:00
dwarf-aux.h perf probe: Ignore tail calls to probed functions 2015-05-14 10:05:09 -03:00
env.c perf env: Introduce read_cpu_topology_map() method 2015-09-14 12:50:28 -03:00
env.h perf env: Introduce read_cpu_topology_map() method 2015-09-14 12:50:28 -03:00
environment.c perf report: Fix some option handling on --stdio 2015-05-14 10:05:22 -03:00
event.c perf record: Synthesize COMM event for a command line workload 2015-09-22 22:43:12 -03:00
event.h perf record: Synthesize COMM event for a command line workload 2015-09-22 22:43:12 -03:00
evlist.c Merge branch 'perf/urgent' into perf/core, to resolve a conflict 2015-09-16 09:19:56 +02:00
evlist.h perf evlist: Fix splice_list_tail() not setting evlist 2015-09-15 10:23:17 -03:00
evsel.c Merge branch 'perf/urgent' into perf/core, to resolve a conflict 2015-09-16 09:19:56 +02:00
evsel.h Merge branch 'perf/urgent' into perf/core, to resolve a conflict 2015-09-16 09:19:56 +02:00
exec_cmd.c
exec_cmd.h
find-vdso-map.c perf tools: Build programs to copy 32-bit compatibility 2014-10-29 10:32:48 -02:00
generate-cmdlist.sh
header.c Merge branch 'perf/urgent' into perf/core, to resolve a conflict 2015-09-16 09:19:56 +02:00
header.h perf env: Move perf_env out of header.h and session.c into separate object 2015-09-14 12:50:19 -03:00
help.c
help.h
hist.c perf hists browser: Zoom in/out for processor socket 2015-09-14 13:02:08 -03:00
hist.h perf hists browser: Zoom in/out for processor socket 2015-09-14 13:02:08 -03:00
intel-bts.c perf tools: Fix use of wrong event when processing exit events 2015-09-02 17:46:26 -03:00
intel-bts.h perf tools: Add Intel BTS support 2015-08-21 11:34:10 -03:00
intel-pt.c perf/core improvements and fixes: 2015-09-08 16:22:29 +02:00
intel-pt.h perf tools: Pass Intel PT information for decoding MTC and CYC 2015-08-24 17:46:43 -03:00
intlist.c
intlist.h
kvm-stat.h perf kvm: Support using -f to override perf.data.guest file ownership 2015-04-02 13:18:47 -03:00
levenshtein.c
levenshtein.h
llvm-utils.c perf tests: Add LLVM test for eBPF on-the-fly compiling 2015-08-07 10:57:24 -03:00
llvm-utils.h perf tests: Add LLVM test for eBPF on-the-fly compiling 2015-08-07 10:57:24 -03:00
lzma.c perf tools: Add lzma decompression support for kernel module 2015-03-21 14:53:40 -03:00
machine.c perf machine: Add pointer to sample's environment 2015-09-14 12:50:29 -03:00
machine.h perf machine: Add pointer to sample's environment 2015-09-14 12:50:29 -03:00
map.c perf tools: Initialize reference counts in map__clone() 2015-08-21 12:39:30 -03:00
map.h perf symbols: Introduce map__is_(kernel,kmodule)() 2015-07-23 11:28:36 -03:00
ordered-events.c perf ordered_events: Clear the progress bar at the end of a flush 2015-08-24 17:16:22 -03:00
ordered-events.h perf ordered_samples: Remove references to perf_{evlist,tool} and machines 2015-03-31 17:52:32 -03:00
pager.c perf report: Fix some option handling on --stdio 2015-05-14 10:05:22 -03:00
parse-branch-options.c perf record: Add support for sampling indirect jumps 2015-06-07 16:08:31 +02:00
parse-branch-options.h perf tools: Move branch option parsing to own file 2015-05-27 21:02:17 -03:00
parse-events.c perf tools: Don't assume that the parser returns non empty evsel list 2015-09-21 18:01:17 -03:00
parse-events.h perf tools: Propagate error info for the tracepoint parsing 2015-09-15 09:48:32 -03:00
parse-events.l perf callchain: Per-event type selection support 2015-08-12 13:20:27 -03:00
parse-events.y perf tools: Enhance parsing events tracepoint error output 2015-09-15 09:48:33 -03:00
parse-options.c perf env: Adopt perf_header__set_cmdline 2015-09-14 12:50:21 -03:00
parse-options.h perf record: Add AUX area tracing Snapshot Mode support 2015-05-05 18:13:01 -03:00
parse-regs-options.c perf record: Add ability to name registers to record 2015-08-31 18:01:33 -03:00
parse-regs-options.h perf record: Add ability to name registers to record 2015-08-31 18:01:33 -03:00
path.c
perf_regs.c perf tools: Fix link time error with sample_reg_masks on non x86 2015-09-01 13:04:41 -03:00
perf_regs.h perf tools: Fix link time error with sample_reg_masks on non x86 2015-09-01 13:04:41 -03:00
PERF-VERSION-GEN
pmu.c perf tools: Add Intel BTS support 2015-08-21 11:34:10 -03:00
pmu.h perf tools: Add perf_pmu__format_bits() 2015-08-06 16:49:01 -03:00
pmu.l
pmu.y
probe-event.c perf probe: Export init/exit_probe_symbol_maps() 2015-09-15 09:48:32 -03:00
probe-event.h perf probe: Export init/exit_probe_symbol_maps() 2015-09-15 09:48:32 -03:00
probe-file.c perf tools: Switch to tracing_path interface on appropriate places 2015-09-14 12:50:16 -03:00
probe-file.h perf probe: Print deleted events in cmd_probe() 2015-09-04 12:43:44 -03:00
probe-finder.c perf probe: Support probing at absolute address 2015-08-26 10:41:12 -03:00
probe-finder.h perf probe: Introduce probe_conf global configs 2015-05-08 16:26:26 -03:00
pstack.c perf tools: Introduce pstack_peek() 2015-05-05 18:13:22 -03:00
pstack.h perf tools: Introduce pstack_peek() 2015-05-05 18:13:22 -03:00
python-ext-sources perf stat: Move perf_counts struct and functions into separate object 2015-08-08 14:16:49 -03:00
python.c perf python: Add missing PERF_RECORD_{MMAP2,AUX,etc} 2015-07-29 10:51:45 -03:00
quote.c
quote.h
rblist.c
rblist.h
record.c perf tools: Add a helper function to probe whether cpu-wide tracing is possible 2015-08-17 11:08:37 -03:00
run-command.c perf util: Replace strerror with strerror_r for thread-safety 2014-08-15 10:58:35 -03:00
run-command.h
session.c perf machine: Add pointer to sample's environment 2015-09-14 12:50:29 -03:00
session.h perf tools: Add AUX area tracing index 2015-05-04 19:48:47 -03:00
setup.py tools lib api: Rename libapikfs.a to libapi.a 2015-02-12 17:55:18 -03:00
sigchain.c
sigchain.h
sort.c perf tools: Introduce new sort type "socket" for the processor socket 2015-09-14 12:50:30 -03:00
sort.h perf tools: Introduce new sort type "socket" for the processor socket 2015-09-14 12:50:30 -03:00
srcline.c perf tools: Always use non inlined file name for 'srcfile' sort key 2015-09-02 16:30:46 -03:00
stat-shadow.c perf stat: Fix transaction lenght metrics 2015-07-28 12:05:04 -03:00
stat.c perf stat: Fix per-pkg event reporting bug 2015-09-16 18:01:03 -03:00
stat.h perf stat: Move perf_counts struct and functions into separate object 2015-08-08 14:16:49 -03:00
strbuf.c
strbuf.h
strfilter.c perf tools: Add strfilter__string to recover rules string 2015-05-04 12:43:54 -03:00
strfilter.h perf tools: Add strfilter__string to recover rules string 2015-05-04 12:43:54 -03:00
string.c perf tools: Asprintf like functions to format integer filter expression 2015-07-06 10:21:46 -03:00
strlist.c perf strlist: Make parse_list() private 2015-07-20 14:51:07 -03:00
strlist.h perf strlist: Make parse_list() private 2015-07-20 14:51:07 -03:00
svghelper.c perf tools: Add reference counting for cpu_map object 2015-06-25 15:15:50 -03:00
svghelper.h
symbol-elf.c Revert "perf symbols: Fix mismatched declarations for elf_getphdrnum" 2015-09-17 13:10:05 -03:00
symbol-minimal.c perf symbols: Save DSO loading errno to better report errors 2015-03-24 12:08:43 -03:00
symbol.c perf tools: Rename perf_session_env to perf_env 2015-08-28 14:53:55 -03:00
symbol.h perf tools: Add processor socket info to hist_entry and addr_location 2015-09-14 12:50:29 -03:00
target.c perf target: Simplify handling of strerror_r return 2015-03-24 12:08:30 -03:00
target.h
thread_map.c perf/core improvements and fixes: 2015-07-21 07:58:06 +02:00
thread_map.h perf thrad_map: Add comm string into array 2015-06-26 11:07:01 -03:00
thread-stack.c perf tools: Ensure thread-stack is flushed 2015-06-19 16:03:33 -03:00
thread-stack.h perf tools: Ensure thread-stack is flushed 2015-06-19 16:03:33 -03:00
thread.c perf tools: Avoid deadlock when map_groups are broken 2015-08-19 14:15:09 -03:00
thread.h perf tools: Elliminate alignment holes 2015-05-18 10:17:33 -03:00
tool.h perf tools: Add new PERF_RECORD_SWITCH event 2015-07-23 22:51:13 -03:00
top.c
top.h
trace-event-info.c tools lib api fs: Move tracing_path interface into api/fs/tracing_path.c 2015-09-04 12:00:45 -03:00
trace-event-parse.c perf tools: Stop reading the kallsyms data from perf.data 2015-07-23 22:51:11 -03:00
trace-event-read.c perf tools: Stop reading the kallsyms data from perf.data 2015-07-23 22:51:11 -03:00
trace-event-scripting.c perf scripting: No need to pass thread twice to the scripting callbacks 2015-04-02 13:18:41 -03:00
trace-event.c perf evsel: Propagate error info from tp_format 2015-09-15 09:48:33 -03:00
trace-event.h perf python: Remove dependency on 'machine' methods 2015-07-29 10:51:44 -03:00
tsc.c perf tools: Move rdtsc() function 2014-07-23 11:48:11 -03:00
tsc.h perf tools: Move rdtsc() function 2014-07-23 11:48:11 -03:00
unwind-libdw.c perf callchains: Use thread->mg->machine 2014-10-29 10:32:46 -02:00
unwind-libdw.h
unwind-libunwind.c perf unwind: Fix a compile error 2015-06-16 10:40:03 -03:00
unwind.h perf callchains: Use thread->mg->machine 2014-10-29 10:32:46 -02:00
usage.c
util.c Merge branch 'perf/urgent' into perf/core, to pick up fixes before applying new changes 2015-09-18 09:24:01 +02:00
util.h tools lib api fs: Replace debugfs/tracefs objects interface with fs.c 2015-09-14 12:50:15 -03:00
values.c
values.h
vdso.c perf tools: Fix lockup using 32-bit compat vdso 2015-07-07 11:05:08 -03:00
vdso.h perf machine: Fix up vdso methods names 2015-05-29 12:43:44 -03:00
wrapper.c
xyarray.c perf tools: Introduce xyarray__reset function 2015-06-16 10:34:39 -03:00
xyarray.h perf tools: Introduce xyarray__reset function 2015-06-16 10:34:39 -03:00
zlib.c perf tools: Add gzip decompression support for kernel module 2014-11-05 10:11:26 -03:00