2012-01-27 25 views
8

我正在使用callgrind來剖析一個linux多線程應用程序,並且大多數情況下它工作得很好。我開始關閉儀器(--instr-atstart = no),然後一旦安裝完成,我打開callgrind_control -i on。但是,當我更改某些配置以嘗試對應用程序的不同部分進行配置時,即使在打開儀器之前,它的運行速度也非常慢。基本上,正常運行需要幾秒鐘的部分代碼需要一個小時的時間,而callgrind(關閉儀器)需要一個多小時。任何想法爲什麼這可能是以及如何去調試/解決緩慢?callgrind慢關閉儀器

+0

什麼是「某些配置嘗試分析應用的不同部分」? – jpalecek 2012-02-09 16:35:17

+0

user779,你可以使用valgrind的[「nul」工具](http://valgrind.org/docs/manual/nl-manual.html)和[Valgrind的Lackey工具](http: //valgrind.org/docs/manual/lk-manual.html)? – osgx 2012-02-09 16:42:24

+0

@jpalecek:我的意思是說,用戶可以通過配置啓用/禁用功能,並啓用一些功能(它將遞歸鑽取以獲取有關一組對象的更多詳細信息,並導致更多計算),它會開始爬行。 – naumcho 2012-02-09 16:55:49

回答

10

callgrind是一個基於valgrind構建的工具。 Valgrind基本上是一個動態二進制翻譯器(libVEX,是valgrind的一部分)。它將解碼每條指令並將它們編譯成同一CPU的一些指令流。

據我所知,沒有辦法在已經運行的進程中啓用這個翻譯(在valgrind實現中),所以動態翻譯在程序開始的時候都是可用的。它也不能關閉。

通過添加一些檢測代碼,工具建立在valgrind上。 「Nul」工具(nulgrind)是不增加儀器的工具。但是每個工具都使用valgrind,並且動態翻譯一直處於活動狀態。在callgrind中打開和關閉只是打開和關閉其他儀器。

由Valgrind實施的虛擬CPU是有限的,存在(不完整的)限制列表http://valgrind.org/docs/manual/manual-core.html#manual-core.limits大多數限制都是關於浮點操作,並且它們可能是錯誤的。

更改是否與浮點操作相關聯?或與其他上市限制?

另外你應該知道,「Valgrind將執行序列化,以便在一個時間只有一個線程正在運行」。 (來自同一頁面manual-core.html)

+0

PS:nulgrind(libVEX基本的工具)開銷很大。 Nulgrind估計比本地代碼慢2-10倍(例如http://os.inf.tu-dresden.de/papers_ps/vee08-pohle.pdf); vlagrind上的任何其他工具比nulgrind慢。 Callgrind關閉模式將以nulgrind的速度運行; callgrind打開將會運行幾次。 – osgx 2015-05-24 16:14:42