Perf 使用说明
Perf 简介
- Perf是一系列强大的性能分析工具集合。
- 在Linux 2.6.31版本引入,至今tool/perf目录拥有1万多个提交,是内核开发中最活跃的几个领域之一。
- Perf最初只负责处理系统性能事件,随着版本迭代和演进也引入了诸如probe,tracepotint,auxtrace,bpf等等各具特色的子工具。
- 通过perf可以使用一到两行命令就完成像程序热点采样,接口调用分析,阻塞分析这些以往需要插入大量分析代码才能完成的事情。
- 借助于内核日渐健全的tracepoint,perf拥有了一千多个linux内核预插桩点,可以对系统中调度,内存,文件系统,网络等各方面进行分析
- 围绕perf和系统性能事件,也有不少像perf-tool,火焰图,热点图,vtune等第三方功能扩展。
- 本说明主要针对perf stat/record/report,硬件PMU,火焰图几个部分重点进行介绍
Perf 分析流程
Perf 进行性能分析的方式通常有两种:
- 使用perf stat等命令对特定的事件计数器进行计算,并在程序结束后打印数值
- 使用perf record等命令以若干的事件为触发间隔对系统进行采样,将数据保存至perf.data文件以供后续分析
Perf 事件支持
通过Perf list可以查看当前支持的所有事件包含硬件事件,软件事件,硬件cache事件,PMU事件以及预设Tracepoint事件
使用 Perf 的准备工作
T-HEAD 平台支持通过buildroot来快速完成整个Linux系统的搭建,所以要在T-HEAD平台上体验perf相关功能需要通过 https://github.com/c-sky/buildroot/releases 获取最新的buildroot使用源代码编译或使用Quick Start中的命令下载预编译的镜像直接执行,具体可参照 buildroot用户手册,perf功能在 T-HEAD配置中默认开启,启动后可以输入perf命令确认环境
使用火焰图分析函数热点
以callchain_test为例如,这里将介绍如何使用perf命令和火焰图分析一个程序的函数热点
- 首先运行: perf record -g callchain_test 对 callchain_test程序的热点和调用栈进行采样
- 运行perf report可以直接观测函数热点,如果第一步中未使能 -g 选项则只显示热点不显示函数调用关系,可以看到右图中热点集中在 test_4 函数,函数调用入口为 test_1
- 当函数热点较为分散时可以通过火焰图更直观的看到函数调用关系