我知道time
命令的输出在多处理器情况下,user
部分可能会显示比real
部分更长的时间,但最近,当我尝试对一个程序进行性能分析时,我发现real
时间远远超过了user
+sys
时间。
$ time ./test.o
real 0m5.576s
user 0m1.270s
sys 0m0.540s
有人能解释一下为什么会出现这种行为吗?
这是正常的行为。
"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 等。
当进程处于睡眠状态(例如等待I/O)时,它耗费的时间既不计入“用户”时间也不计入“系统”时间,但“真实”时间仍然流逝。
尝试:
time cat
... 然后等待10秒钟,按下ctrl-D。
至少有两种可能性: