perf的介绍

前言

perf 是 Linux 系统中的一个强大的性能分析工具,用于收集系统的各种性能数据。这些数据可以是 CPU 时间、硬件事件,如 cache misses,或者内核和用户空间的函数调用。perf 可以用于实时分析(sampling mode)或者统计分析(counting mode)。

安装使用

要使用 perf,确保你的 Linux 发行版已安装了正确的软件包,例如在 Ubuntu 上,你可以运行以下命令来安装它:

sudo apt-get install linux-tools-common

以下是在 C++ 程序上使用 perf 来进行基本的 CPU 性能分析的简单步骤:

  1. 编译程序:在构建程序时,你需要开启编译器的 -g 参数,这样 perf 工具就可以从可执行文件中获取符号信息。

  2. 使用 perf record 启动程序:perf record 是 perf 工具的一个子命令,用于收集性能数据。例如:

# 监控未运行的程序
perf record -g ./myprogram -o perf.data

# 监控正在运行的程序  -p参数后面的数字表示待分析的进程的PID(Process ID,进程标识)
perf record -p 678 -g -o perf.data

# 监控整个系统
perf record -F 1000 -a
-a 选项表示全系统采样,perf record -F 1000 -a 这条命令则表示以 1000Hz 的频率对整个系统进行采样。
需要注意的是,如果你的系统是多核的,那么这个频率是针对每一个 CPU 核心的。也就是说,如果系统有4个核心,实际的采样频率将会是设置的频率乘以 CPU 核心数。同时,采样频率过高可能会对系统性能造成影响,甚至导致系统崩溃,因此在设定采样频率时需要谨慎。

这条命令会在程序运行结束后在当前目录下生成一个名为 perf.data 的文件,其中包含了性能分析数据。其次可以加上sleep来去确定采样的时间

  1. 使用 perf report 查看性能报告:使用 perf report 命令可以生成并显示一个交互式的性能报告。在这个报告中,你可以看到哪些函数在 CPU 上占用了最多的时间。
perf report

perf report 会打开一个交互式界面,其中按照热点消耗告警的次数,从高到低列出了使用 CPU 时间最多的函数。

退出程序,直接ctrl+c

  1. 解析数据
perf script -i perf.data > perf.unfold

备注:如果在arm设备上,运行perf record。生成的数据perf.data要先利用perf script解析数据,再将perf.unfold来拷贝到台式机上可视化。

  1. 生成火焰图
./FlameGraph/stackcollapse-perf.pl perf.unfold &> perf.folded
./FlameGraph/flamegraph.pl perf.folded > perf.svg

从火焰图可以获得的信息

  • 调用栈从下往上,下层为父类,上层为子类。
  • 点击父类缩小,点击子类放大。
  • 只关注自己实现的函数名,忽略标准库中的函数。
  • 总结一下,火焰图的宽度用于比较不同函数或代码路径的性能,而高度用于显示函数调用堆栈的深度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值