最近给本人定了些工作,把PPT从新编写一下,所有性能相干的话题都在打算的范畴里。
最近这几天在整顿调试工具的培训PPT,原本是在7D Group的云服务器上做实例的。后果发现有些数据显示不进去。看来当初的调试工具也是须要更新了,还要再出新版反对当初的云主机了。
今天下午顺便找了个物理机做了下示例。
反对和不反对的示例如下:
上图的上半局部是在云服务器上执行的,显示不进去cycles/instructions/branches了。
上图的下半局部是在物理主机上执行的,能够显示进去cycles/instructions/branches了。
这是一个区别,揭示大家在工作中留神一下。
这里也把工具的应用稍提一下。这里以perf为例,其余工具如果有感兴趣的,也能够来探讨,像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,一个页面显示三个屏,点函数名时,其余图上也会高亮显示。如下所示:
最近调试工具的整顿告一段落,上面该重写其余内容了。
之前有人探讨说,
高级的性能工程师是玩性能测试工具的。
中级的性能工程师是玩性能监控工具的。
高级的性能工程师是玩性能调试工具的。
我想说,这样划分是有问题的,应该这么说:
高级的性能工程师是玩工具的。(包含:压力工具、监控工具、调试工具)
中级的性能工程师是玩原理的。
高级的性能工程师是玩布局的。
我想说,工具其实都是浮云,了解原理之后,工具的应用只在想和不想之间。
而布局取决于是不是拍脑袋,拍脑袋的人贻害四方,要揍死为止。