Jump to content

CPU time

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 66.154.107.203 (talk) at 12:24, 21 April 2011 (→‎Unix commands for CPU time). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

CPU Time on Single CPU Multi Tasking System

CPU time (or CPU usage, process time) is the amount of time for which a central processing unit (CPU) was used for processing instructions of a computer program, as opposed to, for example, waiting for input/output (I/O) operations. The CPU time is often measured in clock ticks or as a percentage of the CPU's capacity. It is used as a point of comparison for CPU workload of a program.

In contrast, elapsed real time (or simply real time, or wall clock time) is the time taken from the start of a computer program until the end as measured by an ordinary clock. Elapsed real time includes I/O time and all other types of waits incurred by the program.

OGIRIDIRIONYE.CHINONSO.VICTOR==Unix commands for CPU time==

top's display of the CPU time of various processes on a Unix-like (GNU/Linux) system

Unix command top

The Unix command top provides CPU time, priority, elapsed real time, and other information for a processes and updates it in real time.

Unix command time

Unix command time prints CPU time and elapsed real time for an Unix process.

% time nextPrimeNumber 30000007
Prime number greater than 30000007 is 30000023
0.327u 0.010s 0:01.15 28.6%     0+0k 0+0io 0pf+0w

This process took a total of 0.337 seconds of CPU time, out of which 0.327 seconds was spent in user space, and the final 0.010 seconds in kernel mode on behalf of the process. Elapsed real time was 1.15 seconds.

The following is the source code of the application nextPrimeNumber which was used in above example.

#include <stdio.h>
#include <stdlib.h>

int isPrimeNumber(unsigned long int n){
  int i;
  for(i=2; i<=(n>>1); i++)
    if(n%i==0) return 0;
  return 1;
}

int main(int argc, char *argv[]){
  unsigned long int argument = strtoul(argv[1], NULL, 10), n = argument;
  while(!isPrimeNumber(++n));

  printf("Prime number greater than %d is %d\n", argument, n);
  return 0;
}

POSIX functions clock() and getrusage()

POSIX functions clock() and getrusage() can be used to get CPU time consumed by any process in a POSIX environment. If the process is multithreaded, the CPU time consumed by all individual threads of the process are added.

Total CPU time

On multi-processor machines, a computer program can use two or more CPUs for processing using parallel processing scheduling. In such situations, the notion of total CPU time is used, which is the sum of CPU time consumed by all of the CPUs utilized by the computer program.

CPU time and elapsed real time

Elapsed real time is always same or more than CPU time for computer program which use only one CPU for processing. If no wait is involved for I/O or other resources, elapsed real time and CPU time are very similar.

CPU time and elapsed real time for parallel processing technology

If a program uses parallel processing, total CPU time for that program would be more than its elapsed real time. (Total CPU time)/(Number of CPUs) is used to calculate elapsed real time if work load is evenly distributed on each CPU and no wait is involved for I/O or other such external resources.

Example: A software application executed on a Hexa-core processor creates three Unix processes for fulfilling the user requirement. Each of these three processes creates two threads, enumerating a total of 6 working threads. Computation is distributed evenly on the 6 independent threads. If no wait for resources is involved, total CPU time is expected to be six times the elapsed real time.

See also

References

  • Thimmannagari, Chandra (2005-01-01). CPU Design: Answers to Frequently Asked Questions. Springer. p. 68. ISBN 0-387-23799-2.
  • GNU glibc manual: clock and times functions
  • Command time
  • Posix function clock
  • Posix function getrusage
  • Measuring the CPU load (Linux) - An article from the Real-Time Embedded blog