利用火焰图FlameGraph Debug的示例

最近 debug 问题又需要用到火焰图 Flame Graph 了,我所用到的火焰图是用于查看在所需测试的条件下,看内核对各个函数的调用路径以及耗费CPU的比例。在新平台上又搭建了环境,所以记录一下,如果能帮上大家那就更好了。

1 安装

首先是安装,安装主要有两个内容,一个是 perf 一个是 FlameGraph。

1.1 perf

perf 工具我没有仔细研究,只知道是一个 Linux 的性能调优工具。安装的话,网上查的不一定适合 Ubuntu。我是直接用 apt install 安装的。其实这也比较简单,安装完 perf 之后,输入perf然后回车,它会报一些需要安装的其他内容,都安装好就可以了。

1.2 FlameGraph

找好一个地方放文件夹,然后直接git clone即可。 

git clone https://github.com/brendangregg/FlameGraph.git  

安装好后,直接cd进入该文件夹,里面有很多脚本。

2 生成火焰图

在上述的文件夹内,执行下面的三条命令,即可在文件夹中找到一个名为的perf-kernel的svg文件,当然这个文件名可以根据需要修改。

第一条命令是采集数据,利用了perf。先运行程序,创造需要采集数据的环境,然后跑下面的cmd,这里的一些option可以根据自己的需要做修改,比如时间。

sudo perf record -F 99 -a -g -- sleep 60

下面的两句是生成脚本文件以及生成火焰图,火焰图是svg文件格式,可以用谷歌浏览器等打开。

sudo perf script | ./stackcollapse-perf.pl > out.perf-folded
sudo ./flamegraph.pl out.perf-folded > perf-kernel.svg

3 利用火焰图 Debug

下面就用一个例子来了解和使用Flame Graph。

这题是这样:已经通过ethtool disable 网卡的checksum功能,期待上层自己做checksum的动作,但是怀疑虽然关掉了网卡trx checksum,上层却也没做checksum。简单来看,就是看kernel是否调用了相关的函数。下面是两个火焰图。

第一张火焰图中,我搜索了csum字样,看看有多少符合。可以看到,符合的函数很少,也就是kernel调用的相关函数不多。

然后我从代码逻辑上看到了一些问题,修改代码,得到第二张火焰图如下。这张图一下子就很明显了,不仅符合的函数更多,且调用的flow也都标明了,说明这次上层开始做checksum了,这就验证了一开始的怀疑。

4 总结语

不管是perf工具还是FlameGraph,都有许多的用处,我所用的只是比较浅薄的部分,不得不说,拿到《BPF之巅:洞悉Linux系统和应用性能》这本书后,感觉到自己要学的还有很多,和大家一起努力吧。

如果觉得这篇文章有用的话,可以点赞、评论或者收藏,万分感谢,goodbye~ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值