mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-25 19:42:19 +00:00
perf annotate: Display the branch counter histogram
Display the branch counter histogram in the annotation view.
Press 'B' to display the branch counter's abbreviation list as well.
Samples: 1M of events 'anon group { branch-instructions:ppp, branch-misses }',
4000 Hz, Event count (approx.):
f3 /home/sdp/test/tchain_edit [Percent: local period]
Percent │ IPC Cycle Branch Counter (Average IPC: 1.39, IPC Coverage: 29.4%)
│ 0000000000401755 <f3>:
0.00 0.00 │ endbr64
│ push %rbp
│ mov %rsp,%rbp
│ movl $0x0,-0x4(%rbp)
0.00 0.00 │1.33 3 |A |- | ↓ jmp 25
11.03 11.03 │ 11: mov -0x4(%rbp),%eax
│ and $0x1,%eax
│ test %eax,%eax
17.13 17.13 │2.41 1 |A |- | ↓ je 21
│ addl $0x1,-0x4(%rbp)
21.84 21.84 │2.22 2 |AA |- | ↓ jmp 25
17.13 17.13 │ 21: addl $0x1,-0x4(%rbp)
21.84 21.84 │ 25: cmpl $0x270f,-0x4(%rbp)
11.03 11.03 │0.61 3 |A |- | ↑ jle 11
│ nop
│ pop %rbp
0.00 0.00 │0.24 20 |AA |B | ← ret
Originally-by: Tinghao Zhang <tinghao.zhang@intel.com>
Reviewed-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: https://lore.kernel.org/r/20240813160208.2493643-8-kan.liang@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
20d6f55528
commit
e6952dcec8
@@ -501,8 +501,10 @@ static void annotation__count_and_fill(struct annotation *notes, u64 start, u64
|
||||
}
|
||||
}
|
||||
|
||||
static int annotation__compute_ipc(struct annotation *notes, size_t size)
|
||||
static int annotation__compute_ipc(struct annotation *notes, size_t size,
|
||||
struct evsel *evsel)
|
||||
{
|
||||
unsigned int br_cntr_nr = evsel->evlist->nr_br_cntr;
|
||||
int err = 0;
|
||||
s64 offset;
|
||||
|
||||
@@ -537,6 +539,20 @@ static int annotation__compute_ipc(struct annotation *notes, size_t size)
|
||||
al->cycles->max = ch->cycles_max;
|
||||
al->cycles->min = ch->cycles_min;
|
||||
}
|
||||
if (al && notes->branch->br_cntr) {
|
||||
if (!al->br_cntr) {
|
||||
al->br_cntr = calloc(br_cntr_nr, sizeof(u64));
|
||||
if (!al->br_cntr) {
|
||||
err = ENOMEM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
al->num_aggr = ch->num_aggr;
|
||||
al->br_cntr_nr = br_cntr_nr;
|
||||
al->evsel = evsel;
|
||||
memcpy(al->br_cntr, ¬es->branch->br_cntr[offset * br_cntr_nr],
|
||||
br_cntr_nr * sizeof(u64));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -548,8 +564,10 @@ static int annotation__compute_ipc(struct annotation *notes, size_t size)
|
||||
struct annotation_line *al;
|
||||
|
||||
al = annotated_source__get_line(notes->src, offset);
|
||||
if (al)
|
||||
if (al) {
|
||||
zfree(&al->cycles);
|
||||
zfree(&al->br_cntr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1960,6 +1978,22 @@ static void __annotation_line__write(struct annotation_line *al, struct annotati
|
||||
"Cycle(min/max)");
|
||||
}
|
||||
|
||||
if (annotate_opts.show_br_cntr) {
|
||||
if (show_title) {
|
||||
obj__printf(obj, "%*s ",
|
||||
ANNOTATION__BR_CNTR_WIDTH,
|
||||
"Branch Counter");
|
||||
} else {
|
||||
char *buf;
|
||||
|
||||
if (!annotation_br_cntr_entry(&buf, al->br_cntr_nr, al->br_cntr,
|
||||
al->num_aggr, al->evsel)) {
|
||||
obj__printf(obj, "%*s ", ANNOTATION__BR_CNTR_WIDTH, buf);
|
||||
free(buf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (show_title && !*al->line) {
|
||||
ipc_coverage_string(bf, sizeof(bf), notes);
|
||||
obj__printf(obj, "%*s", ANNOTATION__AVG_IPC_WIDTH, bf);
|
||||
@@ -2056,7 +2090,7 @@ int symbol__annotate2(struct map_symbol *ms, struct evsel *evsel,
|
||||
annotation__set_index(notes);
|
||||
annotation__mark_jump_targets(notes, sym);
|
||||
|
||||
err = annotation__compute_ipc(notes, size);
|
||||
err = annotation__compute_ipc(notes, size, evsel);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user