資源描述:
《gprofoprofile分析linux程序性能瓶頸》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、gprof&&oprofile分析linux程序性能瓶頸有些時(shí)候,我們特別關(guān)注程序的性能,特別是底層軟件,比如驅(qū)動(dòng)程序、OS等。為了更好的優(yōu)化程序性能,我們必須找到性能瓶頸點(diǎn),“好鋼用在刀刃上”才能取得好的效果,否則可能白做工作。為了找到關(guān)鍵路徑,我們可以使用profilng技術(shù),在linux平臺(tái)上,我們可以使用gprof和oprofile工具。gprof是GNU工具之一,它在編譯的時(shí)候在每個(gè)函數(shù)的出入口加入了profiling的代碼,運(yùn)行時(shí)統(tǒng)計(jì)程序在用戶態(tài)的執(zhí)行信息,可以得到每個(gè)函數(shù)的調(diào)用次數(shù)、執(zhí)行時(shí)間、調(diào)用關(guān)系等信息,簡單易懂。適合于查找用戶級(jí)程序的性能瓶頸,對(duì)于很多時(shí)間都在
2、內(nèi)核態(tài)執(zhí)行的程序,gprof不適合。oprofile也是一個(gè)開源的profiling工具,它使用硬件調(diào)試寄存器來統(tǒng)計(jì)信息,進(jìn)行profiling的開銷比較小,而且可以對(duì)內(nèi)核進(jìn)行profiling。它統(tǒng)計(jì)的信息非常的多,可以得到cache的缺失率,memory的訪存信息,分支預(yù)測錯(cuò)誤率等等,這些信息gprof是得不到的,但是對(duì)于函數(shù)調(diào)用次數(shù),它是不能夠得到的。。簡單來說,gprof簡單,適合于查找用戶級(jí)程序的瓶頸,而oprofile稍顯復(fù)雜,但是得到的信息更多,更適合調(diào)試系統(tǒng)軟件。Gprof使用方法1..編譯,使用-pg選項(xiàng)編譯和鏈接程序gcc-pg-otesttest.c2.運(yùn)行
3、test,test運(yùn)行的時(shí)候會(huì)把搜集的信息保存在gmoun.out中./test3.顯示結(jié)果Gproftest注意事項(xiàng):1.fedora不能使用-lc_p選項(xiàng)的問題一般gprof只能查看用戶函數(shù)信息。如果想查看庫函數(shù)的信息,需要在編譯是再加入“-lc_p”編譯參數(shù)代替“-lc”編譯參數(shù),這樣程序會(huì)鏈接libc_p.a庫,才可以產(chǎn)生庫函數(shù)的profiling信息。然而在fedora等操作系統(tǒng)中沒有安裝glibc-profile,加上-lc_p選項(xiàng)后會(huì)報(bào)出如下錯(cuò)誤:/usr/bin/ld:cannotfind-lc_p。因此需要下載安裝glibc-profile,下載地址http:/
4、/ftp.riken.jp/Linux/fedora/core/updates/2/i386/glibc-profile-2.3.3-27.1.i386.rp。2.gprof只能在程序正常結(jié)束退出之后才能生成程序測評(píng)報(bào)告,原因是gprof通過在atexit()里注冊(cè)了一個(gè)函數(shù)來產(chǎn)生結(jié)果信息,任何非正常退出都不會(huì)執(zhí)行atexit()的動(dòng)作,所以不會(huì)產(chǎn)生gmon.out文件。如果你的程序是一個(gè)不會(huì)退出的服務(wù)程序,那就只有修改代碼來達(dá)到目的。如果不想改變程序的運(yùn)行方式,可以添加一個(gè)信號(hào)處理函數(shù)解決問題(這樣對(duì)代碼修改最少),例如:???staticvoidsighandler(ints
5、ig_no)???{???exit(0);???}???signal(SIGUSR1,sighandler);當(dāng)使用kill-USR1pid后,程序退出,生成gmon.out文件。oprofile使用1.opcontrol--init2.opcontrol--no-vmlinux3.opcontrol--event=CPU_CLK_UNHALTED:50004.opcontrol--status5.opcontrol--separate=kernel--separate=lib分開記錄每個(gè)程序的性能開銷6.opcontrol--dump7.opcontrol--stop8.opr
6、eport-l
7、grep"appname"9.opcontrol--shutdown更多資料http://oprofile.sourceforge.net/examples/http://oprofile.sourceforge.net/docs/http://blog.csdn.net/Gengoo/archive/2010/01/28/5265930.aspxhttp://www.ibm.com/developerworks/cn/linux/l-oprof/http://blog.csdn.net/kofshower/archive/2010/01/22/5223700.a
8、spx