天天看點

oprofile庫安裝與使用

一、概述

oprofile庫是linux平台上的一個功能強大的性能分析工具,支援兩種采樣方式:基于事件的采樣與基于時間的采樣。

1)基于事件的采樣:oprofile隻記錄特定事件(比如L2 cache miss)的發生次數,當達到使用者設定的值時,oprofile就記錄一下(采樣一次)。這種方式需要CPU内部有性能計數器。

2)基于時間的采樣是oprofile借助OS時鐘中斷的機制,每個時鐘中斷oprofile都會記錄一次(采樣一次),其精度相對于基于事件的采樣要低。因為要借助OS時鐘中斷的支援,對禁用中斷的代碼oprofile不能對其進行分析。

oprofile在Linux上分為兩部分,一個是核心子產品(oprofile.ko),一個是使用者空間的守護程序(oprofiled)。

1)oprofile.ko 負責通路性能計數器或者注冊基于時間采樣的函數(使用register_timer_hook注冊之,使時鐘中斷處理程式最後執行profile_tick時可以通路之),并将采樣置于核心的緩沖區内。

2)oprofiled在背景運作,負責從核心空間搜集資料,寫入檔案。

二、注意事項

1)不建議在虛拟機裡利用oprofile來測試性能,因為虛拟機對oprofile支援不好。

2)調試的核心最好是原生的核心,發行版Linux(比如redhat)自帶的核心一般都是經過大量修改的,對oprofile支援不好,是以我們最好從kernel官方網站下載下傳源碼後自行編譯生成核心,重新開機機器對新核心環境進行性能測試。另外oprofile需要的是未經壓縮的核心鏡像,是以/boot目錄的vmlinuz-x.x.xx是不能用的,而需要使用linux源碼編譯目錄裡的未壓縮鏡像檔案,比如/usr/src/linux-2.6.30/vmlinux

3)需要添加核心配置檔案

CONFIG_OPROFILE=m(或者y)

CONFIG_PROFILIING=y

一般核心将oprofile編譯成子產品,可以自行加載。在/lib/modules/3.xx.xx/kernel/arch/x86/oprofile下有oprofile.ko核心子產品。

三、編譯問題

oprofile-1.0.0,下載下傳位址:​​http://sourceforge.net/projects/oprofile/files/oprofile/​​

./configure make & sudo make install

1)提示:configure:error:popt library not found

下載下傳popt-1.16,下載下傳位址:​​http://www.linuxfromscratch.org/blfs/view/svn/general/popt.html​​

./configure make & sudo make install

繼續進入oprofile目錄執行./configure

2)提示:configure:error: liberty library not found

下載下傳binutils-2.25,下載下傳位址:​​http://ftp.gnu.org/gnu/binutils/?C=M;O=D​​

./configure --with-sysroots
make clean
make
sudo make install      

3)提示:C compiler cannot create executables

删除/usr/local/bin/ld檔案,删除之前做個備份,然後在執行上面“ 2)“的流程

4)繼續進入到oprofile目錄執行./configure

提示:configure:error:liberty library not found

該庫也是在binutils中,在libiberty下,由于libiberty的configure沒有提供--enable-shared選項,是以需要我們自己制作so檔案,編輯Makefile,加上-fPIC編譯選項,然後利用make gcc生成so:

cd libiberty //進入該目錄
./configure  //完成之後會有個Makefile檔案産生
vi Makefile  //編輯該檔案,找到并修改該行為: CFLAGS = -g -O2 -fPPIC 儲存
make clean
make
gcc -shared *.o -o libiberty.so  //生成.so檔案,把該檔案拷到/usr/lib中
sudo cp libiberty.so /usr/lib/libiberty.so      

最後還需要bfd的動态連結庫,也是在binutils中,在bfd中,由于自帶的configure可以加入--enable-shared,是以可以利用該參數自動生成.so檔案到/usr/lib中

cd bfd
./configure --enable-shared
make clean
make
sudo make install      

其實最後生成的libbfd-2.25在/usr/local/lib目錄下,需要通過export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib指定libbfd-2.25庫的位置,友善oprofile的一些應用程式能夠找到動态連結庫。

最後回到oprofile目錄中再安裝一遍:

./configure
make clean
make
sudo make install      

轉載的幾個網址:

繼續閱讀