susmits
susmits

Reputation: 2238

Discrepancy in Linux time command output

I am aware that the output of the time command can show greater time under the user section than the real section for multi-processor cases, but recently, I was trying to profile a program when I saw that real was substantially greater than user + sys.

$ time ./test.o

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

Can anybody explain why such a behaviour is caused?

Upvotes: 5

Views: 1418

Answers (3)

Jonathan Hall
Jonathan Hall

Reputation: 79546

That's the normal behavior.

"Real" is is the wall-clock time. In your example, it literally took 5.576 seconds to run './test.o'

'user' is the User CPU time, or (roughly) CPU time used by user-space processes. This is essentially the time your CPU spent actually executing './test.o'. 1.270 seconds.

And finally, 'sys' is System CPU time, or (roughly) CPU time used by your kernel. 0.540 seconds.

If you add sys + user, you get the amount of time your CPU had to spend executing the program.

real - (user + sys) is, then, the time spent not running your program. 3.766 seconds were spent between invocation and termination not running your program--probably waiting for the CPU to finish running other programs, waiting on disk I/O, etc.

Upvotes: 8

Nemo
Nemo

Reputation: 71525

Time your process spends sleeping (e.g., waiting for I/O) is not counted by either "user" or "system", but "real" time still elapses.

Try:

time cat

...then wait 10 seconds and hit ctrl-D.

Upvotes: 4

wallyk
wallyk

Reputation: 57774

There are at least two possibilities:

  • The system is busy with other competing processes
  • The program is sleeping a lot, or doing other operations which cause it to wait, like i/o (waiting for user input, disk i/o, network i/o, etc.)

Upvotes: 1

Related Questions