2010-09-10 61 views
2

我一直在尋找一個Linux採樣分析器,並且callgrind已經接近顯示有用的結果。但是,開銷估計爲20--100x slower than normal。此外,我只對每個功能花費的時間感興趣(特別強調阻止諸如read()write()之類的調用,其他任何分析器都不會忠實地顯示)。使用callgrind作爲採樣分析器?

  1. 有沒有辦法關閉多餘的選項,以便只記錄最少的數據用於生成各種調用堆棧的時間?
  2. callgrind的cachegrind遺產是否意味着關於緩存分析等過多的東西正在完成?
  3. 我認爲callgrind像調試器一樣運行。這是否可以調整以便間隔抽樣過程,而不是每一條指令?

回答

0

您是否試過gprof?它沒有像Valgrind那樣有很大的開銷。

+2

不幸的是,gprof不會進行採樣,它僅計數儀表功能的_CPU_時間。 (如果你知道的更好,請隨時糾正我,但這是我的理解)。 – 2010-09-10 07:30:40

+0

http://sourceware.org/binutils/docs/gprof/Implementation.html#Implementation「性能分析還涉及在程序運行時觀察程序,並且保持程序計數器偶爾出現的位置的直方圖。「 - 所以gprof的直方圖實際上是一個pc抽樣配置文件 – osgx 2011-05-11 15:41:59

+0

http://sourceware.org/binutils/docs/gprof/Flat-Profile.html#Flat-Profile-平面配置文件主要基於採樣。gprof -p ',前兩列 – osgx 2011-05-12 14:50:52

1

3)Callgrind像動態翻譯器一樣工作,它用儀器代碼統計原始代碼。爲代碼中的每條內存訪問指令(用於緩存模擬)完成檢測,並且(我建議)爲每個類似jmp的指令跟蹤exec。每個基本塊的數量。

我有一個小的採樣分析器,它就像調試器一樣工作;它會在應用程序中注入一個setitimer()性能分析計數器,然後它將攔截所有SIGALRM並打印當前的值$eip

以前有一些採樣分析器與setitimer方法,也有類似的東西profil()。這由glibc/gmon/gmon.cgprof -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更快地工作。

+0

這裏是激活gmon http://stackoverflow.com/questions/2279754/profiling-a-c-or-c-based-application-that-never-exits/2280519#2280519 – osgx 2011-05-11 15:41:18

0

嘗試使用RotateRight的Zoom。它具有「線程時間」配置,可以對單個進程中的所有線程進行採樣,而不管它們是否正在運行或被阻止。

+0

是的,但399美元。當然,這似乎是我可以使用的最好的產品,但不適合業餘愛好節目。 – 2012-09-06 06:44:44