linux下測試程序中各函數執行時間工具

http://it.010lm.com/os/LINUX/239489.html


時間都去哪了~,還沒好好感受過你的速度呢,爲什麼修改了這麼多次,你依然跑的這麼慢呢?時間都去哪了~~
好吧,跑題了,下面是轉載的文章,主要介紹了兩個測試程序的工具,代碼改幾次運行時間依然降不下來,恩,現在就拿刀解剖它,看看到底那裏在耗時。
有些時候,我們特別關注程序的性能,特別是底層軟件,比如驅動程序,OS等。爲了更好的優化程序性能,我們必須找到性能瓶頸點,“好鋼用在刀刃上”才能取 得好的效果,否則可能白做工作。爲了找到關鍵路徑,我們可以使用profilng技術,在linux平臺上,我們可以使用gprof和oprofile工 具。
gprof是GNU工具之一,它在編譯的時候在每個函數的出入口加入了profiling的代碼,運行時統計程序在用戶態的 執行信息,可以得到每個函數的調用次數,執行時間,調用關係等信息,簡單易懂。適合於查找用戶級程序的性能瓶頸,對於很多時間都在內核態執行的程 序,gprof不適合。
oprofile也是一個開源的profiling工具,它使用硬件調試寄存器來統計信息,進 行profiling的開銷比較小,而且可以對內核進行profiling。它統計的信息非常的多,可以得到cache的缺失率,memory的訪存信 息,分支預測錯誤率等等,這些信息gprof是得不到的,但是對於函數調用次數,它是不能夠得到的。。
    簡單來說,gprof簡單,適合於查找用戶級程序的瓶頸,而oprofile稍顯複雜,但是得到的信息更多,更適合調試系統軟件。
    我們以編譯運行hello.c爲例,來說明如何使用這兩個工具,這裏不解釋具體結果的含義,要想詳細瞭解每個結果代表什麼意思,可以看一下參考資料中官方站點上的doc信息,裏面會給你詳盡的解釋。
gprof Quick Start
    gprof是gnu binutils工具之一,默認情況下linux系統當中都帶有這個工具。

使用 -pg 選項來編譯hello.c,如果要得到帶註釋的源碼清單,則需要增加 -g 選項。運行: gcc -pg -g -o hello hello.c
運行應用程序: ./hello 會在當前目錄下產生gmon.out文件 
使用gprof來分析gmon.out文件,需要把它和產生它的應用程序關聯起來: 
gprof hello gmon.out -p 得到每個函數佔用的執行時間 
gprof hello gmon.out -q 得到call graph,包含了每個函數的調用關係,調用次數,執行時間等信息。 
gprof hello gmon.out -A 得到 一個帶註釋的“源代碼清單”,它會註釋源碼,指出每個函數的執行次數。這需要在編譯的時候增加 -g選項。 
oprofile Quick Start
    oprofile是sourceforge上面的一個開源項目,在2.6內核上帶有這個工具,好像只有smp系統纔有。比較老的系統,需要自己安裝,重新編譯內核。
    oprofile是一套工具,分別完成不同的事情。
op_help: 列出所有支持的事件。
opcontrol:設置需要收集的事件。
opreport: 對結果進行統計輸出。
opannaotate:產生帶註釋的源/彙編文件,源語言級的註釋需要編譯源文件時的支持。
opstack:    產生調用圖profile,但要求x86/2.6的平臺,並且linux2.6安裝了call-graph patch
opgprof:    產生如gprof相似的結果。
oparchive: 將所有的原始數據文件收集打包,可以到另一臺機器上進行分析。
op_import: 將採樣的數據庫文件從另一種abi轉化成本地格式。
    運行oprofile需要root權限,因爲它要加載profile模塊,啓動oprofiled後臺程序等。所以在運行之前,就需要切換到root。

opcontrol --init 加載模塊,mout /dev/oprofile 創建必需的文件和目錄 
opcontrol --no-vmlinux 或者 opcontrol --vmlinux=/boot/vmlinux-`uname -r` 決定是否對kernel進行profiling
opcontrol --reset 清楚當前會話中的數據 
opcontrol --start 開始profiling 
./hello 運行應用程序,oprofile會對它進行profiling 
opcontrol --dump 把收集到的數據寫入文件 
opcontrol --stop 停止profiling 
opcotrol -h 關閉守護進程oprofiled 
opcontrol --shutdown 停止oprofiled 
opcontrol --deinit 卸載模塊 
常用的是3→7這幾個過程,得到性能數據之後,可以使用opreport, opstack, opgprof, opannotate幾個工具進行分析,我常用的是opreport, opannotate進行分析。
opreport使用http://oprofile.sourceforge.net/doc/opreport.html
opannotate使用 
http://oprofile.sourceforge.net/doc/opannotate.html
opgprof使用 
http://oprofile.sourceforge.net/doc/opgprof.html
最常用的是opreport,這個可以給出image和symbols的信息,比如我想得到每個函數的執行時間佔用比例等信息,用來發現系統性能瓶頸。opannotate可以對源碼進行註釋,指出哪個地方佔用時間比較多。常用命令如下:
opreport -l /bin/bash --exclude-depand --threshold 1 , 用來發現系統瓶頸。
opannotate --source --output-dir=annotated /usr/local/oprofile-pp/bin/oprofiled 
opannotate --source --base-dirs=/tmp/build/libfoo/ --search-dirs=/home/user/libfoo/ --output-dir=annotated/ /lib/libfoo.so
網絡資源
gprof 用戶手冊 http://sourceware.org/binutils/docs-2.17/gprof/index.html
oprofile官方站點 
http://oprofile.sourceforge.net/
使用 GNU profiler 來提高代碼運行速度 
http://www-128.ibm.com/developerworks/cn/linux/l-gnuprof.html
使用 OProfile for Linux on POWER 識別性能瓶頸 
http://www-128.ibm.com/developerworks/cn/linux/l-pow-oprofile/
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/To_Utopia/archive/2010/08/18/5820943.aspx

(責任編輯:聯盟電腦)

發佈了8 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章