Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1487598 > unrolled thread
| Started by | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| First post | 2016-09-20 22:10 +0200 |
| Last post | 2016-09-20 23:40 +0200 |
| Articles | 11 — 2 participants |
Back to article view | Back to linux.kernel
[GIT PULL 00/22] perf/core improvements and fixes Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-20 22:10 +0200
[PATCH 10/22] perf ui/stdio: Always reset output width for hierarchy Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-20 22:10 +0200
[PATCH 17/22] perf annotate: Do not ignore call instruction with indirect target Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-20 22:10 +0200
[PATCH 08/22] perf hists: Introduce hists__link_hierarchy() Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-20 22:10 +0200
[PATCH 20/22] perf ui/tui: Reset output width for hierarchy Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-20 22:10 +0200
[PATCH 22/22] perf symbols: Do not open device files Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-20 22:10 +0200
[PATCH 12/22] perf report: Enable group view with hierarchy Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-20 22:10 +0200
[PATCH 05/22] perf tools: Do hugetlb handling in more systems Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-20 22:10 +0200
[PATCH 07/22] perf hists: Introduce hists__match_hierarchy() Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-20 22:10 +0200
[PATCH 18/22] perf annotate: Pass the symbol's map/dso to the instruction parsers Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-20 22:10 +0200
Re: [GIT PULL 00/22] perf/core improvements and fixes Ingo Molnar <mingo@kernel.org> - 2016-09-20 23:40 +0200
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-20 22:10 +0200 |
| Subject | [GIT PULL 00/22] perf/core improvements and fixes |
| Message-ID | <sjzwB-7F4-7@gated-at.bofh.it> |
Hi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit cd34cd97b7b4336aa2c623c37daffab264c7c6ce:
perf/x86/intel/uncore: Add Skylake server uncore support (2016-09-10 11:18:52 +0200)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-20160920
for you to fetch changes up to 3c028a0cb5b71f47d523bc8ad2c597cb257f41fb:
perf symbols: Do not open device files (2016-09-20 16:20:21 -0300)
----------------------------------------------------------------
perf/core improvements and fixes:
User visible:
- Support event group view with hierarchy mode in 'perf top' and 'perf report'
(Namhyung Kim)
e.g.:
$ perf record -e '{cycles,instructions}' make
$ perf report --hierarchy --stdio
...
# Overhead Command / Shared Object / Symbol
# ...................... ..................................
...
25.74% 27.18% sh
19.96% 24.14% libc-2.24.so
9.55% 14.64% [.] __strcmp_sse2
1.54% 0.00% [.] __tfind
1.07% 1.13% [.] _int_malloc
0.95% 0.00% [.] __strchr_sse2
0.89% 1.39% [.] __tsearch
0.76% 0.00% [.] strlen
- Fix the dwarf regs table for x86_64, adding a missing % to the "%di"
register, noticed with a failing 'perf test bpf' (Arnaldo Carvalho de Melo)
- Fix handling of mmap parameters in the 'perf trace' beautifier in
architectures that don't have the same mappings as x86_64 (Wang Nan)
- Handle hugetbl mappings in older systems running new kernels (Wang Nan)
- Resolve 'call' operands in 'annotate', that when using /proc/kcore
were appearing just as hexadecimal addresses, to function names
(Arnaldo Carvalho de Melo)
- Fix width computation for srcline sort entry (Jiri Olsa)
- Do not ignore call instruction with indirect target in 'annotate'
(Ravi Bangoria)
- Handle MADV_FREE in the madvise 'trace' beautifier (Wang Nan)
- Fix build of 'perf trace' mman beautifier in !x86_64 (Wang Nan)
Infrastructure:
- Add infrastructure for PMU specific configuration, allowing to pass
config variables directly to the kernel PMU driver, prefixing those
variables with a '@', part of a larger series to support Coresight (Mathieu Poirier)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Build stats at the end of this message.
----------------------------------------------------------------
Arnaldo Carvalho de Melo (5):
perf probe: Fix dwarf regs table for x86_64
perf trace beauty mmap: Fix defines for non !x86_64
perf tools: Do hugetlb handling in more systems
perf annotate: Pass the symbol's map/dso to the instruction parsers
perf annotate: Resolve 'call' operands to function names
Jiri Olsa (2):
perf hists: Fix width computation for srcline sort entry
perf symbols: Do not open device files
Mathieu Poirier (1):
perf tools: Add infrastructure for PMU specific configuration
Namhyung Kim (9):
perf hists browser: Fix event group display
perf hists: Introduce hists__match_hierarchy()
perf hists: Introduce hists__link_hierarchy()
perf hist: Initialize hierarchy tree explicitly
perf ui/stdio: Always reset output width for hierarchy
perf ui/stdio: Rename print_hierarchy_header()
perf report: Enable group view with hierarchy
perf ui/tui: Reset output width for hierarchy
perf hists: Factor out hists__reset_column_width()
Ravi Bangoria (1):
perf annotate: Do not ignore call instruction with indirect target
Wang Nan (4):
tools include: Add uapi mman.h for each architecture
perf build: Compare mman.h related headers against kernel originals
perf trace beauty mmap: Add missing MADV_FREE
tools include: Add mman macros needed by perf for all arch
tools/arch/alpha/include/uapi/asm/mman.h | 47 ++++++++
tools/arch/arc/include/uapi/asm/mman.h | 6 +
tools/arch/arm/include/uapi/asm/mman.h | 6 +
tools/arch/arm64/include/uapi/asm/mman.h | 6 +
tools/arch/frv/include/uapi/asm/mman.h | 6 +
tools/arch/h8300/include/uapi/asm/mman.h | 6 +
tools/arch/hexagon/include/uapi/asm/mman.h | 6 +
tools/arch/ia64/include/uapi/asm/mman.h | 6 +
tools/arch/m32r/include/uapi/asm/mman.h | 6 +
tools/arch/microblaze/include/uapi/asm/mman.h | 6 +
tools/arch/mips/include/uapi/asm/mman.h | 46 ++++++++
tools/arch/mn10300/include/uapi/asm/mman.h | 6 +
tools/arch/parisc/include/uapi/asm/mman.h | 47 ++++++++
tools/arch/powerpc/include/uapi/asm/mman.h | 15 +++
tools/arch/s390/include/uapi/asm/mman.h | 6 +
tools/arch/score/include/uapi/asm/mman.h | 6 +
tools/arch/sh/include/uapi/asm/mman.h | 6 +
tools/arch/sparc/include/uapi/asm/mman.h | 15 +++
tools/arch/tile/include/uapi/asm/mman.h | 15 +++
tools/arch/x86/include/uapi/asm/mman.h | 5 +
tools/arch/xtensa/include/uapi/asm/mman.h | 47 ++++++++
tools/include/uapi/asm-generic/mman-common.h | 75 ++++++++++++
tools/include/uapi/asm-generic/mman.h | 22 ++++
tools/include/uapi/linux/mman.h | 13 +++
tools/perf/Documentation/perf-record.txt | 12 ++
tools/perf/MANIFEST | 4 +
tools/perf/Makefile.perf | 9 ++
tools/perf/arch/x86/include/dwarf-regs-table.h | 2 +-
tools/perf/builtin-report.c | 1 -
tools/perf/trace/beauty/mmap.c | 72 +-----------
tools/perf/ui/browsers/hists.c | 7 +-
tools/perf/ui/hist.c | 15 +++
tools/perf/ui/stdio/hist.c | 25 +---
tools/perf/util/annotate.c | 37 +++---
tools/perf/util/annotate.h | 2 +-
tools/perf/util/dso.c | 3 +
tools/perf/util/event.c | 7 +-
tools/perf/util/evsel.h | 2 +
tools/perf/util/hist.c | 154 ++++++++++++++++++++++++-
tools/perf/util/hist.h | 1 +
tools/perf/util/map.c | 9 +-
tools/perf/util/parse-events.c | 7 +-
tools/perf/util/parse-events.h | 1 +
tools/perf/util/parse-events.l | 22 ++++
tools/perf/util/parse-events.y | 11 ++
tools/perf/util/sort.h | 1 +
46 files changed, 698 insertions(+), 131 deletions(-)
create mode 100644 tools/arch/alpha/include/uapi/asm/mman.h
create mode 100644 tools/arch/arc/include/uapi/asm/mman.h
create mode 100644 tools/arch/arm/include/uapi/asm/mman.h
create mode 100644 tools/arch/arm64/include/uapi/asm/mman.h
create mode 100644 tools/arch/frv/include/uapi/asm/mman.h
create mode 100644 tools/arch/h8300/include/uapi/asm/mman.h
create mode 100644 tools/arch/hexagon/include/uapi/asm/mman.h
create mode 100644 tools/arch/ia64/include/uapi/asm/mman.h
create mode 100644 tools/arch/m32r/include/uapi/asm/mman.h
create mode 100644 tools/arch/microblaze/include/uapi/asm/mman.h
create mode 100644 tools/arch/mips/include/uapi/asm/mman.h
create mode 100644 tools/arch/mn10300/include/uapi/asm/mman.h
create mode 100644 tools/arch/parisc/include/uapi/asm/mman.h
create mode 100644 tools/arch/powerpc/include/uapi/asm/mman.h
create mode 100644 tools/arch/s390/include/uapi/asm/mman.h
create mode 100644 tools/arch/score/include/uapi/asm/mman.h
create mode 100644 tools/arch/sh/include/uapi/asm/mman.h
create mode 100644 tools/arch/sparc/include/uapi/asm/mman.h
create mode 100644 tools/arch/tile/include/uapi/asm/mman.h
create mode 100644 tools/arch/x86/include/uapi/asm/mman.h
create mode 100644 tools/arch/xtensa/include/uapi/asm/mman.h
create mode 100644 tools/include/uapi/asm-generic/mman-common.h
create mode 100644 tools/include/uapi/asm-generic/mman.h
create mode 100644 tools/include/uapi/linux/mman.h
[root@jouet ~]# perf test
1: vmlinux symtab matches kallsyms : Ok
2: detect openat syscall event : Ok
3: detect openat syscall event on all cpus : Ok
4: read samples using the mmap interface : Ok
5: parse events tests : Ok
6: Validate PERF_RECORD_* events & perf_sample fields : Ok
7: Test perf pmu format parsing : Ok
8: Test dso data read : Ok
9: Test dso data cache : Ok
10: Test dso data reopen : Ok
11: roundtrip evsel->name check : Ok
12: Check parsing of sched tracepoints fields : Ok
13: Generate and check syscalls:sys_enter_openat event fields: Ok
14: struct perf_event_attr setup : Ok
15: Test matching and linking multiple hists : Ok
16: Try 'import perf' in python, checking link problems : Ok
17: Test breakpoint overflow signal handler : Ok
18: Test breakpoint overflow sampling : Ok
19: Test number of exit event of a simple workload : Ok
20: Test software clock events have valid period values : Ok
21: Test object code reading : Ok
22: Test sample parsing : Ok
23: Test using a dummy software event to keep tracking : Ok
24: Test parsing with no sample_id_all bit set : Ok
25: Test filtering hist entries : Ok
26: Test mmap thread lookup : Ok
27: Test thread mg sharing : Ok
28: Test output sorting of hist entries : Ok
29: Test cumulation of child hist entries : Ok
30: Test tracking with sched_switch : Ok
31: Filter fds with revents mask in a fdarray : Ok
32: Add fd to a fdarray, making it autogrow : Ok
33: Test kmod_path__parse function : Ok
34: Test thread map : Ok
35: Test LLVM searching and compiling :
35.1: Basic BPF llvm compiling test : Ok
35.2: Test kbuild searching : Ok
35.3: Compile source for BPF prologue generation test : Ok
35.4: Compile source for BPF relocation test : Ok
36: Test topology in session : Ok
37: Test BPF filter :
37.1: Test basic BPF filtering : Ok
37.2: Test BPF prologue generation : Ok
37.3: Test BPF relocation checker : Ok
38: Test thread map synthesize : Ok
39: Test cpu map synthesize : Ok
40: Test stat config synthesize : Ok
41: Test stat synthesize : Ok
42: Test stat round synthesize : Ok
43: Test attr update synthesize : Ok
44: Test events times : Ok
45: Test backward reading from ring buffer : Ok
46: Test cpu map print : Ok
47: Test SDT event probing : Ok
48: Test is_printable_array function : Ok
49: Test bitmap print : Ok
50: x86 rdpmc test : Ok
51: Test converting perf time to TSC : Ok
52: Test dwarf unwind : Ok
53: Test x86 instruction decoder - new instructions : Ok
54: Test intel cqm nmi context read : Skip
[root@jouet ~]#
Build stats:
# time dm
1 74.534 alpine:3.4: Ok
2 25.636 android-ndk:r12b-arm: Ok
3 78.066 archlinux:latest: Ok
4 41.189 centos:5: Ok
5 64.550 centos:6: Ok
6 74.689 centos:7: Ok
7 68.580 debian:7: Ok
8 75.115 debian:8: Ok
9 75.288 fedora:20: Ok
10 79.294 fedora:21: Ok
11 76.839 fedora:22: Ok
12 76.695 fedora:23: Ok
13 82.058 fedora:24: Ok
14 31.649 fedora:24-x-ARC-uClibc: Ok
15 85.826 fedora:rawhide: Ok
16 83.272 mageia:5: Ok
17 76.883 opensuse:13.2: Ok
18 78.530 opensuse:42.1: Ok
19 85.315 opensuse:tumbleweed: Ok
20 63.436 ubuntu:12.04.5: Ok
21 40.909 ubuntu:14.04: Ok
22 72.689 ubuntu:14.04.4: Ok
23 76.374 ubuntu:15.10: Ok
24 70.309 ubuntu:16.04: Ok
25 59.159 ubuntu:16.04-x-arm: Ok
26 56.011 ubuntu:16.04-x-arm64: Ok
27 56.913 ubuntu:16.04-x-powerpc64: Ok
28 57.442 ubuntu:16.04-x-powerpc64el: Ok
29 80.282 ubuntu:16.10: Ok
30 60.964 ubuntu:16.10-x-arm64: Ok
31 61.390 ubuntu:16.10-x-powerpc: Ok
32 63.167 ubuntu:16.10-x-s390: Ok
real 35m54.027s
user 0m2.855s
sys 0m2.652s
[toc] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-20 22:10 +0200 |
| Subject | [PATCH 10/22] perf ui/stdio: Always reset output width for hierarchy |
| Message-ID | <sjzwD-7F4-73@gated-at.bofh.it> |
| In reply to | #1487598 |
From: Namhyung Kim <namhyung@kernel.org>
When the --hierarchy option is used, each entry has its own hpp_list to
show the result. But it is not updating the width of each column for
perf-top. The perf-report command has no problem since it resets it
during header display.
$ sudo perf top --hierarchy --stdio
PerfTop: 160 irqs/sec kernel:38.8% exact: 100.0%
[4000Hz cycles:pp], (all, 12 CPUs)
----------------------------------------------------------------------
52.32% perf
24.74% [.] __symbols__insert
5.62% [.] rb_next
5.14% [.] dso__load_sym
Move the code into hists__fprintf() so that it can be called always.
Also it'd be better to put similar code together.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Fixes: 1b2dbbf41a0f ("perf hists: Use own hpp_list for hierarchy mode")
Link: http://lkml.kernel.org/r/20160913074552.13284-5-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/ui/stdio/hist.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c
index 9b65f4a6b35a..18b4fd9342cd 100644
--- a/tools/perf/ui/stdio/hist.c
+++ b/tools/perf/ui/stdio/hist.c
@@ -628,14 +628,6 @@ hists__fprintf_hierarchy_headers(struct hists *hists,
struct perf_hpp *hpp,
FILE *fp)
{
- struct perf_hpp_list_node *fmt_node;
- struct perf_hpp_fmt *fmt;
-
- list_for_each_entry(fmt_node, &hists->hpp_formats, list) {
- perf_hpp_list__for_each_format(&fmt_node->hpp, fmt)
- perf_hpp__reset_width(fmt, hists);
- }
-
return print_hierarchy_header(hists, hpp, symbol_conf.field_sep, fp);
}
@@ -733,6 +725,7 @@ size_t hists__fprintf(struct hists *hists, bool show_header, int max_rows,
bool use_callchain)
{
struct perf_hpp_fmt *fmt;
+ struct perf_hpp_list_node *node;
struct rb_node *nd;
size_t ret = 0;
const char *sep = symbol_conf.field_sep;
@@ -745,6 +738,11 @@ size_t hists__fprintf(struct hists *hists, bool show_header, int max_rows,
hists__for_each_format(hists, fmt)
perf_hpp__reset_width(fmt, hists);
+ /* hierarchy entries have their own hpp list */
+ list_for_each_entry(node, &hists->hpp_formats, list) {
+ perf_hpp_list__for_each_format(&node->hpp, fmt)
+ perf_hpp__reset_width(fmt, hists);
+ }
if (symbol_conf.col_width_list_str)
perf_hpp__set_user_width(symbol_conf.col_width_list_str);
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-20 22:10 +0200 |
| Subject | [PATCH 17/22] perf annotate: Do not ignore call instruction with indirect target |
| Message-ID | <sjzwD-7F4-75@gated-at.bofh.it> |
| In reply to | #1487598 |
From: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Do not ignore call instruction with indirect target when its already
identified as a call. This is an extension of commit e8ea1561952b ("perf
annotate: Use raw form for register indirect call instructions") to
generalize annotation for all instructions with indirect calls.
This is needed for certain powerpc call instructions that use address in
a register (such as bctrl, btarl, ...).
Apart from that, when kcore is used to disassemble function, all call
instructions were ignored. This patch will fix it as a side effect by
not ignoring them. For example,
Before (with kcore):
mov %r13,%rdi
callq 0xffffffff811a7e70
^ jmpq 64
mov %gs:0x7ef41a6e(%rip),%al
After (with kcore):
mov %r13,%rdi
> callq 0xffffffff811a7e70
^ jmpq 64
mov %gs:0x7ef41a6e(%rip),%al
Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
[Suggested about 'bctrl' instruction]
Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Chris Riyder <chris.ryder@arm.com>
Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Markus Trippelsdorf <markus@trippelsdorf.de>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Pawel Moll <pawel.moll@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Taeung Song <treeze.taeung@gmail.com>
Link: http://lkml.kernel.org/r/1471611578-11255-5-git-send-email-ravi.bangoria@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/annotate.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 7a80c7362a03..60e915f392a6 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -82,16 +82,12 @@ static int call__parse(struct ins_operands *ops)
return ops->target.name == NULL ? -1 : 0;
indirect_call:
- tok = strchr(endptr, '(');
- if (tok != NULL) {
+ tok = strchr(endptr, '*');
+ if (tok == NULL) {
ops->target.addr = 0;
return 0;
}
- tok = strchr(endptr, '*');
- if (tok == NULL)
- return -1;
-
ops->target.addr = strtoull(tok + 1, NULL, 16);
return 0;
}
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-20 22:10 +0200 |
| Subject | [PATCH 08/22] perf hists: Introduce hists__link_hierarchy() |
| Message-ID | <sjzwC-7F4-53@gated-at.bofh.it> |
| In reply to | #1487598 |
From: Namhyung Kim <namhyung@kernel.org>
The hists__link_hierarchy() is to support hierarchy reports with an
event group. When it matches the leader event and the other members
(using hists__match_hierarchy()), it also needs to link unmatched member
entries with a dummy leader event so that it can show up in the output.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20160913074552.13284-3-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/hist.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 95 insertions(+)
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index be3f5ce31303..702ba3a8ead6 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -2149,6 +2149,50 @@ out:
return he;
}
+static struct hist_entry *add_dummy_hierarchy_entry(struct hists *hists,
+ struct rb_root *root,
+ struct hist_entry *pair)
+{
+ struct rb_node **p;
+ struct rb_node *parent = NULL;
+ struct hist_entry *he;
+ struct perf_hpp_fmt *fmt;
+
+ p = &root->rb_node;
+ while (*p != NULL) {
+ int64_t cmp = 0;
+
+ parent = *p;
+ he = rb_entry(parent, struct hist_entry, rb_node_in);
+
+ perf_hpp_list__for_each_sort_list(he->hpp_list, fmt) {
+ cmp = fmt->collapse(fmt, he, pair);
+ if (cmp)
+ break;
+ }
+ if (!cmp)
+ goto out;
+
+ if (cmp < 0)
+ p = &parent->rb_left;
+ else
+ p = &parent->rb_right;
+ }
+
+ he = hist_entry__new(pair, true);
+ if (he) {
+ rb_link_node(&he->rb_node_in, parent, p);
+ rb_insert_color(&he->rb_node_in, root);
+
+ he->dummy = true;
+ he->hists = hists;
+ memset(&he->stat, 0, sizeof(he->stat));
+ hists__inc_stats(hists, he);
+ }
+out:
+ return he;
+}
+
static struct hist_entry *hists__find_entry(struct hists *hists,
struct hist_entry *he)
{
@@ -2248,6 +2292,50 @@ void hists__match(struct hists *leader, struct hists *other)
}
}
+static int hists__link_hierarchy(struct hists *leader_hists,
+ struct hist_entry *parent,
+ struct rb_root *leader_root,
+ struct rb_root *other_root)
+{
+ struct rb_node *nd;
+ struct hist_entry *pos, *leader;
+
+ for (nd = rb_first(other_root); nd; nd = rb_next(nd)) {
+ pos = rb_entry(nd, struct hist_entry, rb_node_in);
+
+ if (hist_entry__has_pairs(pos)) {
+ bool found = false;
+
+ list_for_each_entry(leader, &pos->pairs.head, pairs.node) {
+ if (leader->hists == leader_hists) {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ return -1;
+ } else {
+ leader = add_dummy_hierarchy_entry(leader_hists,
+ leader_root, pos);
+ if (leader == NULL)
+ return -1;
+
+ /* do not point parent in the pos */
+ leader->parent_he = parent;
+
+ hist_entry__add_pair(pos, leader);
+ }
+
+ if (!pos->leaf) {
+ if (hists__link_hierarchy(leader_hists, leader,
+ &leader->hroot_in,
+ &pos->hroot_in) < 0)
+ return -1;
+ }
+ }
+ return 0;
+}
+
/*
* Look for entries in the other hists that are not present in the leader, if
* we find them, just add a dummy entry on the leader hists, with period=0,
@@ -2259,6 +2347,13 @@ int hists__link(struct hists *leader, struct hists *other)
struct rb_node *nd;
struct hist_entry *pos, *pair;
+ if (symbol_conf.report_hierarchy) {
+ /* hierarchy report always collapses entries */
+ return hists__link_hierarchy(leader, NULL,
+ &leader->entries_collapsed,
+ &other->entries_collapsed);
+ }
+
if (hists__has(other, need_collapse))
root = &other->entries_collapsed;
else
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-20 22:10 +0200 |
| Subject | [PATCH 20/22] perf ui/tui: Reset output width for hierarchy |
| Message-ID | <sjzwC-7F4-65@gated-at.bofh.it> |
| In reply to | #1487598 |
From: Namhyung Kim <namhyung@kernel.org>
When --hierarchy option is used, each entry has its own hpp_list to show
the result. But it missed to update width of each column.
Before:
- 46.29% 48.12% netctl-auto
+ 31.44% 29.25% [kernel.vmlinux]
+ 8.52% 11.55% libc-2.22.so
+ 5.19% 6.91% bash
+ 10.75% 11.83% wpa_cli
+ 8.25% 2.23% swapper
+ 6.45% 5.40% tr
+ 4.81% 8.09% awk
+ 4.15% 2.85% firefox
+ 3.86% 2.53% sh
After:
- 46.29% 48.12% netctl-auto
+ 31.44% 29.25% [kernel.vmlinux]
+ 8.52% 11.55% libc-2.22.so
+ 5.19% 6.91% bash
+ 10.75% 11.83% wpa_cli
+ 8.25% 2.23% swapper
+ 6.45% 5.40% tr
+ 4.81% 8.09% awk
+ 4.15% 2.85% firefox
+ 3.86% 2.53% sh
Committer note:
Full testing instructions:
1) Record with an event group:
$ perf record -e '{cycles,instructions}' make -j4
2) Use report in hierarchy mode, to get a few expanded trees on
the same screen, use --percent-limit:
$ perf report --hierarchy --percent-limit 0.5
Samples: 103K of event 'anon group { cycles:u, instructions:u }',
Event count (approx.): 57317631725
Overhead Command / Shared Object / Symbol ◆
- 58.89% 55.12% cc1 ▒
- 50.26% 48.10% cc1 ▒
3.61% 5.13% [.] _cpp_lex_token ▒
2.58% 0.78% [.] ht_lookup_with_hash ▒
1.31% 1.30% [.] ggc_internal_alloc ▒
1.08% 2.25% [.] get_combined_adhoc_loc ▒
1.01% 1.95% [.] ira_init ▒
0.96% 1.78% [.] linemap_position_for_column ▒
0.65% 1.01% [.] cpp_get_token_with_location ▒
- 7.52% 6.58% libc-2.23.so ▒
1.70% 1.78% [.] _int_malloc ▒
0.69% 0.75% [.] _int_free ▒
0.67% 0.42% [.] malloc_consolidate ▒
- 0.58% 0.42% ld-2.23.so ▒
no entry >= 0.50% ▒
- 0.52% 0.03% [kernel.vmlinux] ▒
no entry >= 0.50% ▒
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Fixes: 1b2dbbf41a0f ("perf hists: Use own hpp_list for hierarchy mode")
Link: http://lkml.kernel.org/r/20160920053025.13989-1-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/ui/browsers/hists.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
index 35e44b1879e3..49db16334814 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -2067,6 +2067,7 @@ void hist_browser__init(struct hist_browser *browser,
struct hists *hists)
{
struct perf_hpp_fmt *fmt;
+ struct perf_hpp_list_node *node;
browser->hists = hists;
browser->b.refresh = hist_browser__refresh;
@@ -2079,6 +2080,11 @@ void hist_browser__init(struct hist_browser *browser,
perf_hpp__reset_width(fmt, hists);
++browser->b.columns;
}
+ /* hierarchy entries have their own hpp list */
+ list_for_each_entry(node, &hists->hpp_formats, list) {
+ perf_hpp_list__for_each_format(&node->hpp, fmt)
+ perf_hpp__reset_width(fmt, hists);
+ }
}
struct hist_browser *hist_browser__new(struct hists *hists)
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-20 22:10 +0200 |
| Subject | [PATCH 22/22] perf symbols: Do not open device files |
| Message-ID | <sjzwD-7F4-83@gated-at.bofh.it> |
| In reply to | #1487598 |
From: Jiri Olsa <jolsa@redhat.com> The dso__read_binary_type_filename gets the dso's file name to open. We need to check it for regular file before trying to open it, otherwise we might get stuck with device file. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: David Ahern <dsahern@gmail.com> Cc: Don Zickus <dzickus@redhat.com> Cc: Joe Mario <jmario@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/20160920161245.GA8995@krava Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/dso.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c index 774f6ec884d5..d2c6cdd9d42b 100644 --- a/tools/perf/util/dso.c +++ b/tools/perf/util/dso.c @@ -363,6 +363,9 @@ static int __open_dso(struct dso *dso, struct machine *machine) return -EINVAL; } + if (!is_regular_file(name)) + return -EINVAL; + fd = do_open(name); free(name); return fd; -- 2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-20 22:10 +0200 |
| Subject | [PATCH 12/22] perf report: Enable group view with hierarchy |
| Message-ID | <sjzwD-7F4-87@gated-at.bofh.it> |
| In reply to | #1487598 |
From: Namhyung Kim <namhyung@kernel.org>
Now that all the missing pieces are implemented, let's enable it. An
example output below:
$ perf record -e '{cycles,instructions}' make
$ perf report --hierarchy --stdio
...
# Overhead Command / Shared Object / Symbol
# ...................... ..................................
#
...
25.74% 27.18% sh
19.96% 24.14% libc-2.24.so
9.55% 14.64% [.] __strcmp_sse2
1.54% 0.00% [.] __tfind
1.07% 1.13% [.] _int_malloc
0.95% 0.00% [.] __strchr_sse2
0.89% 1.39% [.] __tsearch
0.76% 0.00% [.] strlen
...
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Requested-by: Andi Kleen <andi@firstfloor.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20160913074552.13284-8-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/builtin-report.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 1a07c4cdf6ed..6e88460cd13d 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -935,7 +935,6 @@ repeat:
if (symbol_conf.report_hierarchy) {
/* disable incompatible options */
- symbol_conf.event_group = false;
symbol_conf.cumulate_callchain = false;
if (field_order) {
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-20 22:10 +0200 |
| Subject | [PATCH 05/22] perf tools: Do hugetlb handling in more systems |
| Message-ID | <sjzwD-7F4-69@gated-at.bofh.it> |
| In reply to | #1487598 |
From: Arnaldo Carvalho de Melo <acme@redhat.com>
The csets:
0ac3348e5024 ("perf tools: Recognize hugetlb mapping as anon mapping")
d7e404af115b ("perf record: Mark MAP_HUGETLB when synthesizing mmap events")
Added code conditional on MAP_HUGETLB, to make it build in older systems
where that define wasn't available. Now that we grabbed copies of
uapi/linux/mmap.h to have all those definitions in tools/, use it so
that we can support building the tools for older systems (without the
MAP_HUGETLB define in its libc headers) using new kernels that support
such maps.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: Zefan Li <lizefan@huawei.com>
Link: http://lkml.kernel.org/n/tip-wv6oqbfkpxbix4umj2kcfmaz@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/event.c | 7 ++-----
tools/perf/util/map.c | 9 ++-------
2 files changed, 4 insertions(+), 12 deletions(-)
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
index 6c3017139c67..2880e2226fdb 100644
--- a/tools/perf/util/event.c
+++ b/tools/perf/util/event.c
@@ -1,5 +1,5 @@
#include <linux/types.h>
-#include <sys/mman.h>
+#include <uapi/linux/mman.h> /* To get things like MAP_HUGETLB even on older libc headers */
#include <api/fs/fs.h>
#include "event.h"
#include "debug.h"
@@ -249,10 +249,8 @@ int perf_event__synthesize_mmap_events(struct perf_tool *tool,
bool truncation = false;
unsigned long long timeout = proc_map_timeout * 1000000ULL;
int rc = 0;
-#ifdef MAP_HUGETLB
const char *hugetlbfs_mnt = hugetlbfs__mountpoint();
int hugetlbfs_mnt_len = hugetlbfs_mnt ? strlen(hugetlbfs_mnt) : 0;
-#endif
if (machine__is_default_guest(machine))
return 0;
@@ -347,12 +345,11 @@ out:
if (!strcmp(execname, ""))
strcpy(execname, anonstr);
-#ifdef MAP_HUGETLB
+
if (!strncmp(execname, hugetlbfs_mnt, hugetlbfs_mnt_len)) {
strcpy(execname, anonstr);
event->mmap2.flags |= MAP_HUGETLB;
}
-#endif
size = strlen(execname) + 1;
memcpy(event->mmap2.filename, execname, size);
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
index d51a1257973b..c662fef95d14 100644
--- a/tools/perf/util/map.c
+++ b/tools/perf/util/map.c
@@ -6,7 +6,7 @@
#include <string.h>
#include <stdio.h>
#include <unistd.h>
-#include <sys/mman.h>
+#include <uapi/linux/mman.h> /* To get things like MAP_HUGETLB even on older libc headers */
#include "map.h"
#include "thread.h"
#include "strlist.h"
@@ -27,12 +27,7 @@ const char *map_type__name[MAP__NR_TYPES] = {
static inline int is_anon_memory(const char *filename, u32 flags)
{
- u32 anon_flags = 0;
-
-#ifdef MAP_HUGETLB
- anon_flags |= MAP_HUGETLB;
-#endif
- return flags & anon_flags ||
+ return flags & MAP_HUGETLB ||
!strcmp(filename, "//anon") ||
!strncmp(filename, "/dev/zero", sizeof("/dev/zero") - 1) ||
!strncmp(filename, "/anon_hugepage", sizeof("/anon_hugepage") - 1);
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-20 22:10 +0200 |
| Subject | [PATCH 07/22] perf hists: Introduce hists__match_hierarchy() |
| Message-ID | <sjzwD-7F4-81@gated-at.bofh.it> |
| In reply to | #1487598 |
From: Namhyung Kim <namhyung@kernel.org>
The hists__match_hierarchy() is to find matching hist entries in a
group. A matching entry has the same values for all sort keys given.
With an event group (e.g.: -e "{cycles,instructions}"), a leader event
should show other members in a group. So each entry in the leader
should be able to find its pair entries which have same values.
With hierarchy mode, it needs to search all matching children in a
hierarchy.
An example output looks like:
# Overhead Command / Shared Object / Symbol
# ...................... ..................................
#
25.74% 27.18% sh
19.96% 24.14% libc-2.24.so
9.55% 14.64% [.] __strcmp_sse2
1.54% 0.00% [.] __tfind
1.07% 1.13% [.] _int_malloc
...
In the above example, two overheads are shown - one for the leader and
another for the other group member. They were matched since their
command, dso and symbol have the same values.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20160913074552.13284-2-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/hist.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index de15dbcdcecf..be3f5ce31303 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -2174,6 +2174,51 @@ static struct hist_entry *hists__find_entry(struct hists *hists,
return NULL;
}
+static struct hist_entry *hists__find_hierarchy_entry(struct rb_root *root,
+ struct hist_entry *he)
+{
+ struct rb_node *n = root->rb_node;
+
+ while (n) {
+ struct hist_entry *iter;
+ struct perf_hpp_fmt *fmt;
+ int64_t cmp = 0;
+
+ iter = rb_entry(n, struct hist_entry, rb_node_in);
+ perf_hpp_list__for_each_sort_list(he->hpp_list, fmt) {
+ cmp = fmt->collapse(fmt, iter, he);
+ if (cmp)
+ break;
+ }
+
+ if (cmp < 0)
+ n = n->rb_left;
+ else if (cmp > 0)
+ n = n->rb_right;
+ else
+ return iter;
+ }
+
+ return NULL;
+}
+
+static void hists__match_hierarchy(struct rb_root *leader_root,
+ struct rb_root *other_root)
+{
+ struct rb_node *nd;
+ struct hist_entry *pos, *pair;
+
+ for (nd = rb_first(leader_root); nd; nd = rb_next(nd)) {
+ pos = rb_entry(nd, struct hist_entry, rb_node_in);
+ pair = hists__find_hierarchy_entry(other_root, pos);
+
+ if (pair) {
+ hist_entry__add_pair(pair, pos);
+ hists__match_hierarchy(&pos->hroot_in, &pair->hroot_in);
+ }
+ }
+}
+
/*
* Look for pairs to link to the leader buckets (hist_entries):
*/
@@ -2183,6 +2228,12 @@ void hists__match(struct hists *leader, struct hists *other)
struct rb_node *nd;
struct hist_entry *pos, *pair;
+ if (symbol_conf.report_hierarchy) {
+ /* hierarchy report always collapses entries */
+ return hists__match_hierarchy(&leader->entries_collapsed,
+ &other->entries_collapsed);
+ }
+
if (hists__has(leader, need_collapse))
root = &leader->entries_collapsed;
else
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-20 22:10 +0200 |
| Subject | [PATCH 18/22] perf annotate: Pass the symbol's map/dso to the instruction parsers |
| Message-ID | <sjzwD-7F4-71@gated-at.bofh.it> |
| In reply to | #1487598 |
From: Arnaldo Carvalho de Melo <acme@redhat.com>
So that things like:
→ callq 0xffffffff993e3230
found while disassembling /proc/kcore can be beautified by later
patches, that will resolve that address to a function, looking it up in
/proc/kallsyms.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Chris Riyder <chris.ryder@arm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Markus Trippelsdorf <markus@trippelsdorf.de>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Pawel Moll <pawel.moll@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Taeung Song <treeze.taeung@gmail.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-p76myuke4j7gplg54amaklxk@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/annotate.c | 23 ++++++++++++-----------
tools/perf/util/annotate.h | 2 +-
2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 60e915f392a6..aef841706dff 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -54,7 +54,7 @@ int ins__scnprintf(struct ins *ins, char *bf, size_t size,
return ins__raw_scnprintf(ins, bf, size, ops);
}
-static int call__parse(struct ins_operands *ops)
+static int call__parse(struct ins_operands *ops, struct map *map __maybe_unused)
{
char *endptr, *tok, *name;
@@ -114,7 +114,7 @@ bool ins__is_call(const struct ins *ins)
return ins->ops == &call_ops;
}
-static int jump__parse(struct ins_operands *ops)
+static int jump__parse(struct ins_operands *ops, struct map *map __maybe_unused)
{
const char *s = strchr(ops->raw, '+');
@@ -169,7 +169,7 @@ static int comment__symbol(char *raw, char *comment, u64 *addrp, char **namep)
return 0;
}
-static int lock__parse(struct ins_operands *ops)
+static int lock__parse(struct ins_operands *ops, struct map *map)
{
char *name;
@@ -190,7 +190,7 @@ static int lock__parse(struct ins_operands *ops)
return 0;
if (ops->locked.ins->ops->parse &&
- ops->locked.ins->ops->parse(ops->locked.ops) < 0)
+ ops->locked.ins->ops->parse(ops->locked.ops, map) < 0)
goto out_free_ops;
return 0;
@@ -233,7 +233,7 @@ static struct ins_ops lock_ops = {
.scnprintf = lock__scnprintf,
};
-static int mov__parse(struct ins_operands *ops)
+static int mov__parse(struct ins_operands *ops, struct map *map __maybe_unused)
{
char *s = strchr(ops->raw, ','), *target, *comment, prev;
@@ -300,7 +300,7 @@ static struct ins_ops mov_ops = {
.scnprintf = mov__scnprintf,
};
-static int dec__parse(struct ins_operands *ops)
+static int dec__parse(struct ins_operands *ops, struct map *map __maybe_unused)
{
char *target, *comment, *s, prev;
@@ -705,7 +705,7 @@ int hist_entry__inc_addr_samples(struct hist_entry *he, int evidx, u64 ip)
return symbol__inc_addr_samples(he->ms.sym, he->ms.map, evidx, ip);
}
-static void disasm_line__init_ins(struct disasm_line *dl)
+static void disasm_line__init_ins(struct disasm_line *dl, struct map *map)
{
dl->ins = ins__find(dl->name);
@@ -715,7 +715,7 @@ static void disasm_line__init_ins(struct disasm_line *dl)
if (!dl->ins->ops)
return;
- if (dl->ins->ops->parse && dl->ins->ops->parse(&dl->ops) < 0)
+ if (dl->ins->ops->parse && dl->ins->ops->parse(&dl->ops, map) < 0)
dl->ins = NULL;
}
@@ -757,7 +757,8 @@ out_free_name:
}
static struct disasm_line *disasm_line__new(s64 offset, char *line,
- size_t privsize, int line_nr)
+ size_t privsize, int line_nr,
+ struct map *map)
{
struct disasm_line *dl = zalloc(sizeof(*dl) + privsize);
@@ -772,7 +773,7 @@ static struct disasm_line *disasm_line__new(s64 offset, char *line,
if (disasm_line__parse(dl->line, &dl->name, &dl->ops.raw) < 0)
goto out_free_line;
- disasm_line__init_ins(dl);
+ disasm_line__init_ins(dl, map);
}
}
@@ -1144,7 +1145,7 @@ static int symbol__parse_objdump_line(struct symbol *sym, struct map *map,
parsed_line = tmp2 + 1;
}
- dl = disasm_line__new(offset, parsed_line, privsize, *line_nr);
+ dl = disasm_line__new(offset, parsed_line, privsize, *line_nr, map);
free(line);
(*line_nr)++;
diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
index ea44e4ff19c6..5bbcec173b82 100644
--- a/tools/perf/util/annotate.h
+++ b/tools/perf/util/annotate.h
@@ -36,7 +36,7 @@ struct ins_operands {
struct ins_ops {
void (*free)(struct ins_operands *ops);
- int (*parse)(struct ins_operands *ops);
+ int (*parse)(struct ins_operands *ops, struct map *map);
int (*scnprintf)(struct ins *ins, char *bf, size_t size,
struct ins_operands *ops);
};
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Ingo Molnar <mingo@kernel.org> |
|---|---|
| Date | 2016-09-20 23:40 +0200 |
| Message-ID | <sjAVH-8wm-1@gated-at.bofh.it> |
| In reply to | #1487598 |
* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> Hi Ingo,
>
> Please consider pulling,
>
> - Arnaldo
>
> The following changes since commit cd34cd97b7b4336aa2c623c37daffab264c7c6ce:
>
> perf/x86/intel/uncore: Add Skylake server uncore support (2016-09-10 11:18:52 +0200)
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-20160920
>
> for you to fetch changes up to 3c028a0cb5b71f47d523bc8ad2c597cb257f41fb:
>
> perf symbols: Do not open device files (2016-09-20 16:20:21 -0300)
>
> ----------------------------------------------------------------
> perf/core improvements and fixes:
>
> User visible:
>
> - Support event group view with hierarchy mode in 'perf top' and 'perf report'
> (Namhyung Kim)
>
> e.g.:
>
> $ perf record -e '{cycles,instructions}' make
> $ perf report --hierarchy --stdio
> ...
> # Overhead Command / Shared Object / Symbol
> # ...................... ..................................
> ...
> 25.74% 27.18% sh
> 19.96% 24.14% libc-2.24.so
> 9.55% 14.64% [.] __strcmp_sse2
> 1.54% 0.00% [.] __tfind
> 1.07% 1.13% [.] _int_malloc
> 0.95% 0.00% [.] __strchr_sse2
> 0.89% 1.39% [.] __tsearch
> 0.76% 0.00% [.] strlen
>
> - Fix the dwarf regs table for x86_64, adding a missing % to the "%di"
> register, noticed with a failing 'perf test bpf' (Arnaldo Carvalho de Melo)
>
> - Fix handling of mmap parameters in the 'perf trace' beautifier in
> architectures that don't have the same mappings as x86_64 (Wang Nan)
>
> - Handle hugetbl mappings in older systems running new kernels (Wang Nan)
>
> - Resolve 'call' operands in 'annotate', that when using /proc/kcore
> were appearing just as hexadecimal addresses, to function names
> (Arnaldo Carvalho de Melo)
>
> - Fix width computation for srcline sort entry (Jiri Olsa)
>
> - Do not ignore call instruction with indirect target in 'annotate'
> (Ravi Bangoria)
>
> - Handle MADV_FREE in the madvise 'trace' beautifier (Wang Nan)
>
> - Fix build of 'perf trace' mman beautifier in !x86_64 (Wang Nan)
>
> Infrastructure:
>
> - Add infrastructure for PMU specific configuration, allowing to pass
> config variables directly to the kernel PMU driver, prefixing those
> variables with a '@', part of a larger series to support Coresight (Mathieu Poirier)
>
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
>
> Build stats at the end of this message.
>
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (5):
> perf probe: Fix dwarf regs table for x86_64
> perf trace beauty mmap: Fix defines for non !x86_64
> perf tools: Do hugetlb handling in more systems
> perf annotate: Pass the symbol's map/dso to the instruction parsers
> perf annotate: Resolve 'call' operands to function names
>
> Jiri Olsa (2):
> perf hists: Fix width computation for srcline sort entry
> perf symbols: Do not open device files
>
> Mathieu Poirier (1):
> perf tools: Add infrastructure for PMU specific configuration
>
> Namhyung Kim (9):
> perf hists browser: Fix event group display
> perf hists: Introduce hists__match_hierarchy()
> perf hists: Introduce hists__link_hierarchy()
> perf hist: Initialize hierarchy tree explicitly
> perf ui/stdio: Always reset output width for hierarchy
> perf ui/stdio: Rename print_hierarchy_header()
> perf report: Enable group view with hierarchy
> perf ui/tui: Reset output width for hierarchy
> perf hists: Factor out hists__reset_column_width()
>
> Ravi Bangoria (1):
> perf annotate: Do not ignore call instruction with indirect target
>
> Wang Nan (4):
> tools include: Add uapi mman.h for each architecture
> perf build: Compare mman.h related headers against kernel originals
> perf trace beauty mmap: Add missing MADV_FREE
> tools include: Add mman macros needed by perf for all arch
>
> tools/arch/alpha/include/uapi/asm/mman.h | 47 ++++++++
> tools/arch/arc/include/uapi/asm/mman.h | 6 +
> tools/arch/arm/include/uapi/asm/mman.h | 6 +
> tools/arch/arm64/include/uapi/asm/mman.h | 6 +
> tools/arch/frv/include/uapi/asm/mman.h | 6 +
> tools/arch/h8300/include/uapi/asm/mman.h | 6 +
> tools/arch/hexagon/include/uapi/asm/mman.h | 6 +
> tools/arch/ia64/include/uapi/asm/mman.h | 6 +
> tools/arch/m32r/include/uapi/asm/mman.h | 6 +
> tools/arch/microblaze/include/uapi/asm/mman.h | 6 +
> tools/arch/mips/include/uapi/asm/mman.h | 46 ++++++++
> tools/arch/mn10300/include/uapi/asm/mman.h | 6 +
> tools/arch/parisc/include/uapi/asm/mman.h | 47 ++++++++
> tools/arch/powerpc/include/uapi/asm/mman.h | 15 +++
> tools/arch/s390/include/uapi/asm/mman.h | 6 +
> tools/arch/score/include/uapi/asm/mman.h | 6 +
> tools/arch/sh/include/uapi/asm/mman.h | 6 +
> tools/arch/sparc/include/uapi/asm/mman.h | 15 +++
> tools/arch/tile/include/uapi/asm/mman.h | 15 +++
> tools/arch/x86/include/uapi/asm/mman.h | 5 +
> tools/arch/xtensa/include/uapi/asm/mman.h | 47 ++++++++
> tools/include/uapi/asm-generic/mman-common.h | 75 ++++++++++++
> tools/include/uapi/asm-generic/mman.h | 22 ++++
> tools/include/uapi/linux/mman.h | 13 +++
> tools/perf/Documentation/perf-record.txt | 12 ++
> tools/perf/MANIFEST | 4 +
> tools/perf/Makefile.perf | 9 ++
> tools/perf/arch/x86/include/dwarf-regs-table.h | 2 +-
> tools/perf/builtin-report.c | 1 -
> tools/perf/trace/beauty/mmap.c | 72 +-----------
> tools/perf/ui/browsers/hists.c | 7 +-
> tools/perf/ui/hist.c | 15 +++
> tools/perf/ui/stdio/hist.c | 25 +---
> tools/perf/util/annotate.c | 37 +++---
> tools/perf/util/annotate.h | 2 +-
> tools/perf/util/dso.c | 3 +
> tools/perf/util/event.c | 7 +-
> tools/perf/util/evsel.h | 2 +
> tools/perf/util/hist.c | 154 ++++++++++++++++++++++++-
> tools/perf/util/hist.h | 1 +
> tools/perf/util/map.c | 9 +-
> tools/perf/util/parse-events.c | 7 +-
> tools/perf/util/parse-events.h | 1 +
> tools/perf/util/parse-events.l | 22 ++++
> tools/perf/util/parse-events.y | 11 ++
> tools/perf/util/sort.h | 1 +
> 46 files changed, 698 insertions(+), 131 deletions(-)
> create mode 100644 tools/arch/alpha/include/uapi/asm/mman.h
> create mode 100644 tools/arch/arc/include/uapi/asm/mman.h
> create mode 100644 tools/arch/arm/include/uapi/asm/mman.h
> create mode 100644 tools/arch/arm64/include/uapi/asm/mman.h
> create mode 100644 tools/arch/frv/include/uapi/asm/mman.h
> create mode 100644 tools/arch/h8300/include/uapi/asm/mman.h
> create mode 100644 tools/arch/hexagon/include/uapi/asm/mman.h
> create mode 100644 tools/arch/ia64/include/uapi/asm/mman.h
> create mode 100644 tools/arch/m32r/include/uapi/asm/mman.h
> create mode 100644 tools/arch/microblaze/include/uapi/asm/mman.h
> create mode 100644 tools/arch/mips/include/uapi/asm/mman.h
> create mode 100644 tools/arch/mn10300/include/uapi/asm/mman.h
> create mode 100644 tools/arch/parisc/include/uapi/asm/mman.h
> create mode 100644 tools/arch/powerpc/include/uapi/asm/mman.h
> create mode 100644 tools/arch/s390/include/uapi/asm/mman.h
> create mode 100644 tools/arch/score/include/uapi/asm/mman.h
> create mode 100644 tools/arch/sh/include/uapi/asm/mman.h
> create mode 100644 tools/arch/sparc/include/uapi/asm/mman.h
> create mode 100644 tools/arch/tile/include/uapi/asm/mman.h
> create mode 100644 tools/arch/x86/include/uapi/asm/mman.h
> create mode 100644 tools/arch/xtensa/include/uapi/asm/mman.h
> create mode 100644 tools/include/uapi/asm-generic/mman-common.h
> create mode 100644 tools/include/uapi/asm-generic/mman.h
> create mode 100644 tools/include/uapi/linux/mman.h
>
> [root@jouet ~]# perf test
> 1: vmlinux symtab matches kallsyms : Ok
> 2: detect openat syscall event : Ok
> 3: detect openat syscall event on all cpus : Ok
> 4: read samples using the mmap interface : Ok
> 5: parse events tests : Ok
> 6: Validate PERF_RECORD_* events & perf_sample fields : Ok
> 7: Test perf pmu format parsing : Ok
> 8: Test dso data read : Ok
> 9: Test dso data cache : Ok
> 10: Test dso data reopen : Ok
> 11: roundtrip evsel->name check : Ok
> 12: Check parsing of sched tracepoints fields : Ok
> 13: Generate and check syscalls:sys_enter_openat event fields: Ok
> 14: struct perf_event_attr setup : Ok
> 15: Test matching and linking multiple hists : Ok
> 16: Try 'import perf' in python, checking link problems : Ok
> 17: Test breakpoint overflow signal handler : Ok
> 18: Test breakpoint overflow sampling : Ok
> 19: Test number of exit event of a simple workload : Ok
> 20: Test software clock events have valid period values : Ok
> 21: Test object code reading : Ok
> 22: Test sample parsing : Ok
> 23: Test using a dummy software event to keep tracking : Ok
> 24: Test parsing with no sample_id_all bit set : Ok
> 25: Test filtering hist entries : Ok
> 26: Test mmap thread lookup : Ok
> 27: Test thread mg sharing : Ok
> 28: Test output sorting of hist entries : Ok
> 29: Test cumulation of child hist entries : Ok
> 30: Test tracking with sched_switch : Ok
> 31: Filter fds with revents mask in a fdarray : Ok
> 32: Add fd to a fdarray, making it autogrow : Ok
> 33: Test kmod_path__parse function : Ok
> 34: Test thread map : Ok
> 35: Test LLVM searching and compiling :
> 35.1: Basic BPF llvm compiling test : Ok
> 35.2: Test kbuild searching : Ok
> 35.3: Compile source for BPF prologue generation test : Ok
> 35.4: Compile source for BPF relocation test : Ok
> 36: Test topology in session : Ok
> 37: Test BPF filter :
> 37.1: Test basic BPF filtering : Ok
> 37.2: Test BPF prologue generation : Ok
> 37.3: Test BPF relocation checker : Ok
> 38: Test thread map synthesize : Ok
> 39: Test cpu map synthesize : Ok
> 40: Test stat config synthesize : Ok
> 41: Test stat synthesize : Ok
> 42: Test stat round synthesize : Ok
> 43: Test attr update synthesize : Ok
> 44: Test events times : Ok
> 45: Test backward reading from ring buffer : Ok
> 46: Test cpu map print : Ok
> 47: Test SDT event probing : Ok
> 48: Test is_printable_array function : Ok
> 49: Test bitmap print : Ok
> 50: x86 rdpmc test : Ok
> 51: Test converting perf time to TSC : Ok
> 52: Test dwarf unwind : Ok
> 53: Test x86 instruction decoder - new instructions : Ok
> 54: Test intel cqm nmi context read : Skip
> [root@jouet ~]#
>
> Build stats:
>
> # time dm
> 1 74.534 alpine:3.4: Ok
> 2 25.636 android-ndk:r12b-arm: Ok
> 3 78.066 archlinux:latest: Ok
> 4 41.189 centos:5: Ok
> 5 64.550 centos:6: Ok
> 6 74.689 centos:7: Ok
> 7 68.580 debian:7: Ok
> 8 75.115 debian:8: Ok
> 9 75.288 fedora:20: Ok
> 10 79.294 fedora:21: Ok
> 11 76.839 fedora:22: Ok
> 12 76.695 fedora:23: Ok
> 13 82.058 fedora:24: Ok
> 14 31.649 fedora:24-x-ARC-uClibc: Ok
> 15 85.826 fedora:rawhide: Ok
> 16 83.272 mageia:5: Ok
> 17 76.883 opensuse:13.2: Ok
> 18 78.530 opensuse:42.1: Ok
> 19 85.315 opensuse:tumbleweed: Ok
> 20 63.436 ubuntu:12.04.5: Ok
> 21 40.909 ubuntu:14.04: Ok
> 22 72.689 ubuntu:14.04.4: Ok
> 23 76.374 ubuntu:15.10: Ok
> 24 70.309 ubuntu:16.04: Ok
> 25 59.159 ubuntu:16.04-x-arm: Ok
> 26 56.011 ubuntu:16.04-x-arm64: Ok
> 27 56.913 ubuntu:16.04-x-powerpc64: Ok
> 28 57.442 ubuntu:16.04-x-powerpc64el: Ok
> 29 80.282 ubuntu:16.10: Ok
> 30 60.964 ubuntu:16.10-x-arm64: Ok
> 31 61.390 ubuntu:16.10-x-powerpc: Ok
> 32 63.167 ubuntu:16.10-x-s390: Ok
>
> real 35m54.027s
> user 0m2.855s
> sys 0m2.652s
Pulled, thanks a lot Arnaldo!
Ingo
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web