linux/tools/perf/util
Ravi Bangoria 39e51d9674 perf kvm record/report: 'unprocessable sample' error while recording/reporting guest data
[ Upstream commit 3caeaa5627 ]

While recording guest samples in host using perf kvm record, it will
populate unprocessable sample error, though samples will be recorded
properly. While generating report using perf kvm report, no samples will
be processed and same error will populate. We have seen this behaviour
with upstream perf(4.4-rc3) on x86 and ppc64 hardware.

Reason behind this failure is, when it tries to fetch machine from
rb_tree of machines, it fails. As a part of tracing a bug, we figured
out that this code was incorrectly refactored in commit 54245fdc35
("perf session: Remove wrappers to machines__find").

This patch will change the functionality such that if it can't fetch
machine in first trial, it will create one node of machine and add that to
rb_tree. So next time when it tries to fetch same machine from rb_tree,
it won't fail. Actually it was the case before refactoring of code in
aforementioned commit.

This patch is generated from acme perf/core branch.

Below I've mention an example that demonstrate the behaviour before and
after applying patch.

Before applying patch:
[Note: One needs to run guest before recording data in host]

  ravi@ravi-bangoria:~$ ./perf kvm record -a
  Warning:
  5903 unprocessable samples recorded.
  Do you have a KVM guest running and not using 'perf kvm'?
  [ perf record: Captured and wrote 1.409 MB perf.data.guest (285 samples) ]

  ravi@ravi-bangoria:~$ ./perf kvm report --stdio
  Warning:
  5903 unprocessable samples recorded.
  Do you have a KVM guest running and not using 'perf kvm'?
  # To display the perf.data header info, please use --header/--header-only options.
  #
  # Total Lost Samples: 0
  #
  # Samples: 285  of event 'cycles'
  # Event count (approx.): 88715406
  #
  # Overhead  Command  Shared Object  Symbol
  # ........  .......  .............  ......
  #

  # (For a higher level overview, try: perf report --sort comm,dso)
  #

After applying patch:

  ravi@ravi-bangoria:~$ ./perf kvm record -a
  [ perf record: Captured and wrote 1.188 MB perf.data.guest (17 samples) ]

  ravi@ravi-bangoria:~$ ./perf kvm report --stdio
  # To display the perf.data header info, please use --header/--header-only options.
  #
  # Total Lost Samples: 0
  #
  # Samples: 17  of event 'cycles'
  # Event count (approx.): 700746
  #
  # Overhead  Command  Shared Object     Symbol
  # ........  .......  ................  ......................
  #
      34.19%  :5758    [unknown]         [g] 0xffffffff818682ab
      22.79%  :5758    [unknown]         [g] 0xffffffff812dc7f8
      22.79%  :5758    [unknown]         [g] 0xffffffff818650d0
      14.83%  :5758    [unknown]         [g] 0xffffffff8161a1b6
       2.49%  :5758    [unknown]         [g] 0xffffffff818692bf
       0.48%  :5758    [unknown]         [g] 0xffffffff81869253
       0.05%  :5758    [unknown]         [g] 0xffffffff81869250

Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: stable@vger.kernel.org # v3.19+
Fixes: 54245fdc35 ("perf session: Remove wrappers to machines__find")
Link: http://lkml.kernel.org/r/1449471302-11283-1-git-send-email-ravi.bangoria@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
History 2016-02-03 16:23:16 -05:00
..
include perf/bench: Fix mem* routines usage after alternatives change 2015-03-03 18:01:10 +01:00
scripting-engines perf db-export: No need to have ->thread twice in struct export_sample 2015-04-02 13:18:43 -03:00
abspath.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
alias.c perf tools: Introduce zfree 2013-12-27 15:17:00 -03:00
annotate.c Merge branch 'perf/urgent' into perf/core, to pick up fixes and to refresh the tree 2015-03-27 09:46:03 +01:00
annotate.h perf tools: Fix segfault for symbol annotation on TUI 2015-01-16 17:49:29 -03:00
bitmap.c perf tools: Add bitmap_or function into bitmap object 2012-02-13 23:28:10 -02:00
Build perf tools: Add lzma decompression support for kernel module 2015-03-21 14:53:40 -03:00
build-id.c perf buildid-list: Fix segfault when show DSOs with hits 2015-04-10 10:13:59 -03:00
build-id.h perf buildid-cache: Add --purge FILE to remove all caches of FILE 2015-02-27 15:52:33 -03:00
cache.h perf tools: Make perf aware of tracefs 2015-02-11 12:37:08 -03:00
callchain.c perf tools: Enable LBR call stack support 2015-02-18 17:16:17 +01:00
callchain.h perf tools: Enable LBR call stack support 2015-02-18 17:16:17 +01:00
cgroup.c perf evlist: Introduce evlist__for_each() & friends 2014-01-13 10:06:25 -03:00
cgroup.h perf tool: Add cgroup support 2011-02-16 13:30:48 +01:00
cloexec.c perf bench numa: Fix to show proper convergence stats 2015-08-03 09:29:18 -07:00
cloexec.h perf tools: Work around lack of sched_getcpu in glibc < 2.6. 2015-03-24 12:08:07 -03:00
color.c perf tools: Remove some unused functions from color.c 2015-01-21 13:24:32 -03:00
color.h perf tools: Remove some unused functions from color.c 2015-01-21 13:24:32 -03:00
comm.c perf tools: Identify which comms are from exec 2014-08-13 19:23:08 -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: Add --buildid-dir option to set cache directory 2014-12-09 09:14:35 -03:00
cpumap.c perf tools: Use cpu/possible instead of cpu/kernel_max 2014-04-22 17:39:16 +02:00
cpumap.h perf tools: Allow ability to map cpus to nodes easily 2014-04-22 17:39:12 +02:00
ctype.c perf tools: ctype.c only wants util.h 2012-02-13 23:17:40 -02:00
data-convert-bt.c perf data: Support using -f to override perf.data file ownership for 'convert' 2015-04-02 13:18:52 -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 perf tools: Add perf_data_file__write interface 2013-12-02 09:22:46 -03:00
db-export.c perf db-export: No need to have ->thread twice in struct export_sample 2015-04-02 13:18:43 -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 data: Add perf data to CTF conversion support 2015-02-25 16:13:12 -03:00
debug.h perf data: Add perf data to CTF conversion support 2015-02-25 16:13:12 -03:00
dso.c perf symbols: Save DSO loading errno to better report errors 2015-03-24 12:08:43 -03:00
dso.h perf symbols: Save DSO loading errno to better report errors 2015-03-24 12:08:43 -03:00
dwarf-aux.c perf probe: Fix to track down unnamed union/structure members 2015-04-02 13:18:44 -03:00
dwarf-aux.h perf probe: Fix to handle optimized not-inlined functions 2015-02-06 11:46:36 +01:00
environment.c perf_counter tools: Move from Documentation/perf_counter/ to tools/perf/ 2009-06-06 20:33:43 +02:00
event.c perf tools: Fix error path to do closedir() when synthesizing threads 2015-04-10 10:13:58 -03:00
event.h perf ordered_samples: Remove references to perf_{evlist,tool} and machines 2015-03-31 17:52:32 -03:00
evlist.c perf evlist: Fix type for references to data_head/tail 2015-04-10 11:29:20 -03:00
evlist.h perf evlist: Fix type for references to data_head/tail 2015-04-10 11:29:20 -03:00
evsel.c perf tools: Merge all perf_event_attr print functions 2015-04-08 10:06:28 -03:00
evsel.h perf tools: Merge all perf_event_attr print functions 2015-04-08 10:06:28 -03:00
exec_cmd.c perf tools: Makefile: Remove various and sundry cruft 2011-02-18 07:43:06 -02:00
exec_cmd.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
find-vdso-map.c perf tools: Build programs to copy 32-bit compatibility 2014-10-29 10:32:48 -02:00
generate-cmdlist.sh tools/perf: Standardize feature support define names to: HAVE_{FEATURE}_SUPPORT 2013-10-09 08:48:28 +02:00
header.c perf header: Fixup reading of HEADER_NRCPUS feature 2015-10-22 14:43:12 -07:00
header.h perf build-id: Move build-id related functions to util/build-id.c 2014-11-05 10:14:07 -03:00
help.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
help.h perf tools: Protect header files with a consistent style 2009-09-24 21:27:51 +02:00
hist.c perf hists: Update the column width for the "srcline" sort key 2015-10-22 14:43:12 -07:00
hist.h perf hists browser: Allow annotating entries in callchains 2015-03-17 18:27:28 -03:00
intlist.c perf util: Add findnew method to intlist 2013-10-14 10:28:48 -03:00
intlist.h perf util: Add findnew method to intlist 2013-10-14 10:28:48 -03:00
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 perf_counter tools: Move from Documentation/perf_counter/ to tools/perf/ 2009-06-06 20:33:43 +02:00
levenshtein.h perf tools: Protect header files with a consistent style 2009-09-24 21:27:51 +02:00
lzma.c perf tools: Add lzma decompression support for kernel module 2015-03-21 14:53:40 -03:00
machine.c perf buildid-list: Fix segfault when show DSOs with hits 2015-04-10 10:13:59 -03:00
machine.h perf buildid-list: Fix segfault when show DSOs with hits 2015-04-10 10:13:59 -03:00
map.c perf kmaps: Check kmaps to make code more robust 2015-04-08 09:07:03 -03:00
map.h perf kmaps: Check kmaps to make code more robust 2015-04-08 09:07:03 -03:00
ordered-events.c perf ordered_samples: Remove references to perf_{evlist,tool} and machines 2015-03-31 17:52:32 -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 tools: Add cat as fallback pager 2014-05-21 11:48:33 +02:00
parse-events.c perf tools: Add 'I' event modifier for exclude_idle bit 2015-04-08 11:00:16 -03:00
parse-events.h perf list: Clean up the printing functions of hardware/software events 2015-02-27 15:52:18 -03:00
parse-events.l perf tools: Add 'I' event modifier for exclude_idle bit 2015-04-08 11:00:16 -03:00
parse-events.y perf tools: allow user to specify hardware breakpoint bp_len 2014-12-03 15:14:29 +01:00
parse-options.c perf report: Don't allow empty argument for '-t'. 2015-03-19 13:53:28 -03:00
parse-options.h perf report: Don't allow empty argument for '-t'. 2015-03-19 13:53:28 -03:00
path.c tools/perf: Turn strlcpy() into a __weak function 2013-10-09 08:48:49 +02:00
PERF-VERSION-GEN perf tools: Fix version when building out of tree 2013-11-07 10:40:47 -03:00
perf_regs.c perf tools: Cache register accesses for unwind processing 2014-06-12 16:53:19 +02:00
perf_regs.h perf tools: Cache register accesses for unwind processing 2014-06-12 16:53:19 +02:00
pmu.c perf tools: Extend format_alias() to include event parameters 2015-01-21 13:24:33 -03:00
pmu.h perf tools: Add snapshot format file parsing 2014-11-24 18:03:51 -03:00
pmu.l perf tools: Add perf pmu object to access pmu format definition 2012-03-16 14:29:35 -03:00
pmu.y perf tools: Fix build with bison 2.3 and older. 2013-02-14 16:12:34 -03:00
probe-event.c perf probe: Fix segfault if passed with ''. 2015-05-05 12:26:52 -03:00
probe-event.h perf probe: Support multiple probes on different binaries 2015-04-10 10:19:53 -03:00
probe-finder.c Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-05-06 10:47:25 -07:00
probe-finder.h perf probe: Find compilation directory path for lazy matching 2015-04-13 20:11:05 -03:00
pstack.c perf tools: Move pr_* debug macros into debug object 2014-07-17 12:58:39 -03:00
pstack.h perf tools: Finish the removal of 'self' arguments 2013-11-05 15:32:36 -03:00
python-ext-sources perf tools: Remove api fs object from python build 2015-02-12 11:22:01 -03:00
python.c perf tools: Remove EOL whitespaces 2015-01-21 13:24:31 -03:00
quote.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
quote.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
rblist.c perf util: Add findnew method to intlist 2013-10-14 10:28:48 -03:00
rblist.h perf util: Add findnew method to intlist 2013-10-14 10:28:48 -03:00
record.c perf tools: Use sysctl__read_int instead of ad-hoc copies 2014-12-11 17:53:04 -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 perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
session.c perf kvm record/report: 'unprocessable sample' error while recording/reporting guest data 2016-02-03 16:23:16 -05:00
session.h perf ordered_samples: Remove references to perf_{evlist,tool} and machines 2015-03-31 17:52:32 -03:00
setup.py tools lib api: Rename libapikfs.a to libapi.a 2015-02-12 17:55:18 -03:00
sigchain.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
sigchain.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
sort.c perf diff: Support for different binaries 2015-02-27 10:08:38 -03:00
sort.h perf tools: Remove (null) value of "Sort order" for perf mem report 2015-03-24 12:06:55 -03:00
srcline.c perf: Fix building warning on ARM 32 2014-12-19 13:09:43 +01:00
stat.c perf stats: Add max and min stats 2013-08-07 17:35:26 -03:00
stat.h tools: Consolidate types.h 2014-05-01 21:22:39 +02:00
strbuf.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
strbuf.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
strfilter.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
strfilter.h perf tools: Finish the removal of 'self' arguments 2013-11-05 15:32:36 -03:00
string.c Revert "perf tools: Default to cpu// for events v5" 2014-10-15 16:04:33 -03:00
strlist.c perf tools: Fix build error due to zfree() cast 2014-01-15 15:10:04 -03:00
strlist.h perf tools: Stop using 'self' in strlist 2013-01-25 12:49:28 -03:00
svghelper.c perf timechart: Implement IO mode 2014-07-10 00:22:54 +02:00
svghelper.h perf timechart: Implement IO mode 2014-07-10 00:22:54 +02:00
symbol-elf.c perf tools: Fix copying of /proc/kcore 2015-10-22 14:43:12 -07: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 symbols: Store if there is a filter in place 2015-08-10 12:22:00 -07:00
symbol.h perf symbols: Store if there is a filter in place 2015-08-10 12:22:00 -07:00
target.c perf target: Simplify handling of strerror_r return 2015-03-24 12:08:30 -03:00
target.h perf target: Move the checking of which map function to call into function. 2013-12-04 13:46:37 -03:00
thread-stack.c perf tools: Enhance the thread stack to output call/return data 2014-11-03 17:43:56 -03:00
thread-stack.h perf tools: Enhance the thread stack to output call/return data 2014-11-03 17:43:56 -03:00
thread.c perf tools: Remove superfluous thread->comm_set setting 2015-03-12 12:39:50 -03:00
thread.h perf tools: Add pid/tid filtering to report and script commands 2015-03-24 13:02:46 -03:00
thread_map.c perf thread_map: Create dummy constructor out of open coded equivalent 2014-10-14 17:32:52 -03:00
thread_map.h perf thread_map: Create dummy constructor out of open coded equivalent 2014-10-14 17:32:52 -03:00
tool.h perf tools: tool->finished_round() doesn't need perf_session 2015-03-12 12:39:49 -03:00
top.c perf tools: Rename 'perf_record_opts' to 'record_opts 2013-12-19 14:43:45 -03:00
top.h tools: Consolidate types.h 2014-05-01 21:22:39 +02:00
trace-event-info.c perf tools: Move pr_* debug macros into debug object 2014-07-17 12:58:39 -03:00
trace-event-parse.c perf tools: Introduce event_format__fprintf method 2015-02-06 11:46:37 +01:00
trace-event-read.c perf tools: Remove needless getopt.h includes 2014-07-17 12:59:00 -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 tools lib traceevent: Make plugin unload function receive pevent 2014-01-15 15:10:40 -03:00
trace-event.h perf scripting: No need to pass thread twice to the scripting callbacks 2015-04-02 13:18:41 -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 perf tools: Add libdw DWARF post unwind support 2014-02-24 09:29:36 -03:00
unwind-libunwind.c perf callchain: Separate eh/debug frame offset cache. 2015-03-19 13:53:27 -03:00
unwind.h perf callchains: Use thread->mg->machine 2014-10-29 10:32:46 -02:00
usage.c perf target: Introduce perf_target__parse_uid() 2012-05-07 16:46:48 -03:00
util.c perf tools: Introduce dump_stack signal helper 2015-02-24 15:34:23 -03:00
util.h perf tools: Add lzma decompression support for kernel module 2015-03-21 14:53:40 -03:00
values.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
values.h tools: Consolidate types.h 2014-05-01 21:22:39 +02:00
vdso.c perf tools: Do not attempt to run perf-read-vdso32 if it wasn't built 2014-10-29 10:32:48 -02:00
vdso.h perf tools: Add support for 32-bit compatibility VDSOs 2014-10-29 10:32:48 -02:00
wrapper.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
xyarray.c perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00
xyarray.h perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00
zlib.c perf tools: Add gzip decompression support for kernel module 2014-11-05 10:11:26 -03:00