Linux中经过的(挂钟)时间非常长而系统时间很短的含义

问题描述 投票:1回答:1

我有一个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的轮询调度)的原因?

c++ linux performance-testing
1个回答
0
投票

您可以做的最好的事情是使用gprof,gperftools,callgrind(valgrind的一部分)或(我认为最好的)Intel VTune这样的分析器运行它。他们可以向您展示代码背后发生了什么。而且,您最好使用调试符号(!=而不是不进行优化而进行编译)以获得有关此内容的清晰图片。否则,您只能对幕后进行的事情有“最佳猜测” ...

正如我所说,我偏爱VTune,因为它运行速度快,并且显示了很多有用的信息。看一个例子:

Vtune example

© www.soinside.com 2019 - 2024. All rights reserved.