The real magic of perf isn’t just that it can count events; it’s that it lets you sample program execution at hardware interrupt rates, giving you a statistical snapshot of where your CPU cycles are vanishing.
Let’s see perf in action with a simple C program that does some heavy lifting.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// A function that does some busy-waiting
void busy_wait(long long iterations) {
volatile long long i;
for (i = 0; i < iterations; i++) {
// Do nothing, just spin
}
}
// A function that does some complex calculation
double calculate_pi(long long num_terms) {
volatile double sum = 0.0;
volatile double sign = 1.0;
for (volatile long long i = 0; i < num_terms; i++) {
sum += sign / (2.0 * i + 1.0);
sign = -sign;
}
return 4.0 * sum;
}
int main() {
printf("Starting computation...\n");
// Simulate some I/O bound work
busy_wait(1000000000LL); // 1 billion iterations
// Simulate some CPU bound work
double pi = calculate_pi(50000000LL); // 50 million terms
printf("Pi calculated: %f\n", pi);
return 0;
}
Compile this with gcc -o pi_calculator pi_calculator.c.
Now, let’s profile it. The most basic perf command is perf stat. It gives you a summary of hardware events.
$ perf stat ./pi_calculator
Here’s what a typical output might look like:
Performance counter stats for './pi_calculator':
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
2000000000 instructions (83.33%)
500000000 branches (83.33%)
1000 branch-misses (83.33%)
1.054321 seconds time elapsed
1.000000 CPU max clock frequency
0.850000 CPU average clock frequency
1000000000 cpu-cycles (83.33%)
20000000