Installing Perf Performance Analysis Tool on CentOS 8


In this guide, we are going to learn on installing Perf Performance Analysis Tool on CentOS 8. Perf aka perf_events aka perf tools is a powerful performance counters monitoring tool for Linux systems that gathers data about hardware events such as instructions executed, branches mispredicted or cache-misses suffered.

It also provides very low overhead profiling of applications to trace dynamic control flow and identify hotspots, per task, per CPU and per-workload counters, sampling and source code event annotation, dynamic creation of tracepoints using the kprobes and uprobes frameworks, for kernel and userspace dynamic tracing respectively.

Installing Perf Performance Analysis Tool on CentOS 8

Perf provide a userspace controlling utility called perf. You need to install this Perf userland utility in order to be able to use Perf on command line.

Perf is available on the default CentOS 8 repos through the perf package

dnf info perf
Available Packages
Name         : perf
Version      : 4.18.0
Release      : 147.5.1.el8_1
Architecture : x86_64
Size         : 3.4 M
Source       : kernel-4.18.0-147.5.1.el8_1.src.rpm
Repository   : BaseOS
Summary      : Performance monitoring for the Linux kernel
URL          :
License      : GPLv2
Description  : This package contains the perf tool, which enables performance monitoring
             : of the Linux kernel.

Run system update.

dnf update

Install Perf on CentOS 8

dnf install perf

The basic command line Syntax of perf utility is;

perf [--version] [--help] [OPTIONS] COMMAND [ARGS]

The most common perf sub-commands include;

  • stat: runs a command and gathers performance counter statistics from it.
  • top: generates and displays a performance counter profile in real time.
  • record: runs a command and gathers a performance counter profile from it. The gathered data is saved into without displaying anything.
  • report: It reads to display the performance counter profile information recorded via perf record sub-command.
  • list: displays the symbolic event types which can be selected in the various perf commands with the -e option.
  • trace: Just like strace, perf trace sub-command shows various system calls being executed by a particular thread or process and the signals it receives.
  • annotate: Perf annotate command displays a report file and an annotated version of the executed code.

If you just type perf command on the terminal, you should be able to see quite a number of subcommands;


 usage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS]

 The most commonly used perf commands are:
   annotate        Read (created by perf record) and display annotated code
   archive         Create archive with object files with build-ids found in file
   bench           General framework for benchmark suites
   buildid-cache   Manage build-id cache.
   buildid-list    List the buildids in a file
   c2c             Shared Data C2C/HITM Analyzer.
   config          Get and set variables in a configuration file.
   data            Data file related processing
   diff            Read files and display the differential profile
   evlist          List the event names in a file
   ftrace          simple wrapper for kernel's ftrace functionality
   inject          Filter to augment the events stream with additional information
   kallsyms        Searches running kernel for symbols
   kmem            Tool to trace/measure kernel memory properties
   kvm             Tool to trace/measure kvm guest os
   list            List all symbolic event types
   lock            Analyze lock events
   mem             Profile memory accesses
   record          Run a command and record its profile into
   report          Read (created by perf record) and display the profile
   sched           Tool to trace/measure scheduler properties (latencies)
   script          Read (created by perf record) and display trace output
   stat            Run a command and gather performance counter statistics
   test            Runs sanity tests.
   timechart       Tool to visualize total system behavior during a workload
   top             System profiling tool.
   version         display the version of perf binary
   probe           Define new dynamic tracepoints
   trace           strace inspired tool

To obtain help about a specific sub-command, just execute;

perf help SUB-COMMAND

Example Usage of Perf on CentOS 8

Next, let us go over a few example usage of perf command on CentOS 8 and similar derivatives.

Gather Command Performance Counter statistics

The stat sub-command of perf utility enables you to run a command and gather its performance counter statistics

perf stat ls
con  file  file1

 Performance counter stats for 'ls':

              1.72 msec task-clock                #    0.827 CPUs utilized          
                 0      context-switches          #    0.000 K/sec                  
                 0      cpu-migrations            #    0.000 K/sec                  
               108      page-faults               #    0.063 M/sec                  
   <not supported>      cycles                                                      
   <not supported>      instructions                                                
   <not supported>      branches                                                    
   <not supported>      branch-misses                                               

       0.002075544 seconds time elapsed

       0.002106000 seconds user
       0.000000000 seconds sys

Read more on man perf-stat.

Display Live Performance Counter Profile

perf-top is a system profiling tool used to generate and display a performance counter profile in real time. This can be achieved using the perf top command.

perf top
Samples: 29  of event 'cpu-clock', 4000 Hz, Event count (approx.): 7250000 lost: 0/0 drop: 0/0                                                         
Overhead  Shared Object  Symbol                                                                                                                         
  34.48%  [kernel]      [k] e1000_watchdog
  13.79%  [kernel]      [k] _raw_spin_unlock_irqrestore
   6.90%  [kernel]      [k] format_decode
   6.90%  [kernel]      [k] vsnprintf
   3.45%  [kernel]      [k] __x86_indirect_thunk_rax
   3.45%  [kernel]      [k] __x86_indirect_thunk_rdx
   3.45%  [kernel]      [k] kallsyms_expand_symbol.constprop.1
   3.45%  [kernel]      [k] mem_cgroup_throttle_swaprate
   3.45%  [kernel]      [k] memcpy
   3.45%  [kernel]      [k] number
   3.45%  [kernel]      [k] update_iter
   3.45%  [.] _IO_getdelim
   3.45%  [.] __memmove_avx_unaligned
   3.45%  perf          [.] dso__next_symbol
   3.45%  perf          [.] rb_next

Consult man perf-top to see more usage.

List all symbolic event types

To list all symbolic event types using perf command;

perf list
  alignment-faults                                   [Software event]
  bpf-output                                         [Software event]
  context-switches OR cs                             [Software event]
  cpu-clock                                          [Software event]
  msr/pperf/                                         [Kernel PMU event]
  msr/smi/                                           [Kernel PMU event]
  msr/tsc/                                           [Kernel PMU event]
  rNNN                                               [Raw hardware event descriptor]
  cpu/t1=v1[,t2=v2,t3 ...]/modifier                  [Raw hardware event descriptor]
   (see 'man perf-list' on how to encode it)

  mem:<addr>[/len][:access]                          [Hardware breakpoint]

Record Command Profile

To run a command and record its profile into;

perf record ls -ld /etc
drwxr-xr-x. 78 root root 8192 Mar 19 20:32 /etc
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.011 MB ]

The basic syntax and a comprehensive description of using perf record command is stated on man perf-record.

perf record -e cpu-clock -a -g -- sleep 3
[ perf record: Woken up 2 times to write data ]
[ perf record: Captured and wrote 0.628 MB (4514 samples) ]

Read and display the profile

To read the performance record, use the report sub-command. The command syntax is perf report [-i <file> | --input=file]

perf report -i
Samples: 4K of event 'cpu-clock', Event count (approx.): 1128500000                                                                                    
  Children      Self  Command          Shared Object      Symbol                                                                                       
+   99.87%    99.87%  swapper          [kernel.kallsyms]  [k] mwait_idle
+   99.87%     0.00%  swapper          [kernel.kallsyms]  [k] secondary_startup_64
+   99.87%     0.00%  swapper          [kernel.kallsyms]  [k] start_kernel
+   99.87%     0.00%  swapper          [kernel.kallsyms]  [k] cpu_startup_entry
+   99.87%     0.00%  swapper          [kernel.kallsyms]  [k] do_idle
     0.13%     0.00%  kworker/0:3-eve  [kernel.kallsyms]  [k] ret_from_fork
     0.13%     0.00%  kworker/0:3-eve  [kernel.kallsyms]  [k] kthread
     0.13%     0.00%  kworker/0:3-eve  [kernel.kallsyms]  [k] worker_thread
     0.13%     0.00%  kworker/0:3-eve  [kernel.kallsyms]  [k] process_one_work
     0.11%     0.09%  kworker/0:3-eve  [kernel.kallsyms]  [k] e1000_watchdog

Well, Perf tool is quite a comprehensive command and we can’t exhaust all if its usage in a simple introductory guide.

To read more about Perf Performance Analysis Tool, check;

Perf Wiki

Linux Perf Examples

Perf Events and tool security

Want to install Perf on Ubuntu 18.04?

Installing Perf Performance Analysis Tool on Ubuntu 18.04

Other Tutorials

How to Perform System Security Auditing with Lynis on Ubuntu 18.04

Install and Setup Adiscon LogAnalyzer on CentOS 8

Restrict SFTP User Access to Specific Directories in Linux


We're passionate about sharing our knowledge and experiences with you through our blog. If you appreciate our efforts, consider buying us a virtual coffee. Your support keeps us motivated and enables us to continually improve, ensuring that we can provide you with the best content possible. Thank you for being a coffee-fueled champion of our work!

Photo of author
I am the Co-founder of, Linux and the whole FOSS enthusiast, Linux System Admin and a Blue Teamer who loves to share technological tips and hacks with others as a way of sharing knowledge as: "In vain have you acquired knowledge if you have not imparted it to others".

Leave a Comment