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文件以供后续分析

img

img

img

Perf 事件支持

通过Perf list可以查看当前支持的所有事件包含硬件事件,软件事件,硬件cache事件,PMU事件以及预设Tracepoint事件

img

使用 Perf 的准备工作

T-HEAD 平台支持通过buildroot来快速完成整个Linux系统的搭建,所以要在T-HEAD平台上体验perf相关功能需要通过 https://github.com/c-sky/buildroot/releases 获取最新的buildroot使用源代码编译或使用Quick Start中的命令下载预编译的镜像直接执行,具体可参照 buildroot用户手册,perf功能在 T-HEAD配置中默认开启,启动后可以输入perf命令确认环境

img

使用火焰图分析函数热点

以callchain_test为例如,这里将介绍如何使用perf命令和火焰图分析一个程序的函数热点

  • 首先运行: perf record -g callchain_test 对 callchain_test程序的热点和调用栈进行采样
  • 运行perf report可以直接观测函数热点,如果第一步中未使能 -g 选项则只显示热点不显示函数调用关系,可以看到右图中热点集中在 test_4 函数,函数调用入口为 test_1
  • 当函数热点较为分散时可以通过火焰图更直观的看到函数调用关系

img

img

results matching ""

    No results matching ""