性能分析工具Linux perf使用经验
一、Perf简介:
1、系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化。性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码。代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能。本篇主要讲性能分析中常用的工具——perf。
2、Perf的原理:
(1)Perf是内置于Linux内核源码树中的性能剖析(profiling)工具。它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。常用于性能瓶颈的查找与热点代码的定位。
(2)通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。
(3)使用 perf可以分析程序运行期间发生的硬件事件,比如 cache miss等;也可以分析软件事件,比如 page fault 和进程切换。
上述部分名词介绍:
1)PMU:性能监控单元(Performance Monitor Unit), CPU提供的一个性能监视单元,用于统计CPU性能数据;
2)Tracepoint:散落在内核源代码中的一些 hook,它们可以在特定的代码被运行到时被触发,这一特性可以被各种 trace/debug 工具所使用。
3)内核运行状态计数,例如: 1) 进程切换 2) Page fault 3) 中断计数
3、Perf安装:
自己网上搜就好了,一般都是内置在linux内核源码的tool目录下的。一般如下是可以的:
sudo apt-get install linux-source
cd /usr/src
cd tools/perf
make && make install
二、Perf命令:
注意:有些命令必须在root用户下才可以执行,或起作用。
1、 perf --version
查看perf当前版本;
2、perf --help
查看帮助文档,即可用指令;
3、perf list
使用perf list命令可以列出所有能够触发perf采样点的事件。
(1)不同的系统会列出不同的结果该列表很。但是按照事件类型都可以归为以下三类:
1)Hardware Event:由PMU硬件产生的事件,比如cache命中;
2)Software Event:内核软件产生的事件,比如进程切换;
3)Trachpoint Event:内核中的静态 tracepoint 所触发的事件,这些 tracepoint 用来判断程序运行期间内核的行为细节,比如 slab 分配器的分配次数等。
(2)同时还可以显示特定模块支持的perf事件:hw/cache/pmu都是硬件相关的;tracepoint基于内核的ftrace;sw实际上是内核计数器。
1)hw/hardware显示支持的硬件事件相关,如: perf list hardware
2)sw/software显示支持的软件事件列表: perf list sw
3)cache/hwcache显示硬件cache相关事件列表: perf list cache
4)pmu显示支持的PMU事件列表: perf list pmu
5) tracepoint显示支持的所有tracepoint列表,这个列表就比较庞大: perf list tracepoint
4、perf top
实时的观察下CPU时间的花费情况。如下图:
5、perf stat
启动应用程序并分析该程序完整生命周期的性能状况。虽然perf top也可以指定pid,但是对于perf top而言必须先启动应用才能查看信息。perf stat能够运行指令,并且能完整统计应用整个生命周期的信息。
6、perf record
收集采样信息,并将其记录在一个文档里(默认是perf.data),随后可用于perf report对数据文件进行分析。例如:
perf record -F 99 -p 13204 -g -- sleep 30
perf record表示记录,-F 99表示每秒99次,-p 13204是进程号,即对哪个进程进行分析,-g表示记录调用栈,sleep 30则是持续30秒。另外perf record常用选项如下:
-e record指定PMU事件--filter event事件过滤器
-a 录取所有CPU的事件
-p 录取指定pid进程的事件
-o 指定录取保存数据的文件名
-g 使能函数调用图功能
-C 录取指定CPU的事件
7、perf report
读取perf record创建的文件,并给出热点分析结果
更多指令,以及这些指令的详细介绍参见
Perf-Linux性能测试工具_coding乐园-CSDN博客_linux perf
系统级性能分析工具perf的介绍与使用 - ArnoldLu - 博客园
三、火焰图:
(1)火焰图简介:火焰图(Flame Graph)是由Linux性能优化大师Brendan Gregg发明的,Flame Graph以一个全局的视野来看待时间分布,它从底部往顶部,列出所有可能的调用栈。其他的呈现方法,一般只能列出单一的调用栈或者非层次化的时间分布。
(2)火焰图含义:
1)y 轴表示调用栈, 每一层都是一个函数. 调用栈越深, 火焰就越高, 顶部就是正在执行的函数, 下方都是它的父函数.
2)x 轴表示抽样数, 如果一个函数在 x 轴占据的宽度越宽, 就表示它被抽到的次数多, 即执行的时间长. 注意, x 轴不代表时间, 而是所有的调用栈合并后, 按字母顺序排列的。
3)火焰图就是看顶层的哪个函数占据的宽度最大. 只要有 “平顶”(plateaus), 就表示该函数可能存在性能问题。
4)颜色没有特殊含义, 因为火焰图表示的是 CPU 的繁忙程度, 所以一般选择暖色调.
(3)互动性:火焰图是基于 stack 信息生成的 SVG 图片, 用来展示 CPU 的调用栈,可以与用户互动。
(4)访达查看:点击某一层,火焰图会水平放大,该层占据所有宽度,显示详细信息。此时左上角会显示”reset zoom“,点击后图片就会恢复当原样。
(5)搜索:按下Ctrl+f会显示一个搜索框,用户可以输入关键词过着正则表达式,符合条件的函数会高亮显示。
四、生成火焰图的实例
1、下载工具FlameGraph:
链接 GitHub - brendangregg/FlameGraph: Stack trace visualizer 。我们主要是用到其中的几个文件。
2、记录数据(perf record指令):
perf record -F 99 -p 16637 -g -- sleep 30 #记录数据
此处-F 99表示一秒采样99此;
对-p 16637表示对进程16637进行记录,这个进程号是需要你实现选取的;
sleep 30表示采样的时间是30s;
执行完成后会生成perf.data文件,如下:
3、用perf script工具对perf.data进行解析
perf script > out.perf
执行完成后生成out.perf文件,如下:
4、折叠调用栈(用到FlameGraph中的stackcollapse-perf.pl文件):
./FlameGraph-master/stackcollapse-perf.pl out.perf > out.folded
执行后生成out.folded文件,如下:
5、生成火焰图(用到FlameGraph中的flamegraph.pl文件):
./FlameGraph-master/flamegraph.pl out.folded > perf.svg
执行后生成perf.svr文件,这个就是我们想要的火焰图了。
6、把这个perf.svg文件sz到本地,如下图。用浏览器打开后就是我们看到的火焰图了。
四、其他应用实例
1、查找时间上的热点函数
(1)测试代码如下:
#include <iostream>
#include <vector>using namespace std;void longa()
{int i,j;for(i = 0; i < 1000000; i++)j=i;
}void foo2()
{int i;for(i=0 ; i < 10; i++)longa();
}void foo1()
{int i;for(i = 0; i< 100; i++)longa();
}int main(void)
{foo1();foo2();
}
(2)编译代码 g++ test.cpp -o test
(3)开始记录 perf record -g -e cpu-clock ./test
(4)查看统计结果 perf report
(5)结果如下图所示:
性能分析工具Linux perf使用经验相关推荐
- linux性能分析工具:perf入门一页纸
软件开发中程序运行一段时间出现2类问题最头疼: 1.突然崩溃(调试问题) Windows:可以用WinDbg分析core dump文件,使用应用程序验证器(appverif.exe)对程序进行全面检查 ...
- 【ceph】ceph性能分析工具之perf dump代码打点调试统计PerfCounters
目录 简介 一.查ceph自带的统计 1 命令格式 2 dump 命令输出结果 二.自己添加统计 三.分析案例 io耗时初分析 继续分析 进一步分析 代码修改和验证 四.报错记录 五.附录 1.代码修 ...
- 【ceph】ceph性能分析工具之perf dump代码打点调试统计
目录 简介 一.查ceph自带的统计 1 命令格式 2 dump 命令输出结果 二.自己添加统计 三.分析案例 io耗时初分析 继续分析 进一步分析 代码修改和验证 四.报错记录 五.附录 1.代码修 ...
- C++ 性能分析工具调研
文章目录 0. 前言 1. gprof 3. valgrind 4. gperftools 5. perf 0. 前言 目标:性能分析(profile)包含的内容特别多,但目前我只关注运行时间. 详细 ...
- linux 解析pdf下载工具,Linux高级系统级性能分析工具-perf.pdf
Linux高级系统级性能分析工具-perf Linux 的系统级性能剖析工具‐perf (二) 承刚 TAOBAO Kernel Team chenggang.qin@ 第三章 Perf top ...
- Linux性能分析工具perf基础使用介绍
perf是Linux内核内置的性能分析工具.从内核版本2.6.31开始出现该工具,如果没有安装,可以使用以下命令进行安装 yum -y install perf.x86_64 这里我们主要介绍一下如何 ...
- linux 系统级性能分析工具 perf 的介绍与使用
目录 1. 背景知识 1.1 tracepoints 1.2 硬件特性之cache 2. 主要关注点 3. perf的使用 3.0 perf引入的overhead 3.1 perf list 3.2 ...
- linux 性能分析工具perf
perf 性能监控分析工具 perf 工具下载 https://cdn.kernel.org/pub/linux/kernel/tools/perf/v5.9.0/perf-5.9.0.tar.gz ...
- 系统级性能分析工具perf的介绍与使用
测试环境:Ubuntu16.04 + Kernel:4.4.0-31 apt-get install linux-source cd /usr/src/tools/perf make &&am ...
- Linux常用性能分析工具汇总
文章目录 性能分析工具 top pstree mpstat vmstat pidstat perf proc tcpdump bcc工具箱 cachestat cachetop memleak fil ...
最新文章
- 写一个参数返回二进制中1的个数
- 从一亩三分地转——“有代码的地方,就有江湖 - 冯诺伊曼.金庸”
- Android 中intent传递序列化信息(传递类)
- 网易云音乐:基于分布式图学习PGL的推荐系统优化之路
- Leetcode中单链表题总结
- 流程流转相关业务与流转的分离
- 万万没想到,一个 MongoDB.Driver 的 bug 导致 .NET5 程序死锁!
- 根据id获取多维数组路径_clickhouse数据模型之用户路径分析
- srsLTE源码学习:RRC:(Radio Resource Control):无线资源控制协议
- Software Testing Resource
- git pull出现错误的解决办法
- matplotlib中ion()和ioff()的使用
- Failed to load selinux policy, Freezing | CentOS | Redhat | RHEL
- 推荐装机软件更新下载(2006.11.7更新)
- 美化你的Xfce桌面
- 事情永远做不完,却什么都带不走
- 谷歌浏览器 F12或右键检查 开发者工具DevTool打开慢问题
- 2011年正月初6学校初六补课,还要170元补课费
- This program may be freely redistributed under the terms of the GNU GPL
- 虚荣和骄傲会让你跌得很惨
热门文章
- CSS3 详细新增内容
- HTML5 — 知识总结篇《VI》【路径的写法】
- 1091 N-自守数 (15 分)—PAT (Basic Level) Practice (中文)
- HTML5 — 知识总结篇《III》【文本元素】
- 用idea搭建SSM框架maven项目
- pycharm中tensorflow代码不能自动补全或import红线问题解决
- window.open()
- Oracle中OEM的启动与关闭
- 解决:未能找到 CodeDom 提供程序类型 Microsoft.VJSharp.VJSharpCodeProvider
- QGroundControl源码编译安装