前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux性能分析:perf工具使用

Linux性能分析:perf工具使用

作者头像
巫山老妖
发布2024-05-27 20:47:58
5210
发布2024-05-27 20:47:58
举报
文章被收录于专栏:小巫技术博客小巫技术博客

Perf 是一个 Linux 性能分析工具。它可以帮助我们找出程序的性能瓶颈,提高代码运行效率。Perf 的全称是 Performance Counters for Linux (PCL)。它是 Linux 内核中一种用于性能分析的子系统,通过统计硬件和软件事件,帮助我们了解程序的运行情况。

一、Perf 的用法

Perf 提供了许多子命令来完成不同的性能分析任务,常用的子命令如下:

  1. perf stat:统计程序运行时的硬件事件,如缓存未命中、分支预测错误等。
  2. perf record:记录程序运行时的性能事件,用于后续的性能分析。
  3. perf report:分析记录的性能事件,生成报告。
  4. perf list:列出所有可用的性能事件。
  5. perf top:实时显示系统中占用 CPU 最多的函数。
  6. perf annotate:对特定函数进行详细的性能分析。

二、Perf 的原理

Perf 是基于硬件性能计数器(Hardware Performance Counters,HPC)的性能分析工具。硬件性能计数器是 CPU 内部的一种特殊寄存器,用于记录特定事件的发生次数。通过读取这些计数器的值,我们可以了解程序的运行情况,如缓存未命中次数、分支预测错误次数等。Perf 通过与 Linux 内核的 perf_event 子系统交互,获取这些硬件性能计数器的值。

三、Perf 的使用示例

1. 使用 perf stat 统计程序运行时的硬件事件:

代码语言:javascript
复制
$ perf stat ./your_program

2. 使用 perf record 记录程序运行时的性能事件:

代码语言:javascript
复制
$ perf record -g ./your_program

3. 使用 perf report 分析记录的性能事件:

代码语言:javascript
复制
$ perf report

4. 使用 perf top 实时显示系统中占用 CPU 最多的函数:

代码语言:javascript
复制
$ perf top

5. 使用 perf annotate 对特定函数进行详细的性能分析:

代码语言:javascript
复制
$ perf annotate function_name

四、注意事项

  1. 使用 Perf 时,需要确保 Linux 内核支持 perf_event 子系统。在编译内核时,需要开启 CONFIG_PERF_EVENTS 选项。
  2. Perf 可能需要 root 权限才能完全使用。如果在使用过程中遇到权限不足的问题,可以尝试使用 sudo 运行 Perf。
  3. Perf 的结果可能受到 CPU 频率调整、超线程等因素的影响。在进行性能分析时,需要注意这些因素,以免得出错误的结论。

五、Perf 子命令详解

1. perf stat

perf stat 用于统计程序运行时的硬件事件。它可以帮助我们了解程序的运行状况,如 CPU 使用率、缓存未命中次数等。常用选项:

  • -e:指定要统计的事件。默认情况下,perf stat 会统计一些常见的硬件事件,如 CPU 使用率、缓存未命中次数等。通过 -e 选项,我们可以指定要统计的事件。例如,perf stat -e cache-misses ./your_program 会统计程序运行时的缓存未命中次数。
  • -r:指定运行次数。通过 -r 选项,我们可以指定要运行的次数。perf stat 会计算每次运行的事件统计值,并给出平均值。例如,perf stat -r 5 ./your_program 会运行程序 5 次,并给出平均的硬件事件统计值。

2. perf record

perf record 用于记录程序运行时的性能事件。它会将记录的性能事件保存到文件(默认为 perf.data),以便后续分析。常用选项:

  • -g:记录调用栈信息。这对于分析程序的调用关系非常有用。例如,perf record -g ./your_program 会记录程序运行时的性能事件以及调用栈信息。
  • -F:指定采样频率。通过 -F 选项,我们可以指定 perf record 的采样频率。较高的采样频率可以提供更详细的性能信息,但会增加记录文件的大小。例如,perf record -F 1000 ./your_program 会以每秒 1000 次的频率记录性能事件。
  • -o:指定记录文件。通过 -o 选项,我们可以指定 perf record 保存记录文件的路径。例如,perf record -o output.data ./your_program 会将记录的性能事件保存到 output.data 文件。

3. perf report

perf report 用于分析 perf record 保存的性能事件。它会生成一个报告,展示程序中各个函数的性能消耗。常用选项:

  • -i:指定输入文件。通过 -i 选项,我们可以指定 perf report 分析的记录文件。例如,perf report -i output.data 会分析 output.data 文件中的性能事件。
  • —stdio:以文本模式显示报告。默认情况下,perf report 会以交互式界面显示报告。通过 —stdio 选项,我们可以让 perf report 以文本模式显示报告。例如,perf report --stdio 会以文本模式显示性能报告。

4. perf top

perf top 用于实时显示系统中占用 CPU 最多的函数。它类似于 top 命令,但展示的是函数级别的性能信息。常用选项:

  • -F:指定采样频率。通过 -F 选项,我们可以指定 perf top 的采样频率。较高的采样频率可以提供更实时的性能信息,但会增加系统负担。例如,perf top -F 1000 会以每秒 1000 次的频率采样性能事件。

5. perf annotate

perf annotate 用于对特定函数进行详细的性能分析。它会展示函数的汇编代码以及每条指令的性能消耗。常用选项:

  • -i:指定输入文件。通过 -i 选项,我们可以指定 perf annotate 分析的记录文件。例如,perf annotate -i output.data function_name 会分析 output.data 文件中的性能事件,并针对 function_name 函数进行详细分析。
  • —stdio:以文本模式显示报告。默认情况下,perf annotate 会以交互式界面显示报告。通过 —stdio 选项,我们可以让 perf annotate 以文本模式显示报告。例如,perf annotate --stdio function_name 会以文本模式显示 function_name 函数的详细性能分析报告。

六、Perf 使用技巧

  1. 编译时优化:为了获得更准确的性能分析结果,建议在编译程序时开启优化选项。例如,使用 GCC 编译器时,可以通过 -O2 或 -O3 选项开启优化。
  2. 使用 debug 信息:为了让 Perf 能够正确解析程序的符号信息,建议在编译程序时保留 debug 信息。例如,使用 GCC 编译器时,可以通过 -g 选项保留 debug 信息。
  3. 排除外部干扰:在进行性能分析时,尽量减少其他程序对系统资源的占用,以免影响 Perf 的结果。例如,可以关闭不必要的后台程序,或者在空闲时段进行性能分析。
  4. 分析多线程程序:Perf 支持对多线程程序的性能分析。使用 perf record 时,可以通过 -t 选项指定要分析的线程。例如,perf record -t thread_id ./your_program 会分析指定线程的性能事件。
  5. 分析内核函数:Perf 支持对内核函数的性能分析。使用 perf record 时,可以通过 -k 选项指定要分析的内核函数。例如,perf record -k ./your_program 会分析内核函数的性能事件。
  6. 分析远程系统:Perf 支持对远程系统的性能分析。可以通过 ssh 将 perf 命令发送到远程系统,然后将记录文件传回本地进行分析。例如,ssh user@remote_host "perf record -o output.data ./your_program" 会在远程系统上运行 perf,并将记录文件传回本地。

附录

  • https://www.brendangregg.com/perf.html
  • https://www.cnblogs.com/conscience-remain/p/16142279.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巫山老妖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档