我正在使用callgrind來剖析一個linux多線程應用程序,並且大多數情況下它工作得很好。我開始關閉儀器(--instr-atstart = no),然後一旦安裝完成,我打開callgrind_control -i on。但是,當我更改某些配置以嘗試對應用程序的不同部分進行配置時,即使在打開儀器之前,它的運行速度也非常慢。基本上,正常運行需要幾秒鐘的部分代碼需要一個小時的時間,而callgrind(關閉儀器)需要一個多小時。任何想法爲什麼這可能是以及如何去調試/解決緩慢?callgrind慢關閉儀器
回答
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)
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
- 1. 在callgrind中停止使用儀器
- 2. 關於callgrind輸出
- 3. UIDocument緩慢關閉
- 4. 掃描儀從不關閉
- 5. Visual Studio 2012慢速關閉
- 6. 掃描儀沒有關閉錯誤
- 7. 如何關閉檢查儀表板?
- 8. 如何關閉分析儀的PostgreSQL
- 9. 解釋掃描儀關閉()方法Java
- 10. 我無法關閉掃描儀
- 11. 關閉Deployd儀表盤認證
- 12. 如何關閉SlidingMenu非常慢
- 13. 當屏幕關閉時,Android「變慢」
- 14. SQLite與.Net:Datareader關閉方法太慢
- 15. 音頻關閉時線程很慢
- 16. 關閉jquery模式對話框很慢
- 17. Webstart的應用是很慢的,當服務器關閉
- 18. MySQL的左連接很慢和MySQL服務器關閉
- 19. 如何在iPhone模擬器中關閉慢動作?
- 20. 關閉一個流服務器套接字是慢
- 21. 使用callgrind作爲採樣分析器?
- 22. callgrind相當於java?
- 23. Callgrind內聯函數
- 24. 關閉彈出窗口關閉直到瀏覽器關閉
- 25. Callgrind:如何使用Callgrind工具來評估函數速度
- 26. 關閉計時器
- 27. 關閉過濾器
- 28. 關閉瀏覽器
- 29. 關閉掃描儀或重新分配掃描儀更有效率嗎?
- 30. 爲什麼關閉掃描儀似乎破壞了新的掃描儀?
什麼是「某些配置嘗試分析應用的不同部分」? – jpalecek 2012-02-09 16:35:17
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
@jpalecek:我的意思是說,用戶可以通過配置啓用/禁用功能,並啓用一些功能(它將遞歸鑽取以獲取有關一組對象的更多詳細信息,並導致更多計算),它會開始爬行。 – naumcho 2012-02-09 16:55:49