【发布时间】:2011-09-16 02:35:45
【问题描述】:
我知道time 命令的输出在user 部分下显示的时间比real 部分多处理器情况下的时间长,但最近,当我看到real 远大于 user + sys。
$ time ./test.o
real 0m5.576s
user 0m1.270s
sys 0m0.540s
谁能解释为什么会出现这种行为?
【问题讨论】:
我知道time 命令的输出在user 部分下显示的时间比real 部分多处理器情况下的时间长,但最近,当我看到real 远大于 user + sys。
$ time ./test.o
real 0m5.576s
user 0m1.270s
sys 0m0.540s
谁能解释为什么会出现这种行为?
【问题讨论】:
至少有两种可能:
【讨论】:
“用户”或“系统”都不会计算您的进程睡眠(例如等待 I/O)所花费的时间,但“实际”时间仍然过去了。
试试:
time cat
...然后等待 10 秒并按 ctrl-D。
【讨论】:
这是正常行为。
“真实”是挂钟时间。在您的示例中,运行 './test.o' 需要 5.576 秒
'user' 是用户 CPU 时间,或(大致)用户空间进程使用的 CPU 时间。这实际上是您的 CPU 实际执行“./test.o”所花费的时间。 1.270 秒。
最后,'sys' 是系统 CPU 时间,或(大致)内核使用的 CPU 时间。 0.540 秒。
如果您添加 sys + 用户,您将获得 CPU 必须花费在执行程序上的时间。
real - (user + sys) 是不运行你的程序所花费的时间。在调用和终止之间花费了 3.766 秒没有运行您的程序 - 可能等待 CPU 完成运行其他程序、等待磁盘 I/O 等。
【讨论】: