CPU 性能分析
在 Linux 我们可以使用 perf 工具分析 CPU 的性能,它可以将消耗 CPU 时间比较大的用户程序调用栈打印出来,并生成火焰图。首先,在 Ubuntu 安装 perf 工具:
使用sudo perf list
命令可以看到 perf 支持的事件,事件有三种类型:Software event、Hardware event 和 Tracepoint event。使用perf stat
可以对某个操作执行期间发生的事件作统计,例如我们可以对下面的命令进行统计:
我们可以统计这个命令执行期间的 CPU 使用率,上下文切换次数等信息:
另一个有用的命令是perf record
,它可以对事件进行采样,将采样的数据收集在一个 perf.data 的文件中,这将会带来一定的性能开销,不过这个命令很有用,可以用来找出最占 CPU 的进程。下面的命令对系统 CPU 事件做采样,采样时间为 60 秒,每秒采样 99 个事件,-g
表示记录程序的调用栈。
执行这个命令将生成一个 perf.data 文件:
- 执行
sudo perf report -n
可以生成报告的预览。 - 执行
sudo perf report -n --stdio
可以生成一个详细的报告。 - 执行
sudo perf script
可以 dump 出 perf.data 的内容。
也可以记录某个进程的事件,例如记录进程号为 1641 的进程:
生成火焰图
通常的做法是将 out.perf 拷贝到本地机器,在本地生成火焰图:
生成火焰图可以指定参数,–width 可以指定图片宽度,–height 指定每一个调用栈的高度,生成的火焰图,宽度越大就表示CPU耗时越多。