diff options
| author | Ingo Molnar <mingo@kernel.org> | 2013-11-15 01:35:50 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2013-11-15 01:35:50 -0500 |
| commit | 89b4be142bf2491a94af325f5206fc2f2aa18960 (patch) | |
| tree | 28f5b908b42bee694cddad30d2fc1f15c66315e6 /tools | |
| parent | e310718d0e83aeb9969264dc577c45db16d9104d (diff) | |
| parent | 539e6bb71e350541105e67e3d6c31392d9da25ef (diff) | |
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:
* Synthesize anon MMAP records again, fix from Don Zickus.
* Add an option in 'perf record' to force per-cpu mmaps, from Adrian Hunter.
* Limit max callchain using max_stack on DWARF unwinding too.
* Fix segfault in the UI browser caused by off by one handling END key.
* Add '--demangle'/'--no-demangle' to perf probe, so that we can overcome
current limitations in handling C++ symbols, from Azat Khuzhin .
* Tweak 'perf trace' summary output, from Pekka Enberg.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/perf/Documentation/perf-record.txt | 6 | ||||
| -rw-r--r-- | tools/perf/builtin-probe.c | 2 | ||||
| -rw-r--r-- | tools/perf/builtin-record.c | 2 | ||||
| -rw-r--r-- | tools/perf/builtin-top.c | 4 | ||||
| -rw-r--r-- | tools/perf/builtin-trace.c | 10 | ||||
| -rw-r--r-- | tools/perf/tests/parse-events.c | 3 | ||||
| -rw-r--r-- | tools/perf/ui/browser.c | 4 | ||||
| -rw-r--r-- | tools/perf/ui/browsers/hists.c | 11 | ||||
| -rw-r--r-- | tools/perf/util/event.c | 6 | ||||
| -rw-r--r-- | tools/perf/util/evlist.c | 6 | ||||
| -rw-r--r-- | tools/perf/util/evsel.c | 4 | ||||
| -rw-r--r-- | tools/perf/util/evsel.h | 5 | ||||
| -rw-r--r-- | tools/perf/util/machine.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/target.h | 1 | ||||
| -rw-r--r-- | tools/perf/util/unwind.c | 9 | ||||
| -rw-r--r-- | tools/perf/util/unwind.h | 5 |
16 files changed, 50 insertions, 30 deletions
diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt index 052f7c4dc00c..43b42c4f4a91 100644 --- a/tools/perf/Documentation/perf-record.txt +++ b/tools/perf/Documentation/perf-record.txt | |||
| @@ -201,6 +201,12 @@ abort events and some memory events in precise mode on modern Intel CPUs. | |||
| 201 | --transaction:: | 201 | --transaction:: |
| 202 | Record transaction flags for transaction related events. | 202 | Record transaction flags for transaction related events. |
| 203 | 203 | ||
| 204 | --force-per-cpu:: | ||
| 205 | Force the use of per-cpu mmaps. By default, when tasks are specified (i.e. -p, | ||
| 206 | -t or -u options) per-thread mmaps are created. This option overrides that and | ||
| 207 | forces per-cpu mmaps. A side-effect of that is that inheritance is | ||
| 208 | automatically enabled. Add the -i option also to disable inheritance. | ||
| 209 | |||
| 204 | SEE ALSO | 210 | SEE ALSO |
| 205 | -------- | 211 | -------- |
| 206 | linkperf:perf-stat[1], linkperf:perf-list[1] | 212 | linkperf:perf-stat[1], linkperf:perf-list[1] |
diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index 89acc17cf2a0..6ea9e85bdc00 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c | |||
| @@ -325,6 +325,8 @@ int cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused) | |||
| 325 | opt_set_filter), | 325 | opt_set_filter), |
| 326 | OPT_CALLBACK('x', "exec", NULL, "executable|path", | 326 | OPT_CALLBACK('x', "exec", NULL, "executable|path", |
| 327 | "target executable name or path", opt_set_target), | 327 | "target executable name or path", opt_set_target), |
| 328 | OPT_BOOLEAN(0, "demangle", &symbol_conf.demangle, | ||
| 329 | "Disable symbol demangling"), | ||
| 328 | OPT_END() | 330 | OPT_END() |
| 329 | }; | 331 | }; |
| 330 | int ret; | 332 | int ret; |
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 4d644fe2d5b7..7c8020a32784 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
| @@ -888,6 +888,8 @@ const struct option record_options[] = { | |||
| 888 | "sample by weight (on special events only)"), | 888 | "sample by weight (on special events only)"), |
| 889 | OPT_BOOLEAN(0, "transaction", &record.opts.sample_transaction, | 889 | OPT_BOOLEAN(0, "transaction", &record.opts.sample_transaction, |
| 890 | "sample transaction flags (special events only)"), | 890 | "sample transaction flags (special events only)"), |
| 891 | OPT_BOOLEAN(0, "force-per-cpu", &record.opts.target.force_per_cpu, | ||
| 892 | "force the use of per-cpu mmaps"), | ||
| 891 | OPT_END() | 893 | OPT_END() |
| 892 | }; | 894 | }; |
| 893 | 895 | ||
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index b8f8e29db332..71e6402729a8 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c | |||
| @@ -1172,7 +1172,7 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused) | |||
| 1172 | status = target__validate(target); | 1172 | status = target__validate(target); |
| 1173 | if (status) { | 1173 | if (status) { |
| 1174 | target__strerror(target, status, errbuf, BUFSIZ); | 1174 | target__strerror(target, status, errbuf, BUFSIZ); |
| 1175 | ui__warning("%s", errbuf); | 1175 | ui__warning("%s\n", errbuf); |
| 1176 | } | 1176 | } |
| 1177 | 1177 | ||
| 1178 | status = target__parse_uid(target); | 1178 | status = target__parse_uid(target); |
| @@ -1180,7 +1180,7 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused) | |||
| 1180 | int saved_errno = errno; | 1180 | int saved_errno = errno; |
| 1181 | 1181 | ||
| 1182 | target__strerror(target, status, errbuf, BUFSIZ); | 1182 | target__strerror(target, status, errbuf, BUFSIZ); |
| 1183 | ui__error("%s", errbuf); | 1183 | ui__error("%s\n", errbuf); |
| 1184 | 1184 | ||
| 1185 | status = -saved_errno; | 1185 | status = -saved_errno; |
| 1186 | goto out_delete_evlist; | 1186 | goto out_delete_evlist; |
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 6b230af940e2..8be17fc462ba 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
| @@ -2112,9 +2112,9 @@ static size_t thread__dump_stats(struct thread_trace *ttrace, | |||
| 2112 | 2112 | ||
| 2113 | printed += fprintf(fp, "\n"); | 2113 | printed += fprintf(fp, "\n"); |
| 2114 | 2114 | ||
| 2115 | printed += fprintf(fp, " msec/call\n"); | 2115 | printed += fprintf(fp, " syscall calls min avg max stddev\n"); |
| 2116 | printed += fprintf(fp, " syscall calls min avg max stddev\n"); | 2116 | printed += fprintf(fp, " (msec) (msec) (msec) (%%)\n"); |
| 2117 | printed += fprintf(fp, " --------------- -------- -------- -------- -------- ------\n"); | 2117 | printed += fprintf(fp, " --------------- -------- --------- --------- --------- ------\n"); |
| 2118 | 2118 | ||
| 2119 | /* each int_node is a syscall */ | 2119 | /* each int_node is a syscall */ |
| 2120 | while (inode) { | 2120 | while (inode) { |
| @@ -2131,9 +2131,9 @@ static size_t thread__dump_stats(struct thread_trace *ttrace, | |||
| 2131 | 2131 | ||
| 2132 | sc = &trace->syscalls.table[inode->i]; | 2132 | sc = &trace->syscalls.table[inode->i]; |
| 2133 | printed += fprintf(fp, " %-15s", sc->name); | 2133 | printed += fprintf(fp, " %-15s", sc->name); |
| 2134 | printed += fprintf(fp, " %8" PRIu64 " %8.3f %8.3f", | 2134 | printed += fprintf(fp, " %8" PRIu64 " %9.3f %9.3f", |
| 2135 | n, min, avg); | 2135 | n, min, avg); |
| 2136 | printed += fprintf(fp, " %8.3f %6.2f\n", max, pct); | 2136 | printed += fprintf(fp, " %9.3f %9.2f%%\n", max, pct); |
| 2137 | } | 2137 | } |
| 2138 | 2138 | ||
| 2139 | inode = intlist__next(inode); | 2139 | inode = intlist__next(inode); |
diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index ef671cd41bb3..3cbd10496087 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c | |||
| @@ -441,9 +441,8 @@ static int test__checkevent_pmu_name(struct perf_evlist *evlist) | |||
| 441 | 441 | ||
| 442 | static int test__checkevent_pmu_events(struct perf_evlist *evlist) | 442 | static int test__checkevent_pmu_events(struct perf_evlist *evlist) |
| 443 | { | 443 | { |
| 444 | struct perf_evsel *evsel; | 444 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 445 | 445 | ||
| 446 | evsel = list_entry(evlist->entries.next, struct perf_evsel, node); | ||
| 447 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 446 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 448 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | 447 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); |
| 449 | TEST_ASSERT_VAL("wrong exclude_user", | 448 | TEST_ASSERT_VAL("wrong exclude_user", |
diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c index bbc782e364b0..cbaa7af45513 100644 --- a/tools/perf/ui/browser.c +++ b/tools/perf/ui/browser.c | |||
| @@ -569,7 +569,7 @@ void ui_browser__argv_seek(struct ui_browser *browser, off_t offset, int whence) | |||
| 569 | browser->top = browser->top + browser->top_idx + offset; | 569 | browser->top = browser->top + browser->top_idx + offset; |
| 570 | break; | 570 | break; |
| 571 | case SEEK_END: | 571 | case SEEK_END: |
| 572 | browser->top = browser->top + browser->nr_entries + offset; | 572 | browser->top = browser->top + browser->nr_entries - 1 + offset; |
| 573 | break; | 573 | break; |
| 574 | default: | 574 | default: |
| 575 | return; | 575 | return; |
| @@ -680,7 +680,7 @@ static void __ui_browser__line_arrow_down(struct ui_browser *browser, | |||
| 680 | if (end >= browser->top_idx + browser->height) | 680 | if (end >= browser->top_idx + browser->height) |
| 681 | end_row = browser->height - 1; | 681 | end_row = browser->height - 1; |
| 682 | else | 682 | else |
| 683 | end_row = end - browser->top_idx;; | 683 | end_row = end - browser->top_idx; |
| 684 | 684 | ||
| 685 | ui_browser__gotorc(browser, row, column); | 685 | ui_browser__gotorc(browser, row, column); |
| 686 | SLsmg_draw_vline(end_row - row + 1); | 686 | SLsmg_draw_vline(end_row - row + 1); |
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index 16848bb4c418..a440e03cd8c2 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c | |||
| @@ -1847,15 +1847,15 @@ browse_hists: | |||
| 1847 | switch (key) { | 1847 | switch (key) { |
| 1848 | case K_TAB: | 1848 | case K_TAB: |
| 1849 | if (pos->node.next == &evlist->entries) | 1849 | if (pos->node.next == &evlist->entries) |
| 1850 | pos = list_entry(evlist->entries.next, struct perf_evsel, node); | 1850 | pos = perf_evlist__first(evlist); |
| 1851 | else | 1851 | else |
| 1852 | pos = list_entry(pos->node.next, struct perf_evsel, node); | 1852 | pos = perf_evsel__next(pos); |
