On an Intel or AMD x86-64 system running Linux, where/how can I find out the number of hardware performance counters that my CPU has?
I would like to use the Linux perf
tool to gather hardware performance counter data while executing some applications. The perf wiki's tutorial says that if I specify (using the -e
flag to perf stat
or perf record
) more hardware events than there are performance counters in my CPU, then these events will be multiplexed over the counters during the execution, allowing them to all be tracked during a single perf
command, but possibly reducing accuracy because not all counters are active all the time. (Note that I am concerned with hardware events here, such as for cache and TLB behavior - I know that a large/unlimited number of kernel software tracepoints can be tracked without inaccuracy).
If I find out my processor model, is there an Intel/AMD website where I can find this information? Is there a simple command that I can run on the system to check the number of hardware counters? I've examined the output of cat /proc/cpuinfo
and x86info -a
, but couldn't find this information.
The CPU performance counters are counting the number of instructions, clock ticks and multi counters ticks. They are used to measure the run-time of a c-function. The result is stored in a global variable.
System, Counter: Processor Queue Length. This Performance Monitor counter displays the number of threads waiting to be executed in the queue, which all the processors on your system share. If this counter has a sustained value of two or more threads, you have a processor bottleneck on your hands.
In computers, hardware performance counters (HPC), or hardware counters are a set of special-purpose registers built into modern microprocessors to store the counts of hardware-related activities within computer systems. Advanced users often rely on those counters to conduct low-level performance analysis or tuning.
Regarding Intel processors, you can:
look in this intel documentation manual chapter 18, but it's not so easy to read.
use the cpuid
instruction - This will require to write assembly code to correctly set parameters and get results.
download and compile/install the papi library and run papi_avail | more
. The result on my laptop is:
PAPI Version : 5.1.1.0
Vendor string and code : GenuineIntel (1)
Model string and code : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz (42)
CPU Revision : 7.000000
CPUID Info : Family: 6 Model: 42 Stepping: 7
CPU Max Megahertz : 2494
CPU Min Megahertz : 2494
Hdw Threads per core : 2
Cores per Socket : 2
NUMA Nodes : 1
CPUs per Node : 4
Total CPUs : 4
Running in a VM : no
Number Hardware Counters : 11
Max Multiplex Counters : 64
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With