Appendix C · The perf Events This Board Has¶
An appendix here is a reference, not a chapter: no argument, no narrative, and everything in it
either cites a primary source or comes from a stamped result. This one is generated from the
reference machine, because which events a core exposes is a property of its silicon, its kernel and
its firmware together and cannot be read off a datasheet. The Cortex-A76 manual Arm Ltd (n.d.) says
what each event means; bench/results/perfevents-host.json says which events exist here.
Regenerate it on your own board with python3 -m bench.run_perfevents.
What this machine has¶
| This board | |
|---|---|
| PMU | armv8_cortex_a76 |
| Hardware counters | 7 |
| Events counted at once | 7 — one more makes perf multiplex, scaling each to 75.0% enabled |
| Raw hardware events | 40 |
| perf’s portable names (hardware / cache) | 9 / 12 |
| Software events the kernel keeps | 26 |
Conditions: target host · Raspberry Pi 5 Model B Rev 1.1 · Linux 6.18.50+rpt-rpi-2712 · 2026-09-16 · Source: bench/results/perfevents-host.json, code hash 33a891ae8292682f.
Counted, and computed¶
How many hardware counters this core has decides whether perf counts or estimates. Up to that many events run at once, each read straight from its own counter — a count of something that happened. Ask for one more and perf has no counter to give it, so it time-shares them: every event runs for a fraction of the workload and perf scales its reading up to a whole-run estimate. The number comes back looking the same and is no longer a count. The figure above found where that line falls by asking the machine — handing perf one more event at a time until one stopped running for the whole of the workload.
Carry that distinction out of Part V. perf stat -e cycles,instructions is two counts; perf stat
with a dozen events is a dozen estimates; and the enabled percentage perf prints beside each is how
it tells you which you are holding. ch30’s sampling rests on the same
counters and the same limit.
The hardware events¶
The events the PMU counts — the raw names the kernel exposes for this core. The Cortex-A76 manual Arm Ltd (n.d.) defines what they mean, and this book redraws none of it.
| Hardware event (Cortex-A76 PMU) | |||
|---|---|---|---|
br_mis_pred | br_mis_pred_retired | br_pred | br_retired |
bus_access | bus_cycles | cid_write_retired | cpu_cycles |
dtlb_walk | exc_return | exc_taken | inst_retired |
inst_spec | itlb_walk | l1d_cache | l1d_cache_refill |
l1d_cache_wb | l1d_tlb | l1d_tlb_refill | l1i_cache |
l1i_cache_refill | l1i_tlb | l1i_tlb_refill | l2d_cache |
l2d_cache_allocate | l2d_cache_refill | l2d_cache_wb | l2d_tlb |
l2d_tlb_refill | l3d_cache | l3d_cache_allocate | l3d_cache_refill |
ll_cache_miss_rd | ll_cache_rd | mem_access | memory_error |
remote_access | stall_backend | stall_frontend | ttbr_write_retired |
Conditions: target host · Raspberry Pi 5 Model B Rev 1.1 · Linux 6.18.50+rpt-rpi-2712 · 2026-09-16 · Source: bench/results/perfevents-host.json, code hash 33a891ae8292682f.
perf also offers portable names. These are not events of their own but aliases the kernel maps onto
some of the raw events above — and the mapping is the kernel’s choice, not a promise, so
cache-misses on one machine and cache-misses on another need not be counting the same thing. A
portable name is a convenience, not a definition.
| perf’s portable name | Kind |
|---|---|
branch-instructions | hardware |
branch-misses | hardware |
bus-cycles | hardware |
cache-misses | hardware |
cache-references | hardware |
cpu-cycles | hardware |
instructions | hardware |
stalled-cycles-backend | hardware |
stalled-cycles-frontend | hardware |
L1-dcache-load-misses | cache |
L1-dcache-loads | cache |
L1-icache-load-misses | cache |
L1-icache-loads | cache |
LLC-load-misses | cache |
LLC-loads | cache |
branch-load-misses | cache |
branch-loads | cache |
dTLB-load-misses | cache |
dTLB-loads | cache |
iTLB-load-misses | cache |
iTLB-loads | cache |
Conditions: target host · Raspberry Pi 5 Model B Rev 1.1 · Linux 6.18.50+rpt-rpi-2712 · 2026-09-16 · Source: bench/results/perfevents-host.json, code hash 33a891ae8292682f.
The software events¶
perf list sw gathers a different kind: events the kernel keeps in software, with no PMU involved,
so they are countable on a machine that has no counters at all — page faults, context switches,
migrations, the CPU clock. Mixed in are perf’s own tool values, which count nothing and are
computed or simply known: how many CPUs there are, how long the run took. The counted-and-computed
line runs straight through this list too.
| Software or tool event | ||
|---|---|---|
alignment-faults | bpf-output | cgroup-switches |
context-switches | cpu-clock | cpu-migrations |
cs | dummy | duration_time |
emulation-faults | faults | has_pmem |
major-faults | migrations | minor-faults |
num_cores | num_cpus | num_cpus_online |
num_dies | num_packages | page-faults |
slots | smt_on | system_time |
task-clock | user_time |
Conditions: target host · Raspberry Pi 5 Model B Rev 1.1 · Linux 6.18.50+rpt-rpi-2712 · 2026-09-16 · Source: bench/results/perfevents-host.json, code hash 33a891ae8292682f.
- Arm Ltd. (n.d.). Arm Cortex-A76 Core Technical Reference Manual. https://developer.arm.com/documentation/