Tiempo de CPU - CPU time

Tiempo de CPU en un sistema multitarea de CPU única
  Tiempo de color de la CPU para el programa P1

El tiempo de CPU (o tiempo de proceso ) es la cantidad de tiempo durante el cual se usó una unidad central de procesamiento (CPU) para procesar las instrucciones de un programa de computadora o sistema operativo , a diferencia del tiempo transcurrido, que incluye, por ejemplo, la espera de entrada / salida (E / S) o entrar en modo de bajo consumo (inactivo). El tiempo de la CPU se mide en las garrapatas de reloj o segundo. A menudo, es útil medir el tiempo de la CPU como un porcentaje de la capacidad de la CPU, lo que se denomina uso de la CPU . El tiempo de CPU y el uso de la CPU tienen dos usos principales.

El tiempo de la CPU se utiliza para cuantificar la eficiencia empírica global de dos algoritmos funcionalmente idénticos. Por ejemplo, cualquier algoritmo de clasificación toma una lista sin clasificar y devuelve una lista ordenada, y lo hará en un número determinista de pasos basados ​​en una lista de entrada determinada. Sin embargo, una clasificación de burbujas y una clasificación de combinación tienen una complejidad de tiempo de ejecución diferente, de modo que la clasificación de combinación tiende a completarse en menos pasos. Sin ningún conocimiento del funcionamiento de cualquiera de los algoritmos, un mayor tiempo de CPU de la clasificación de burbujas muestra que es menos eficiente para datos de entrada particulares que la clasificación por fusión.

Este tipo de medición es especialmente útil cuando se comparan algoritmos similares que no son triviales en complejidad. En este caso, el tiempo de pared (duración real transcurrida) es irrelevante, la computadora puede ejecutar el programa más lento o más rápido dependiendo de variables del mundo real como la temperatura de la CPU, así como otras variables del sistema operativo, como la prioridad del proceso.

El uso de la CPU se utiliza para cuantificar cómo se comparte el procesador entre los programas informáticos. El uso elevado de CPU por parte de un solo programa puede indicar que es muy exigente en potencia de procesamiento o que puede funcionar mal; por ejemplo, ha entrado en un bucle infinito . El tiempo de CPU permite medir la potencia de procesamiento que requiere un solo programa, eliminando interferencias, como el tiempo de ejecución a la espera de una entrada o la suspensión para permitir la ejecución de otros programas.

Por el contrario, el tiempo real transcurrido (o simplemente el tiempo real, o el tiempo de reloj de pared ) es el tiempo transcurrido desde el inicio de un programa de computadora hasta el final, medido por un reloj ordinario. El tiempo real transcurrido incluye el tiempo de E / S, los retrasos en las tareas múltiples y todos los demás tipos de espera en los que incurre el programa.

Subdivisión

El tiempo de CPU o el uso de la CPU se pueden informar para cada subproceso , para cada proceso o para todo el sistema. Además, dependiendo de qué estaba haciendo exactamente la CPU, los valores informados se pueden subdividir en:

  • El tiempo de usuario es la cantidad de tiempo que la CPU estuvo ocupada ejecutando código en el espacio de usuario .
  • El tiempo del sistema es la cantidad de tiempo que la CPU estuvo ocupada ejecutando código en el espacio del kernel . Si este valor se informa para un hilo o proceso, entonces representa la cantidad de tiempo que el kernel estuvo trabajando en nombre del contexto de ejecución , por ejemplo, después de que un hilo emitió una llamada al sistema .
  • El tiempo de inactividad (solo para todo el sistema) es la cantidad de tiempo que la CPU no estuvo ocupada o, de lo contrario, la cantidad de tiempo que ejecutó el proceso de inactividad del sistema . El tiempo de inactividad mide realmente la capacidad de CPU no utilizada.
  • El tiempo de robo (solo para todo el sistema), en hardware virtualizado , es la cantidad de tiempo que el sistema operativo quería ejecutar, pero el hipervisor no le permitió hacerlo . Esto puede suceder si el hardware físico ejecuta varios sistemas operativos invitados y el hipervisor elige asignar un intervalo de tiempo de CPU a otro.

Comandos de Unix para el tiempo de la CPU

visualización superior del tiempo de CPU de varios procesos en un sistema tipo Unix ( GNU / Linux )

Comando superior de Unix

La parte superior del comando Unix proporciona tiempo de CPU, prioridad, tiempo real transcurrido y otra información para todos los procesos y la actualiza en tiempo real.

Comando de Unix tiempo

El tiempo de comando de Unix imprime el tiempo de la CPU y el tiempo real transcurrido para un proceso de Unix.

% gcc nextPrimeNumber.c -o nextPrimeNumber
% 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

Este proceso tomó un total de 0.337 segundos de tiempo de CPU, de los cuales 0.327 segundos se gastaron en el espacio del usuario y los últimos 0.010 segundos en modo kernel en nombre del proceso. El tiempo real transcurrido fue de 1,15 segundos.

El siguiente es el código fuente de la aplicación nextPrimeNumber que se usó en el ejemplo anterior.

// nextPrimeNumber.c
#include <stdio.h>
#include <stdlib.h>

int isPrimeNumber(unsigned long int n) {
    for (int 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 %lu is %lu\n", argument, n);
    return 0;
}

Funciones POSIX clock()ygetrusage()

POSIX funciona clock() y getrusage()se puede utilizar para obtener tiempo de CPU consumido por cualquier proceso en un entorno POSIX. Si el proceso es multiproceso, el tiempo de CPU es la suma de todos los subprocesos . Con Linux a partir del kernel 2.6.26, hay un parámetro RUSAGE_THREAD que conduce a estadísticas de uso de recursos solo para el hilo de llamada.

Tiempo total de CPU

En máquinas multiprocesador , un programa de computadora puede usar dos o más CPU para procesar usando la programación de procesamiento paralelo . En tales situaciones, se utiliza la noción de tiempo total de CPU , que es la suma del tiempo de CPU consumido por todas las CPU utilizadas por el programa informático.

Tiempo de CPU y tiempo real transcurrido

El tiempo real transcurrido es siempre mayor o igual que el tiempo de la CPU para los programas de computadora que usan solo una CPU para el procesamiento. Si no hay espera para E / S u otros recursos, el tiempo real transcurrido y el tiempo de CPU son muy similares.

Tiempo de CPU y tiempo real transcurrido para la tecnología de procesamiento paralelo

Si un programa usa procesamiento paralelo , el tiempo total de CPU para ese programa sería mayor que su tiempo real transcurrido. (Tiempo total de CPU) / (Número de CPU) sería el mismo que el tiempo real transcurrido si la carga de trabajo se distribuye uniformemente en cada CPU y no hay espera para E / S u otros recursos.

Ejemplo: una aplicación de software ejecutada en un procesador hexa-core crea tres procesos Unix para cumplir con los requisitos del usuario. Cada uno de estos tres procesos crea dos hilos, enumerando un total de 6 hilos de trabajo. La computación se distribuye uniformemente en los 6 subprocesos independientes. Si no hay que esperar recursos, se espera que el tiempo total de la CPU sea seis veces el tiempo real transcurrido.

Ver también

Referencias

enlaces externos