2011-06-03 76 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,其顯示添加了分析信息的呼叫樹的圖形表示。