最近给自己定了些任务,把PPT重新编写一下,所有性能相关的话题都在计划的范围里。
最近这几天在整理调试工具的培训PPT,本来是在7D Group的云服务器上做实例的。结果发现有些数据显示不出来。看来现在的调试工具也是需要更新了,还要再出新版支持现在的云主机了。
今天下午特地找了个物理机做了下示例。
支持和不支持的示例如下:
上图的上半部分是在云服务器上执行的,显示不出来cycles/instructions/branches了。
上图的下半部分是在物理主机上执行的,可以显示出来cycles/instructions/branches了。
这是一个区别,提醒大家在工作中注意一下。
这里也把工具的使用稍提一下。这里以pef为例,其他工具如果有感兴趣的,也可以来探讨,像systemstap之类的。GDB最近就不打算整了,毕竟有点老,并且使用上感觉不是顺藤摸瓜型。
perf是大部分linux上都带了的工具。一些前提条件就不提了,就是在编译内核的时候要各个选择什么的,琐碎得很。遇到这样的问题,我一般都扔给另一个兄弟去处理了。哈哈。
拿CPU消耗为例。这里最好带上-g的参数,这样可以看到类似下面这样的调用关系。这里可以看到符号表那一列有[k]或者[.],这里[k]的意思是内核态的;[.]的意思是用户态的。看你想看什么内容。
如果这里跟踪自己的应用程序,就可以直接去根据函数名找到了。
并且可以生成火焰图,如下所示,三步就可以生成。
perf script -i perf.data &> perf.unfold
perl stackcollapse-perf.pl perf.unfold &> perf.folded
perl flamegraph.pl perf.folded >perf.svg
通过Brendan Gregg的写好的工具(stackcollapse-perf.pl ,flamegraph.pl),基本上可以满足大部分的要求。有兴趣和有能力的也可以自己写一下。Cor-Paul Bezemer也写过一个差分火焰图的工具flamegraphdiff,一个页面显示三个屏,点函数名时,其他图上也会高亮显示。如下所示:
最近调试工具的整理告一段落,下面该重写其他内容了。
之前在7D Group的QQ群中有人讨论说,
初级的性能工程师是玩性能测试工具的。
中级的性能工程师是玩性能监控工具的。
高级的性能工程师是玩性能调试工具的。
我想说,这样划分是有问题的,应该这么说:
初级的性能工程师是玩工具的。(包括:压力工具、监控工具、调试工具)
中级的性能工程师是玩原理的。
高级的性能工程师是玩规划的。
我想说,工具其实都是浮云,理解原理之后,工具的使用只在想和不想之间。
而规划取决于是不是拍脑袋,拍脑袋的人贻害四方,要揍死为止。