在Linux

时间:2016-03-03 07:00:42

标签: c++ linux performance-testing

我有一个C ++二进制文件,我正在尝试衡量它的最坏情况。 我执行了它 / usr / bin / time -v<命令>

结果是

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 个答案:

答案 0 :(得分:0)

你可以做的最好的事情是使用像gprof,gperftools,callgrind(valgrind的一部分)或(我认为最好的)英特尔VTune这样的分析器来运行它。他们可以向您展示代码背后的内容。而且你最好有调试符号(!=比没有优化的编译)来清楚地了解它。否则你可以做出最好的猜测"什么是引擎盖下......

正如我所说的那样,我对VTune有偏见,因为它很快并且显示了很多有用的信息。看一下这个例子:

Vtune example