性能检测工具perf 安装与使用

工作记录

系统环境:ubuntu 20.04

编程语言:c++


一、安装perf:

 1. 打开终端:你可以通过 Ctrl+Alt+T 快捷键或搜索终端应用程序来打开它。

2. 安装 perf 工具perf 工具包含在 linux-tools 包中,该包与你的 Linux 内核版本相关联。首先,你需要安装与你当前内核版本相匹配的 linux-tools 包:

sudo apt update sudo apt install linux-tools-$(uname -r) linux-tools-generic 

这里 uname -r 命令将会输出你当前正在运行的内核版本,以确保你安装的 perf 与内核版本一致。

二、使用 perf:

perf 提供了多种子命令来执行不同类型的性能分析,下面是一些常用的 perf 命令示例:

  1. 列出可用的性能事件

    perf list

  2. 记录性能数据:使用 perf record 来记录程序的性能数据,例如 CPU 周期数:

    perf record -g -- ./your_program

    这里 -g 选项用于记录调用图信息,从而可以生成火焰图(Flame Graph)。

这部运行过程出现如下错误:

Error: Access to performance monitoring and observability operations is limited. Consider adjusting /proc/sys/kernel/perf_event_paranoid setting to open access to performance monitoring and observability operations for processes without CAP_PERFMON, CAP_SYS_PTRACE or CAP_SYS_ADMIN Linux capability. More information can be found at 'Perf events and tool security' document: https://www.kernel.org/doc/html/latest/admin-guide/perf-security.html perf_event_paranoid setting is 4: -1: Allow use of (almost) all events by all users Ignore mlock limit after perf_event_mlock_kb without CAP_IPC_LOCK >= 0: Disallow raw and ftrace function tracepoint access >= 1: Disallow CPU event access >= 2: Disallow kernel profiling To make the adjusted perf_event_paranoid setting permanent preserve it in /etc/sysctl.conf (e.g. kernel.perf_event_paranoid = )

解决方法如下

  1. 查看当前的 perf_event_paranoid

    cat /proc/sys/kernel/perf_event_paranoid
  2. 临时更改 perf_event_paranoid 的值

    以 root 用户身份执行以下命令:

    echo 1 | sudo tee /proc/sys/kernel/perf_event_paranoid

    或者

    echo -1 | sudo tee /proc/sys/kernel/perf_event_paranoid
    • 如果你想要进行 CPU 事件分析(但不包括原始事件和跟踪点),你可以将其设置为 1 或更低。
    • 如果你想要完全访问(包括内核分析),可以将其设置为 -1
  3. 查看性能分析报告:使用 perf report 来查看记录的性能数据:

        perf report

     4. 实时分析性能数据:使用 perf top 来实时查看系统中性能热点:

    perf top

    5. 统计事件:使用 perf stat 来统计特定事件(如 CPU 周期)在程序执行期间的发生次数:

    perf stat ./your_program

三、生成火焰图:

  1. 生成火焰图:为了生成火焰图,首先要用 perf script 来处理 perf record 生成的数据。然后,可以将这些数据通过 Brenda Gregg 的火焰图生成工具来创建火焰图。

    首先,确保你已经克隆了火焰图仓库:

    git clone https://github.com/brendangregg/FlameGraph

    然后,运行以下命令生成火焰图:

    perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > flamegraph.svg

你可能感兴趣的:(c++)