如何在Google Profiler中查找CPU使用率

时间:2011-06-03 12:39:14

标签: google-perftools

我正在使用Google CPU Profiling工具。

http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html

在文件上给出了

分析文本输出

文本模式的输出行如下所示:

   14   2.1%  17.2%       58   8.7% std::_Rb_tree::find

以下是如何解释列:

  • 此中的分析样本数 功能
  • 分析的百分比 此功能中的样本
  • 百分比 在函数中分析样本 印刷到目前为止
  • 分析数量 这个函数中的样本及其 callees
  • 分析的百分比 这个函数中的样本及其 callees
  • 功能名称

但我无法理解哪些列告诉我功能的CPU使用率的确切或百分比?

如何获取使用谷歌个人资料的功能的CPU使用?

1 个答案:

答案 0 :(得分:7)

  

文本模式的输出行如下所示:

它会有很多行,例如,收集个人资料:

$ CPUPROFILE=a.pprof LD_PRELOAD=./libprofiler.so ./a.out

程序a.out与此处相同:Kcachegrind/callgrind is inaccurate for dispatcher functions?

然后用pprof top命令分析它:

$ pprof ./a.out a.pprof
Using local file ./a.out.
Using local file a.pprof.
Welcome to pprof!  For help, type 'help'.
(pprof) top
Total: 185 samples
      76  41.1%  41.1%       76  41.1% do_4
      51  27.6%  68.6%       51  27.6% do_3
      37  20.0%  88.6%       37  20.0% do_2
      21  11.4% 100.0%       21  11.4% do_1
       0   0.0% 100.0%      185 100.0% __libc_start_main
       0   0.0% 100.0%      185 100.0% dispatcher
       0   0.0% 100.0%       34  18.4% first2
       0   0.0% 100.0%       42  22.7% inner2
       0   0.0% 100.0%       68  36.8% last2
       0   0.0% 100.0%      185 100.0% main

那么,这里是什么:总样本数是185;并且频率是默认值(每10毫秒1个样本;或每秒100个样本)。然后总运行时间约为1.85秒。

第一列是a.out在给定函数中工作时采用的样本数。如果我们将它除以频率,我们将获得给定函数的总时间估计,例如, do_4运行约0.8秒

第二列是给定函数中的样本计数除以总计数,或此函数在总程序运行时间中的百分比。所以do_4是最慢的函数(占程序总时间的41%),而do_1只是程序运行时的11%。我想你对这个专栏感兴趣。

第三列是当前行和前一行的总和;所以我们可以知道2个最慢的函数do_4do_3占总运行时间的68%(41%+ 27%)

第4和第5列像第一和第二列;但是这些不仅会考虑给定函数本身的样本,还会直接或间接地考虑从给定函数调用的所有函数的样本。你可以看到,main和从它调用的所有内容都是总运行时间的100%(因为main是程序本身;或程序的calltree的根)和last2及其子项是运行时间的36.8%(我的程序中的子项为:do_4的一半调用和do_3的调用的一半= 41.1 + 27.6 / 2 = 69.7 / 2~ = 34%+一段时间功能本身)

PS:还有一些其他有用的pprof命令,如callgrindgv,它们显示了调用树的图形表示,并添加了分析信息。