使用 google-perftools 剖析程序性能瓶頸_第1頁
使用 google-perftools 剖析程序性能瓶頸_第2頁
使用 google-perftools 剖析程序性能瓶頸_第3頁
使用 google-perftools 剖析程序性能瓶頸_第4頁
使用 google-perftools 剖析程序性能瓶頸_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、使用google-perftools剖析程序性能瓶頸馮文龍.軟件工程師,IBM簡介:google-perftools是一款優(yōu)秀的LinuxC/C+程序的性能剖析及優(yōu)化工具,它提供了將目標程序運行時所消耗的CPU時間片進行剖析和圖形化輸出剖析結(jié)果的功能。本文將從零開始,一步一步引導(dǎo)讀者搭建并運行一個google-perftools的剖析環(huán)境,并用一個示例來演示如何使用該工具找到目標程序的性能瓶頸。發(fā)布日期:2010年12月16日google-perftools簡介google-perftools是一款針對C/C+程序的性能分析工具,它是一個遵守BSD協(xié)議的開源項目。使用該工具可以對CPU時間片、

2、內(nèi)存等系統(tǒng)資源的分配和使用進行分析,本文將重點介紹如何進行CPU時間片的剖析。google-perftools對一個程序的CPU性能剖析包括以下幾個步驟。編譯目標程序,加入對google-perftools庫的依賴。運行目標程序,并用某種方式啟動/終止剖析函數(shù)并產(chǎn)生剖析結(jié)果。運行剖結(jié)果轉(zhuǎn)換工具,將不可讀的結(jié)果數(shù)據(jù)轉(zhuǎn)化成某種格式的文檔(例如pdf,txt,gv等)。安裝您可以在google-perftools的網(wǎng)站( HYPERLINK /p/google-perftools/downloads/list /p/google-perftools/downloads/list)上下載最新版的安裝包

3、。為完成步驟3的工作,您還需要一個將剖析結(jié)果轉(zhuǎn)化為程序員可讀文檔的工具,例如gv( HYPERLINK /software/gv/)%e3%80%82 /software/gv/)。編譯與運行您需要在原有的編譯選項中加入對libprofiler.so的引用,這樣在目標程序運行時會加載工具的動態(tài)庫。例如本例中作者的系統(tǒng)中,bprofiler.so安裝在/usr/lib目錄下,所以需要在makefile文件中的編譯選項加入“-L/usr/lib-Iprofiler”。google-perftools需要在目標代碼的開始和結(jié)尾點分別調(diào)用剖析模塊的啟動和終止函數(shù),這樣在目標程序運行時就可以對這段時間內(nèi)

4、程序?qū)嶋H占用的CPU時間片進行統(tǒng)計和分析。工具的啟動和終止可以采用以下兩種方式。使用調(diào)試工具gdb在程序中手動運行性能工具的啟動/終止函數(shù)。gdb是Linux上廣泛使用的調(diào)試工具,它提供了強大的命令行功能,使我們可以在程序運行時插入斷點并在斷點處執(zhí)行其他函數(shù)。具體的文檔請參照/software/gdb/,本文中將只對用到的幾個基本功能進行簡單介紹。使用以下幾個功能就可以滿足我們性能調(diào)試的基本需求,具體使用請參見下文示例。命令功能ctrl+c暫停程序的運行c繼續(xù)程序的運行添加函數(shù)斷點(參數(shù)可以是源代碼中的行b號或者一個函數(shù)名)p打印某個量的值或者執(zhí)行一個函數(shù)調(diào)用在目標代碼中直接加入性能工具函數(shù)的

5、調(diào)用,該方法就是在程序代碼中直接加入調(diào)試函數(shù)的調(diào)用。兩種方式都需要對目標程序重新編譯,加入對性能工具的庫依賴。對于前者,他的好處是使用比較靈活,但工具的啟動和終止依賴于程序員的手動操作,常常需要一些暫停函數(shù)(比如休眠sleep)的支持才能達到控制程序的目的,因此精度可能受到影響。對于后者,它需要對目標代碼的進行修改,需要處理函數(shù)聲明等問題,但得到的結(jié)果精度較高,缺點是每次重新設(shè)置啟動點都需要重新編譯,靈活度不高,讀者可以根據(jù)自己的實際需求采用有效的方式。示例詳解該程序是一個簡單的例子,文中有兩處耗時的無用操作,并且二者間有一定的調(diào)用關(guān)系。清單1.示例程序voidconsumeSomeCPUTi

6、me1(intinput)inti=0;input+;while(i+10000)i-;i+;i-;i+;voidconsumeSomeCPUTime2(intinput)input+;consumeSomeCPUTime1(input);inti=0;while(i+10000)i-;i+;i-;i+;intstupidComputing(inta,intb)inti=0;while(i+10000)consumeSomeCPUTime1(i);intj=0;while(j+5000)consumeSomeCPUTime2(j);returna+b;intsmartComputing(int

7、a,intb)returna+b;voidmain()inti=0;printf(reachedthestartpointofperformancebottleneckn);sleep(5);/ProfilerStart(CPUProfile);while(i+MyProfile.pdf轉(zhuǎn)換后產(chǎn)生的結(jié)果文檔如下圖。圖中的數(shù)字和框體的大小代表了的某個函數(shù)的運行時間占整個剖析時間的比例。由代碼的邏輯可知,stupidComputing,stupidComputing2都是費時操作并且它們和consumeSomeCPUTime存在著一定的調(diào)用關(guān)系。圖1.剖析結(jié)果結(jié)束語本文介紹了一個Linux平臺上的性能剖析工具google-perftools,并結(jié)合實例向讀者展示了如何使用該工具配置、使用及分析性能瓶頸。下載名字大小下載方法src.rar4KBHTTP描述本文用到的示例關(guān)于下載方法的信息參考資料學(xué)習google-perftools主頁在developerWorksLinux專區(qū)尋找為Linux開發(fā)人員(包括Linux新手入門)準備的更多參考資料,查閱我們最受歡迎的文章和教程。在developerWorks上查閱所有Linux技巧和Linux教程。隨時關(guān)注de

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論