17.10. Timing
Often users want to collect timing information about their programs. For
example, a user may want to measure whether a change to a program improves
its performance. The time
command is one way to collect timing information
about a process.
It takes a command line argument that is the executable command
line of the program or command to time, and it outputs timing information of
the execution of the program or command. Here is an example of timing a run of
the program executable gol
that takes two command line arguments
(oscillator_500_500.txt
and 0
):
$ time ./gol oscillator_500_500.txt 0 real 0m3.814s user 0m3.725s sys 0m0.016s
The timing output is given as three different time values: real
is the total
execution time, sometimes referred to as wall time because it corresponds to the
time from start to completion as if one was measuring runtime with a clock;
user
is the portion of total time that the process spent executing in
user-mode; and sys
is the portion of time that the process spent executing is system-mode (see
Chapter 13: The Operating System
for more information about user and system mode).
Note that the user
time plus the sys
time do not add up to real
time.
This is because during part of a processes total execution time it is blocked
waiting for certain events like I/O or waiting
for its turn to be scheduled by the OS to run on a CPU core. When a process
is blocked, it does not accumulate user
or sys
time, but it does accumulate
real
time.
In this example, the timed gol
process spends most of its time running
on a CPU core (its user + sys
time is almost all of its real
time).
For applications that do a lot of I/O, their user + sys
time may be
much less than their real
time.
Often, the -p
option is used with the time
command. It displays the
timing output in a format that is compliant with a POSIX standard, so that
every system displays the timing results in the same format when
time
is run with -p
. This is particularly helpful for writing
programs that do post-processing time
output (e.g., computing the
average over a set of timed program runs) that will work identically
across systems.
17.10.1. References
For more information see:
-
The man page for
time
:man 1 time
-
most used Unix commands from cheat-sheets.org
-
Bash Reference Manual from gnu.org.