[英]How to profile my C++ application on linux
我想在linux上分析我的c ++應用程序。 我想知道我的應用程序在CPU處理上花費了多少時間與IO /空閑時在塊上花費的時間。
我知道在linux上有一個配置文件工具調用valgrind。 但它打破了在每種方法上花費的時間,並沒有讓我全面了解CPU處理與閑置相比花費了多少時間? 或者有沒有辦法用valgrind做到這一點。
我可以推薦valgrind
的callgrind工具和KCacheGrind一起進行可視化。 KCacheGrind可以很容易地看到熱點的位置。
注意:自從我使用它以來已經太久了,所以我不確定你是否能夠獲得I / O等待時間。 也許與iostat或pidstat一起,您將能夠看到所有時間花在哪里。
你可能想看看Zoom ,它比oprofile 等更精致,功能更全面。 它需要花錢(199美元),但你可以獲得30天的免費評估許可證。
LTTng是用於完整系統分析的好工具。
如果你的應用程序只是運行“平坦”(即它使用CPU或等待I / O)直到它退出,並且沒有其他進程競爭,只需做time myapp
(或者可能是/usr/bin/time myapp
,它產生與內置的shell略有不同的輸出)。
這會得到類似的東西:
real 0m1.412s
user 0m1.288s
sys 0m0.056s
在這種情況下,用戶+ sys(內核)時間幾乎占所有實時,並且只有0.068s未計入...(可能是最初加載應用程序及其支持庫所花費的時間)。
但是,如果你看到:
real 0m5.732s
user 0m1.144s
sys 0m0.078s
然后你的應用程序花了4.51s不消耗CPU,並可能阻止IO。 這是我認為您正在尋找的信息。
但是,這種簡單的分析技術崩潰的地方是:
callgrind是一個非常好的工具,但我發現OProfile對我來說更“完整”。 此外,它是唯一允許您指定模塊和/或內核源的工具,以便更深入地了解您的瓶頸。 輸出應該能夠與KCacheGrind接口,但我遇到了麻煩,所以我使用了Gprof2Dot 。 您可以將調用圖導出為.png。
編輯:
OProfile查看整個系統,因此過程將只是:
[設置oprofile]
opcontrol --init
opcontorl --vmlinux=/path/to/vmlinux (or --no-vmlinux)
opcontrol --start
[在這里運行您的應用]
opcontrol --stop (or opcontrol --shutdown [man for difference]
然后開始查看結果看看opreport上的手冊頁
valgrind中的lackey和/或helgrind工具應該允許你這樣做。
google-perf-tools - 更快的替代callgrind(它可以生成與callgrind相同格式的輸出,因此您可以使用KCacheGrind)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.