According to perf tutorials, perf stat
is supposed to report cache misses using hardware counters. However, on my system (up-to-date Arch Linux), it doesn't:
[joel@panda goog]$ perf stat ./hash
Performance counter stats for './hash':
869.447863 task-clock # 0.997 CPUs utilized
92 context-switches # 0.106 K/sec
4 cpu-migrations # 0.005 K/sec
1,041 page-faults # 0.001 M/sec
2,628,646,296 cycles # 3.023 GHz
819,269,992 stalled-cycles-frontend # 31.17% frontend cycles idle
132,355,435 stalled-cycles-backend # 5.04% backend cycles idle
4,515,152,198 instructions # 1.72 insns per cycle
# 0.18 stalled cycles per insn
1,060,739,808 branches # 1220.015 M/sec
2,653,157 branch-misses # 0.25% of all branches
0.871766141 seconds time elapsed
What am I missing? I already searched the man page and the web, but didn't find anything obvious.
Edit: my CPU is an Intel i5 2300K, if that matters.
I've spent some minutes trying to understand
perf
. I found out the cache-misses by first recording and then reporting the data (bothperf
tools).To see a list of events:
For example, in order to check the last-level-cache load misses, you will need to use the event
LLC-loads-misses
like thisthen report the results
On my system, an
Intel Xeon X5570 @ 2.93 GHz
I was able to getperf stat
to report cache references and misses by requesting those events explicitly like thisThe default set of events did not include cache events, matching your results, I don't know why
In the latest source code, the default event does not include
cache-misses
andcache-references
again:So the man and most web are out of date as so far.