[英]How to use linux perf tool for code comprehension
我對“性能”記錄調用圖的能力着迷,並試圖了解如何使用它來理解新的代碼庫。
我在調試模式下編譯了代碼,並使用以下命令運行了單元測試:
性能記錄-調用圖矮人測試
這將創建一個230兆的perf.data。 然后我寫出調用圖
性能報告--call-graph --stdio> callgraph.txt
這將創建一個50兆的文件。
理想情況下,我只希望看到屬於該項目的代碼,而不是內核代碼,系統調用,c ++標准庫,甚至是boost和任何其他第三方軟件。 目前,我看到諸如__GI ___ dl_iterate_phdr,_Unwind_Find_FDE等項目。
我喜歡flamegraph項目。 但是,這種可視化效果不利於代碼理解。 還有其他項目,文章,想法可能會有所幫助嗎?
對於大型應用程序, perf report -g
不應過於冗長地轉儲到外部文件中。 收集的perf.data
(帶有-g
)可以在沒有交互式Perf報告TUI界面的文件重定向的情況下工作。 您可以禁用調用圖報告,以查找在沒有-g
或perf report --no-children
情況下,花費最多時間進行perf record
函數。
有gprof2dot腳本( https://github.com/jrfonseca/gprof2dot )可將lagre perf報告調用圖可視化為緊湊圖片(圖)。
svg / js中還有Brendan D. Gregg的交互式FlameGraphs 。 他經常在演示文稿中指出, perf report -g
輸出顯示了許多兆字節的原始報告轉儲,以及許多A4頁面。 有perf的使用說明: http ://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html#perf:
# git clone https://github.com/brendangregg/FlameGraph # or download it from github
# cd FlameGraph
# perf record -F 99 -g -- ../command
# perf script | ./stackcollapse-perf.pl > out.perf-folded
# ./flamegraph.pl out.perf-folded > perf-kernel.svg
PS:為什么要進行概要分析過程? 嘗試選擇一些測試,然后僅對它們進行配置。 使用較低的配置文件頻率以獲取較小的perf.data文件。 還可以使用默認事件“ cycles”的后綴:u
禁用內核模式樣本: perf record -F 99 -g -e cycles:u -- ../command
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.