2011-06-03 27 views
4

我正在使用Google CPU分析工具。如何查找谷歌分析器中的CPU使用情况

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

在它被赋予

分析文本输出

文本模式有看起来像这样的行输出的文档:

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

下面是如何解释列:

  • 在此 功能数谱样品
  • 谱的百分比在这个函数 样品
  • 在功能谱样本的百分比 印刷在这个函数和其 仿形 样品到目前为止
  • 数被调用者
  • 配置文件的百分比 本函数中的样本及其 被调用者
  • 函数名称

但我无法理解哪些列告诉我函数的确切或百分比CPU使用情况?

如何获取CPU使用谷歌配置文件的功能?

回答

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 ms 1个采样;或每秒100个采样)。那么总运行时间是〜1.85秒。

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

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

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

第四和第五列如同第一和第二列;但是这些不仅要考虑给定函数本身的样本,还要考虑直接或间接从给定函数中调用的所有函数的样本。你可以看到,main和所有从它调用的是100%的总运行时间(因为main是程序本身;或程序的调用树的根)和last2与它的孩子是运行时的36.8%(其子程序在我的程序中:半呼叫do_4和呼叫的一半到do_3 = 41.1 + 27.6/2 = 69.7/2〜= 34%+的功能本身)

PS一段时间:还有一些其他有用pprof命令,如callgrindgv,其显示添加了分析信息的呼叫树的图形表示。