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