Linux时间命令输出不一致

5

我知道time命令的输出在多处理器情况下,user部分可能会显示比real部分更长的时间,但最近,当我尝试对一个程序进行性能分析时,我发现real时间远远超过了user+sys时间。

$ time ./test.o

real    0m5.576s
user    0m1.270s
sys     0m0.540s

有人能解释一下为什么会出现这种行为吗?
3个回答

8

这是正常的行为。

"Real" 是指挂钟时间。在你的例子中,运行 './test.o' 实际上需要 5.576 秒。

'user' 是用户 CPU 时间,或者说是用户空间进程使用的 CPU 时间。这基本上是你的 CPU 实际上执行 './test.o' 的时间。1.270 秒。

最后,'sys' 是系统 CPU 时间,或者说是内核使用的 CPU 时间。0.540 秒。

如果你将 sys + user 相加,你就可以得到 CPU 执行程序所需的时间。

real - (user + sys) 就是没有运行程序的时间。3.766 秒是在调用和终止之间花费的时间,没有运行程序--可能是等待 CPU 完成其他程序的运行,等待磁盘 I/O 等。


4

当进程处于睡眠状态(例如等待I/O)时,它耗费的时间既不计入“用户”时间也不计入“系统”时间,但“真实”时间仍然流逝。

尝试:

time cat

... 然后等待10秒钟,按下ctrl-D。


1

至少有两种可能性:

  • 系统正忙于其他竞争进程
  • 程序正在休眠,或执行其他操作导致其等待,例如 i/o(等待用户输入、磁盘 i/o、网络 i/o 等)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接