Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1253129
  • 博文数量: 185
  • 博客积分: 495
  • 博客等级: 下士
  • 技术积分: 1418
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-02 15:12
个人简介

治肾虚不含糖,专注内核性能优化二十年。 https://github.com/KnightKu

文章分类

全部博文(185)

文章存档

2019年(1)

2018年(12)

2017年(5)

2016年(23)

2015年(1)

2014年(22)

2013年(82)

2012年(39)

分类: LINUX

2018-08-21 18:15:04

最近一段时间火焰图(flamegraph,)越来越火,特别是在性能分析,基本成了标配的工具,最近在定位lustre的性能问题,以前一直用自己改的基于ftrace的perf-tool(),但是老板说要用Flamegraph展示,悲催的是Flamegraph暂时不支持ftrace。
有个最简单的是用perf record到处事件记录,直接用flamegraph来生成svg,可是...可是...lustre没有嵌入trace event...哭笑不得...没办法,只能用systemtap来probe lustre模块中的函数,其实原理是一样的,只不过trace event是提前插入了钩子,systemtap是后来插入钩子,下面是个简单的stp脚本,用模糊语法自动匹配模块里面的函数进行probe,存到聚合数组里面,最后统一打印。

点击(此处)折叠或打开

  1. global lustre_func

  2. probe module("lnet").function("*") {
  3.     lustre_func[backtrace()] <<< 1
  4. }


  5. probe timer.s(20) {
  6.     foreach ([sys] in lustre_func) {
  7.         print_stack(sys)
  8.         printf("\t%d\n", @count(lustre_func[sys]))
  9.     }
  10.     exit()
  11. }
导出systemtap的记录,然后转换成flamegraph能识别的,最后生成svg火焰图

点击(此处)折叠或打开

  1. stap --ldd --all-modules -D MAXMAPENTRIES=256 -D MAXACTION=20000 -D MAXTRACE=100 -D MAXSTRINGLEN=4096 -D MAXBACKTRACE=100 -x 2082 lnet.stap>a.out
  2. perl stackcollapse-stap.pl a.out > a.out2
  3. perl flamegraph.pl a.out2 > a.svg
看下简单的效果图:



阅读(1070) | 评论(0) | 转发(0) |
0

上一篇:Bcache浅析

下一篇:ZFS磁盘格式(1)

给主人留下些什么吧!~~