diff options
| author | Ingo Molnar <mingo@kernel.org> | 2014-03-19 03:05:47 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2014-03-19 03:05:47 -0400 |
| commit | 538592ff0b008237ae88f5ce5fb1247127dc3ce5 (patch) | |
| tree | e6d688f188c1ec0dde44af613f6ff69e8578051f | |
| parent | 0afd2d51029961281572d02545c7bde1b3f4292c (diff) | |
| parent | a51e87cb5a0fbebee15a3373d951dbf6f59a76c2 (diff) | |
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo:
User visible:
* Fixup header alignment in 'perf sched latency' output (Ramkumar Ramachandra)
* Fix off-by-one error in 'perf timechart record' argv handling (Ramkumar Ramachandra)
* Print the evsel name in the annotate stdio output, prep to fix support
outputting annotation for multiple events, not just for the first one
(Arnaldo Carvalho de Melo)
Internals:
* Use tid in mmap/mmap2 events to find maps (Don Zickus)
* Record the reason for filtering an address_location (Namhyung Kim)
* Apply all filters to an addr_location (Namhyung Kim)
* Merge al->filtered with hist_entry->filtered in report/hists (Namhyung Kim)
* Fix memory leak when synthesizing thread records (Namhyung Kim)
* Use ui__has_annotation() in 'report' (Namhyung Kim)
Cleanups:
* Remove unused thread__find_map function (Jiri Olsa)
* Remove unused simple_strtoul() function (Ramkumar Ramachandra)
Documentation:
* Update function names in debug messages (Ramkumar Ramachandra)
* Update some code references in design.txt (Ramkumar Ramachandra)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
| -rw-r--r-- | tools/perf/builtin-report.c | 4 | ||||
| -rw-r--r-- | tools/perf/builtin-sched.c | 10 | ||||
| -rw-r--r-- | tools/perf/builtin-timechart.c | 4 | ||||
| -rw-r--r-- | tools/perf/design.txt | 12 | ||||
| -rw-r--r-- | tools/perf/tests/hists_link.c | 1 | ||||
| -rw-r--r-- | tools/perf/util/annotate.c | 14 | ||||
| -rw-r--r-- | tools/perf/util/event.c | 34 | ||||
| -rw-r--r-- | tools/perf/util/evsel.c | 4 | ||||
| -rw-r--r-- | tools/perf/util/hist.c | 9 | ||||
| -rw-r--r-- | tools/perf/util/hist.h | 9 | ||||
| -rw-r--r-- | tools/perf/util/include/linux/kernel.h | 6 | ||||
| -rw-r--r-- | tools/perf/util/machine.c | 6 | ||||
| -rw-r--r-- | tools/perf/util/symbol.h | 2 | ||||
| -rw-r--r-- | tools/perf/util/thread.h | 6 |
14 files changed, 58 insertions, 63 deletions
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index c47bf586fcba..c8f21137dfd8 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c | |||
| @@ -231,7 +231,7 @@ static int process_sample_event(struct perf_tool *tool, | |||
| 231 | return -1; | 231 | return -1; |
| 232 | } | 232 | } |
| 233 | 233 | ||
| 234 | if (al.filtered || (rep->hide_unresolved && al.sym == NULL)) | 234 | if (rep->hide_unresolved && al.sym == NULL) |
| 235 | return 0; | 235 | return 0; |
| 236 | 236 | ||
| 237 | if (rep->cpu_list && !test_bit(sample->cpu, rep->cpu_bitmap)) | 237 | if (rep->cpu_list && !test_bit(sample->cpu, rep->cpu_bitmap)) |
| @@ -928,7 +928,7 @@ repeat: | |||
| 928 | * so don't allocate extra space that won't be used in the stdio | 928 | * so don't allocate extra space that won't be used in the stdio |
| 929 | * implementation. | 929 | * implementation. |
| 930 | */ | 930 | */ |
| 931 | if (use_browser == 1 && sort__has_sym) { | 931 | if (ui__has_annotation()) { |
| 932 | symbol_conf.priv_size = sizeof(struct annotation); | 932 | symbol_conf.priv_size = sizeof(struct annotation); |
| 933 | machines__set_symbol_filter(&session->machines, | 933 | machines__set_symbol_filter(&session->machines, |
| 934 | symbol__annotate_init); | 934 | symbol__annotate_init); |
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index 6a76a07b6789..9ac0a495c954 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c | |||
| @@ -1124,7 +1124,7 @@ static void output_lat_thread(struct perf_sched *sched, struct work_atoms *work_ | |||
| 1124 | 1124 | ||
| 1125 | avg = work_list->total_lat / work_list->nb_atoms; | 1125 | avg = work_list->total_lat / work_list->nb_atoms; |
| 1126 | 1126 | ||
| 1127 | printf("|%11.3f ms |%9" PRIu64 " | avg:%9.3f ms | max:%9.3f ms | max at: %9.6f s\n", | 1127 | printf("|%11.3f ms |%9" PRIu64 " | avg:%9.3f ms | max:%9.3f ms | max at: %13.6f s\n", |
| 1128 | (double)work_list->total_runtime / 1e6, | 1128 | (double)work_list->total_runtime / 1e6, |
| 1129 | work_list->nb_atoms, (double)avg / 1e6, | 1129 | work_list->nb_atoms, (double)avg / 1e6, |
| 1130 | (double)work_list->max_lat / 1e6, | 1130 | (double)work_list->max_lat / 1e6, |
| @@ -1527,9 +1527,9 @@ static int perf_sched__lat(struct perf_sched *sched) | |||
| 1527 | 1527 | ||
| 1528 | perf_sched__sort_lat(sched); | 1528 | perf_sched__sort_lat(sched); |
| 1529 | 1529 | ||
| 1530 | printf("\n ---------------------------------------------------------------------------------------------------------------\n"); | 1530 | printf("\n -----------------------------------------------------------------------------------------------------------------\n"); |
| 1531 | printf(" Task | Runtime ms | Switches | Average delay ms | Maximum delay ms | Maximum delay at |\n"); | 1531 | printf(" Task | Runtime ms | Switches | Average delay ms | Maximum delay ms | Maximum delay at |\n"); |
| 1532 | printf(" ---------------------------------------------------------------------------------------------------------------\n"); | 1532 | printf(" -----------------------------------------------------------------------------------------------------------------\n"); |
| 1533 | 1533 | ||
| 1534 | next = rb_first(&sched->sorted_atom_root); | 1534 | next = rb_first(&sched->sorted_atom_root); |
| 1535 | 1535 | ||
| @@ -1541,7 +1541,7 @@ static int perf_sched__lat(struct perf_sched *sched) | |||
| 1541 | next = rb_next(next); | 1541 | next = rb_next(next); |
| 1542 | } | 1542 | } |
| 1543 | 1543 | ||
| 1544 | printf(" -----------------------------------------------------------------------------------------\n"); | 1544 | printf(" -----------------------------------------------------------------------------------------------------------------\n"); |
| 1545 | printf(" TOTAL: |%11.3f ms |%9" PRIu64 " |\n", | 1545 | printf(" TOTAL: |%11.3f ms |%9" PRIu64 " |\n", |
| 1546 | (double)sched->all_runtime / 1e6, sched->all_count); | 1546 | (double)sched->all_runtime / 1e6, sched->all_count); |
| 1547 | 1547 | ||
diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 25526d6eae59..74db2568b867 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c | |||
| @@ -494,7 +494,7 @@ static const char *cat_backtrace(union perf_event *event, | |||
| 494 | continue; | 494 | continue; |
| 495 | } | 495 | } |
| 496 | 496 | ||
| 497 | tal.filtered = false; | 497 | tal.filtered = 0; |
| 498 | thread__find_addr_location(al.thread, machine, cpumode, | 498 | thread__find_addr_location(al.thread, machine, cpumode, |
| 499 | MAP__FUNCTION, ip, &tal); | 499 | MAP__FUNCTION, ip, &tal); |
| 500 | 500 | ||
| @@ -1238,7 +1238,7 @@ static int timechart__record(struct timechart *tchart, int argc, const char **ar | |||
| 1238 | for (i = 0; i < old_power_args_nr; i++) | 1238 | for (i = 0; i < old_power_args_nr; i++) |
| 1239 | *p++ = strdup(old_power_args[i]); | 1239 | *p++ = strdup(old_power_args[i]); |
| 1240 | 1240 | ||
| 1241 | for (j = 1; j < (unsigned int)argc; j++) | 1241 | for (j = 0; j < (unsigned int)argc; j++) |
| 1242 | *p++ = argv[j]; | 1242 | *p++ = argv[j]; |
| 1243 | 1243 | ||
| 1244 | return cmd_record(rec_argc, rec_argv, NULL); | 1244 | return cmd_record(rec_argc, rec_argv, NULL); |
diff --git a/tools/perf/design.txt b/tools/perf/design.txt index 63a0e6f04a01..a28dca2582aa 100644 --- a/tools/perf/design.txt +++ b/tools/perf/design.txt | |||
| @@ -18,7 +18,7 @@ underlying hardware counters. | |||
| 18 | Performance counters are accessed via special file descriptors. | 18 | Performance counters are accessed via special file descriptors. |
| 19 | There's one file descriptor per virtual counter used. | 19 | There's one file descriptor per virtual counter used. |
| 20 | 20 | ||
| 21 | The special file descriptor is opened via the perf_event_open() | 21 | The special file descriptor is opened via the sys_perf_event_open() |
| 22 | system call: | 22 | system call: |
| 23 | 23 | ||
| 24 | int sys_perf_event_open(struct perf_event_attr *hw_event_uptr, | 24 | int sys_perf_event_open(struct perf_event_attr *hw_event_uptr, |
| @@ -82,7 +82,7 @@ machine-specific. | |||
| 82 | If 'raw_type' is 0, then the 'type' field says what kind of counter | 82 | If 'raw_type' is 0, then the 'type' field says what kind of counter |
| 83 | this is, with the following encoding: | 83 | this is, with the following encoding: |
| 84 | 84 | ||
| 85 | enum perf_event_types { | 85 | enum perf_type_id { |
| 86 | PERF_TYPE_HARDWARE = 0, | 86 | PERF_TYPE_HARDWARE = 0, |
| 87 | PERF_TYPE_SOFTWARE = 1, | 87 | PERF_TYPE_SOFTWARE = 1, |
| 88 | PERF_TYPE_TRACEPOINT = 2, | 88 | PERF_TYPE_TRACEPOINT = 2, |
| @@ -95,7 +95,7 @@ specified by 'event_id': | |||
| 95 | * Generalized performance counter event types, used by the hw_event.event_id | 95 | * Generalized performance counter event types, used by the hw_event.event_id |
| 96 | * parameter of the sys_perf_event_open() syscall: | 96 | * parameter of the sys_perf_event_open() syscall: |
| 97 | */ | 97 | */ |
| 98 | enum hw_event_ids { | 98 | enum perf_hw_id { |
| 99 | /* | 99 | /* |
| 100 | * Common hardware events, generalized by the kernel: | 100 | * Common hardware events, generalized by the kernel: |
| 101 | */ | 101 | */ |
| @@ -129,7 +129,7 @@ software events, selected by 'event_id': | |||
| 129 | * physical and sw events of the kernel (and allow the profiling of them as | 129 | * physical and sw events of the kernel (and allow the profiling of them as |
| 130 | * well): | 130 | * well): |
| 131 | */ | 131 | */ |
| 132 | enum sw_event_ids { | 132 | enum perf_sw_ids { |
| 133 | PERF_COUNT_SW_CPU_CLOCK = 0, | 133 | PERF_COUNT_SW_CPU_CLOCK = 0, |
| 134 | PERF_COUNT_SW_TASK_CLOCK = 1, | 134 | PERF_COUNT_SW_TASK_CLOCK = 1, |
| 135 | PERF_COUNT_SW_PAGE_FAULTS = 2, | 135 | PERF_COUNT_SW_PAGE_FAULTS = 2, |
| @@ -230,7 +230,7 @@ these events are recorded in the ring-buffer (see below). | |||
| 230 | The 'comm' bit allows tracking of process comm data on process creation. | 230 | The 'comm' bit allows tracking of process comm data on process creation. |
| 231 | This too is recorded in the ring-buffer (see below). | 231 | This too is recorded in the ring-buffer (see below). |
| 232 | 232 | ||
| 233 | The 'pid' parameter to the perf_event_open() system call allows the | 233 | The 'pid' parameter to the sys_perf_event_open() system call allows the |
| 234 | counter to be specific to a task: | 234 | counter to be specific to a task: |
| 235 | 235 | ||
| 236 | pid == 0: if the pid parameter is zero, the counter is attached to the | 236 | pid == 0: if the pid parameter is zero, the counter is attached to the |
| @@ -260,7 +260,7 @@ The 'flags' parameter is currently unused and must be zero. | |||
| 260 | 260 | ||
| 261 | The 'group_fd' parameter allows counter "groups" to be set up. A | 261 | The 'group_fd' parameter allows counter "groups" to be set up. A |
| 262 | counter group has one counter which is the group "leader". The leader | 262 | counter group has one counter which is the group "leader". The leader |
| 263 | is created first, with group_fd = -1 in the perf_event_open call | 263 | is created first, with group_fd = -1 in the sys_perf_event_open call |
| 264 | that creates it. The rest of the group members are created | 264 | that creates it. The rest of the group members are created |
| 265 | subsequently, with group_fd giving the fd of the group leader. | 265 | subsequently, with group_fd giving the fd of the group leader. |
| 266 | (A single counter on its own is created with group_fd = -1 and is | 266 | (A single counter on its own is created with group_fd = -1 and is |
diff --git a/tools/perf/tests/hists_link.c b/tools/perf/tests/hists_link.c index 2b6519e0e36f..7ccbc7b6ae77 100644 --- a/tools/perf/tests/hists_link.c +++ b/tools/perf/tests/hists_link.c | |||
| @@ -101,6 +101,7 @@ static struct machine *setup_fake_machine(struct machines *machines) | |||
| 101 | .mmap = { | 101 | |
