perf性能分析

perf

1. 安装perf

1
2
3
4
5
# centos
yum install -y perf

# ubuntu
apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`

2. perf list

使用sudo perf list命令可以看到 perf 支持的事件,事件有三种类型:Software event、Hardware event 和 Tracepoint event。

3. perf stat

  • Linux创建大文件
1
2
3
4
5
# /dev/zero为0源,创建内容全为0,文件快数1,大小为1G
dd if=/dev/zero of=1G1C.img bs=1G count=1

# /dev/zero为0源,创建内容全为0,文件快数1024,大小为1G
dd if=/dev/zero of=1M1024C.img bs=1M count=1024

  • 使用perf stat 对操作执行期间发生的事件作统计
1
perf stat dd if=/dev/zero of=20G20480C.img bs=1M count=20480

4. perf record

perf record可以对事件进行采样,将采样的数据收集在一个 perf.data 的文件中
将会带来一定的性能开销,不过这个命令很有用,可以用来找出最占 CPU 的进程。
下面的命令对系统 CPU 事件做采样,采样时间为 60 秒,每秒采样 99 个事件,-g表示记录程序的调用栈。

1
perf record -F 99 -a -g -- sleep 60

将生成一个 perf.data 文件

  • 执行sudo perf report -n可以生成报告的预览。
  • 执行sudo perf report -n –stdio可以生成一个详细的报告。
  • 执行sudo perf script可以 dump 出 perf.data 的内容。

指定进程事件

1
2
3
4
# 记录进程号为 1111 的事件 生成 perf.data
perf record -F 199 -p 1111 -g -- sleep 60
# 将 perf.data 的内容 dump 到 out.perf
perf script > out.perf

火焰图

1
2
3
4
5
6
# 获取FlameGraph程序
git clone --depth 1 https://github.com/brendangregg/FlameGraph.git
# 折叠调用栈
FlameGraph/stackcollapse-perf.pl out.perf > out.folded
# 生成火焰图
FlameGraph/flamegraph.pl out.folded > out.svg

参考

如何读懂火焰图
perf的基本使用方法


perf性能分析
https://blog.erhuoyan.cn/2024/08/19/94c411388890/
作者
erhuoyan
发布于
2024年8月19日
许可协议