Timing Programs (Unix Power Tools, 3rd Edition)
26.2. Timing Programs
Two commands, time
and /bin/time, provide simple timings. Their
information is highly accurate, because no profiling overhead
distorts the program's performance. Neither program
provides any analysis on the routine or trace level. They report the
total execution time, some other global statistics, and nothing more.
You can use them on any program.
time and
/bin/time differ primarily in that
time is built into many shells, including
bash. Therefore, it cannot be used in safely
portable Bourne shell scripts or in makefiles. It also cannot be used
if you prefer the Bourne shell (sh).
/bin/time is an independent executable file and
therefore can be used in any situation. To get a simple program
timing, enter either time or
/bin/time, followed by the command you would
normally use to execute the program. For example, to time a program
named analyze (that takes two command-line
arguments, an input file and an output file), enter the following
command:
% time analyze inputdata outputfile
9.0u 6.7s 0:30 18% 23+24k 285+148io 625pf+0w
This result (in the default C shell
format) indicates that the program spent 9.0 seconds on behalf of the
user (user time), 6.7 seconds on behalf of the system (system time,
or time spent executing Unix kernel routines on the
user's behalf), and a total of 30 seconds elapsed
time. Elapsed time is the wall clock time from the moment you enter
the command until it terminates, including time spent waiting for
other users, I/O time, etc.
By definition, the elapsed time is greater than your total CPU time
and can even be several times larger. You can set programs to be
timed automatically (without typing time first) or
change the output format by setting shell variables.
The example above
shows the CPU time as a percentage of the elapsed time (18 percent).
The remaining data reports virtual memory management and I/O
statistics. The meaning varies, depending on your shell; check your
online csh manual page or article.
In this example, under SunOS 4.1.1, the other fields show the amount
of shared memory used, the amount of nonshared memory used
(k), the number of block input and output
operations (io), and the number of page faults
plus the number of swaps (pf and
w). The memory management figures are unreliable
in many implementations, so take them with a grain of salt.
/bin/time reports only the real time (elapsed
time), user time, and system time. For example:
% /bin/time analyze inputdata outputfile
60.8 real 11.4 user 4.6 sys
[If you use a shell without a built-in time
command, you can just type time.
-- JP] This reports that the program ran for
60.8 seconds before terminating, using 11.4 seconds of user time and
4.6 seconds of system time, for a total of 16 seconds of CPU time. On
Linux and some other systems, that external time
command is in /usr/bin/time and may make a more
detailed report.
There's a third timer
on some systems: timex. It can give much more
detail if your system has process accounting enabled. Check the
timex(1) manpage.
-- ML
26. System Performance and Profiling26.3. What Commands Are Running and How Long Do They Take?
Copyright © 2003 O'Reilly & Associates. All rights reserved.
Wyszukiwarka