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.
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: