2016-03-03 54 views
1

我有一個C++二進制文件,我試圖衡量它是最壞的情況下的性能。 我 的/ usr/bin/time會-v <命令>非常高Elpased(掛鐘)時間和低系統時間在Linux中的含義

,並導致執行它是作爲

User time (seconds): 161.07 
System time (seconds): 16.64 
Percent of CPU this job got: 7% 
Elapsed (wall clock) time (h:mm:ss or m:ss): 39:44.46 
Average shared text size (kbytes): 0 
Average unshared data size (kbytes): 0 
Average stack size (kbytes): 0 
Average total size (kbytes): 0 
Maximum resident set size (kbytes): 19889808 
Average resident set size (kbytes): 0 
Major (requiring I/O) page faults: 0 
Minor (reclaiming a frame) page faults: 1272786 
Voluntary context switches: 233597 
Involuntary context switches: 138 
Swaps: 0 
File system inputs: 0 
File system outputs: 0 
Socket messages sent: 0 
Socket messages received: 0 
Signals delivered: 0 
Page size (bytes): 4096 
Exit status: 0 

我該如何解讀這樣的結果,是什麼原因造成這個應用程序藉此多少時間?

沒有等待用戶輸入,它基本上處理大型文本文件和數據庫。

我正在從Linux(OS)角度來看它。它是否造成了這種情況太多的上下文切換(Linux中的循環調度)?

+1

這顯然是在等待什麼。最大駐地設置19GB?一百萬頁的錯誤?每秒超過500個。雖然沒有使用磁盤或其他任何東西,但看起來過多。 –

回答

0

你可以做的最好的事情就是用gprof,gperftools,callgrind(valgrind的一部分)或者(我認爲最好的)Intel VTune這樣的探查器來運行它。他們可以告訴你代碼背後是什麼。而且你最好有調試符號(!=而不是編譯而不優化)以獲得清晰的圖片。否則,您可以對引擎蓋下的內容進行「最佳猜測」......

正如我所說,我偏向於VTune,因爲它速度很快,並且顯示了很多有用的信息。看看這裏的一個例子:

Vtune example

相關問題