3)Callgrind像動態翻譯器一樣工作,它用儀器代碼統計原始代碼。爲代碼中的每條內存訪問指令(用於緩存模擬)完成檢測,並且(我建議)爲每個類似jmp的指令跟蹤exec。每個基本塊的數量。
我有一個小的採樣分析器,它就像調試器一樣工作;它會在應用程序中注入一個setitimer()
性能分析計數器,然後它將攔截所有SIGALRM並打印當前的值$eip
。
以前有一些採樣分析器與setitimer
方法,也有類似的東西profil()
。這由glibc/gmon/gmon.c
和gprof -p
(準確地說,由gcc -pg
)使用。 profil()
函數能夠通過對每個1或10毫秒的虛擬CPU時間進行採樣來對單個contonous代碼段進行配置文件。還有sprofil()
函數。
檢查也LD_PRELOAD =/lib中/ libpcprofile.so PCPROFILE_OUTPUT = output.file - 但我不知道它的工作原理,或者它是如何工作的
對於編號的問題:
2)「Callgrind是它是Cachegrind的一個擴展,它提供了Cachegrind的所有信息,以及關於callgraphs的額外信息。「 - 因此,它可以提供任何東西,在cachegrind,而且它允許用戶關閉緩存模擬:--simulate-cache=no
(它是默認值)
飛車:根據http://www.valgrind.org/docs/manual/nl-manual.html - 訥的valgrind工具手冊(又名nulgrind ),沒有額外的儀器,減速是5倍。這是因爲程序是由valgrind自己動態翻譯的。所以,沒有valgrind的工具,它可以比nulgrind更快地工作。
不幸的是,gprof不會進行採樣,它僅計數儀表功能的_CPU_時間。 (如果你知道的更好,請隨時糾正我,但這是我的理解)。 – 2010-09-10 07:30:40
http://sourceware.org/binutils/docs/gprof/Implementation.html#Implementation「性能分析還涉及在程序運行時觀察程序,並且保持程序計數器偶爾出現的位置的直方圖。「 - 所以gprof的直方圖實際上是一個pc抽樣配置文件 – osgx 2011-05-11 15:41:59
http://sourceware.org/binutils/docs/gprof/Flat-Profile.html#Flat-Profile-平面配置文件主要基於採樣。gprof -p ',前兩列 – osgx 2011-05-12 14:50:52