零、PAPI簡介
PAPI (Performance Application Programming Interface),它是一套API,通過它可以訪問CPU效能計數器,效能效能計數器的資料,
例如 L1/L2 Cache,CPU Cycle,CPU Instruction,TLB等.
PAPI官網是: http://icl.cs.utk.edu/papi/
一、安裝前提
確保核心中安裝了 perfctr 模組並且是動態載入方式(modprobe perfctr),並且支援APIC;
確保 perfctr 使用正常,所有測試執行個體能夠正常運行,例如 perfex -i;
“perfctr 模組安裝”請查看“Linux核心編譯以及perfctr模組安裝”
http://blog.csdn.net/zklth/archive/2010/08/21/5828629.aspx
二、安裝步驟
摘自papi目錄下的INSTALL.txt檔案, 以下是 papi-3.6.0 的安裝步驟,其它版本的安裝步驟也是如此。
General Installation
1. % ./configure
% make
2. Check for errors.
a) Run a simple test case: (This will run ctests/zero)
% make test 測試,將會出現PASSED, FAILED, or SKIPPED三種結果,正常情況下應該是PASSED
If you get good counts, you can optionally run all the test programs
with the included test harness. This will run the tests in quiet mode,
which will print PASSED, FAILED, or SKIPPED. Tests are SKIPPED if the
functionality being tested is not supported by that platform.
% make fulltest (This will run ./run_tests.sh) 所有的測試
To run the tests in verbose mode:
% ./run_tests.sh -v
3. Create a PAPI binary distribution or install PAPI directly.
a) To install PAPI libraries and header files from the build tree:
% make install 將會安裝相關檔案到/usr/local下,bin,include,lib
papi預設是安裝在 /usr/local 下的,
papi可執行命令安裝在bin下,似乎papi-3.6.0下沒有papi_version命令,3.7.0有
papi的標頭檔放在include下,包括papiStdEventDefs.h、papi.h
papi的庫檔案放在lib下,包括靜態庫libpapi.a,動態庫libpapi.so.3.6.0
[root@hdfs05 lib]# ll *papi*
-rw-r--r-- 1 root root 1842928 08-25 18:02 libpapi.a
lrwxrwxrwx 1 root root 16 08-25 18:02 libpapi.so -> libpapi.so.3.6.0
lrwxrwxrwx 1 root root 16 08-25 18:02 libpapi.so.3 -> libpapi.so.3.6.0
-rwxrwxr-x 1 zkl zkl 631936 08-25 18:02 libpapi.so.3.6.0
還有share、man目錄下也安裝了一些東西
b) To install PAPI manual pages from the build tree:
% make install-man
c) To install PAPI test programs from the build tree:
% make install-tests
d) To install all of the above in one step from the build tree:
% make install-all
4. 由於papi的相關庫安裝在 /usr/local/lib 下,而我們編譯器連結動態或者靜態庫時,預設不會再 /usr/local/lib 下尋找相關庫的,所以為了在編譯器時可以自動連結/usr/local/lib下的papi相關庫(例如: gcc ** -lpapi),我們做如下操作:
將 /usr/local/lib 加入檔案 /etc/ld.so.conf 的最後一行,然後執行 ldconfig 命令。
5. 編寫一個 C 程式,調用 papi 相關函數,使用命令 gcc *.c -lpapi 命令編譯,查看是否能夠正常使用 PAPI .