孟冉: Linux火焰图的数据流程分析

时间:2020-12-04 11:34:23   收藏:0   阅读:12
原创 孟冉 Linux阅码场 2017-11-15


内容简介:
本文紧接着《宋宝华:火焰图:全局视野的Linux性能剖析》一文,继续分析火焰图的数据流程和绘制原理。

作者简介
孟冉,目前就读于西安邮电大学,计算机科学与技术专业;目前研究linux系统的负载均衡技术和网络安全方面。孟冉目前在陈莉君老师的Linux 3+1实验室,并正在努力朝LEP(Linux Easy Profiling, http://www.linuxep.com)添加一键火焰图支持

技术图片

火焰图简介

火焰图是将当前系统的部分信息利用特殊图表的方式进行展示,可以将大量的数据汇聚到一张简明扼要的途中。火焰图可以直观的反映出当前系统性能占用情况,很适合应用于服务器性能的监控中。根据系统性能的指标可以将火焰图分为多种,常见的有on-cpu和off-cpu两种火焰图,下面是生成一个on-cpu火焰图的过程。
相关阅读:
宋宝华:火焰图:全局视野的Linux性能剖析

火焰图生成流程

以on-CPU火焰图为例,生成一张火焰图的大致过程如下:采集系统信息,处理信息,生成火焰图。
采集信息
采集信息有很多种方法,这里使用的是perf工具采集:


# perf record -F 99 –p 13204 -g -- sleep 60

-F 99表示每秒99次,-p 13204是进程号,即对哪个进程进行分析,-g表示记录调用栈,sleep 60则是持续60秒。

“perf script | ./stackcollapse-perf.pl > out.perf”生成的out.perf数据文件已经很方便阅读了,我们可以根据需要做定制修改,比如不需要火焰图中cpu_idle的信息:

# grep -v cpu_idle out.perf>out1.perf

不需要cpu_idle的火焰图信息,则可以过滤掉。当然也可以直接用vim处理。

生成火焰图

这里生成的火焰图是利用flamegraph.pl工具,有兴趣的可以自己做一个工具哦:

# ./flamegraph.pl out.perf > perf-kernel.svg   #将产生的数据生成火焰图。

综合上面的步骤,生成火焰图需要采样,生成数据文件(out.perf),将数据文件生成svg矢量图,火焰图就做好了(这台linux没有业务运行,所以火焰图很简单)。
技术图片

数据文件(out.perf)分析

如果想自己做一个类似于flamegraph.pl的工具,就需要知道flamegraph.pl做了哪些事情,先来看一下out.perf的内容吧!
这个是数据文件(out.perf)的内容,这里的每一行对应火焰图的一列:
技术图片

比如现在有一下数据文件:
a;b;c 1
a;b;d 2
a;e;f 1
flamegraph.pl脚本在绘制的过程如下:将一行绘制成一列,采样数越大列就越宽;在生成svg图里面,同一级的同样的函数名,合并在一起。所有的列按照样本数比例填满火焰图的总宽度(比如火焰总宽为1200px,在下图中A的宽度为1200px,C为300px)生成的svg火焰图如下:
技术图片
如果采集的out.perf中的采样数刚好都是1,那么将out.perf中的文字缩小并旋转后就会产生下面的图片,刚好对应上面生成的火焰图。这还是很有意思的。
技术图片

想要更深入的了解火焰图可以去官网查看:http://www.brendangregg.com/flamegraphs.html
on-cpu资料:http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html
off-cpu资料:http://www.brendangregg.com/FlameGraphs/offcpuflamegraphs.html

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!