¿Qué son específicamente time-clock-time, user-cpu-time y system-cpu-time en UNIX?

144

Puedo adivinar en función de los nombres, pero ¿qué son específicamente time-clock-time, user-cpu-time y system-cpu-time en UNIX?

¿Es el tiempo de la CPU del usuario la cantidad de tiempo dedicado a ejecutar el código de usuario, mientras que el tiempo de la CPU del kernel es la cantidad de tiempo dedicado al núcleo debido a la necesidad de operaciones privilegiadas (como IO en el disco)?

¿En qué unidad de tiempo se encuentra esta medida?

¿Y es realmente el tiempo del reloj de pared la cantidad de segundos que el proceso ha pasado en la CPU o el nombre es engañoso?

John Humphreys - w00te
fuente
Posible duplicado de ¿Qué significan 'real', 'usuario' y 'sys' en la salida del tiempo (1)?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respuestas:

143

El tiempo del reloj de pared es el tiempo que un reloj en la pared (o un cronómetro en la mano) mediría como si hubiera transcurrido entre el inicio del proceso y "ahora".

El tiempo de la CPU del usuario y el tiempo de la CPU del sistema son más o menos como usted dijo: la cantidad de tiempo dedicado al código del usuario y la cantidad de tiempo dedicado al código del núcleo.

Las unidades son segundos (y subsegundos, que pueden ser microsegundos o nanosegundos).

El tiempo del reloj de pared no es el número de segundos que el proceso ha pasado en la CPU; es el tiempo transcurrido, incluido el tiempo dedicado a esperar su turno en la CPU (mientras se ejecutan otros procesos).

Jonathan Leffler
fuente
16
Entonces, ¿esto significa que el tiempo del reloj de pared siempre será mayor que el tiempo de la CPU?
Pacerier
36
@Pacerier: en una máquina de un solo núcleo, sí, pero las máquinas de varios núcleos y los programas de subprocesos múltiples pueden usar más de 1 segundo de CPU por segundo transcurrido.
Jonathan Leffler
@ JonathanLeffler gracias por la respuesta, quería obtener el número de nanosegundos transcurridos, pero calcular el tiempo de CPU utilizando la fórmula CPUtime = #clock_cycles / clock_rateno puede ser lo mismo que calcular el tiempo transcurrido. ¿Sabes si puedo obtener el tiempo transcurrido del tiempo de CPU?
Bionix1441
2
@ Bionix1441: No puede derivar el tiempo transcurrido del tiempo de CPU por varias razones. Primero, un proceso puede estar inactivo, sin consumir tiempo de CPU, por períodos arbitrarios (por ejemplo, un proceso de demonio esperando que un cliente se conecte a él a través de la red), por lo que puede no hacer nada durante días en un tiempo de tiempo transcurrido . En segundo lugar, si se está ejecutando, puede tener múltiples subprocesos, y si tiene, por ejemplo, 4 subprocesos y hay 4 o más núcleos en el sistema, podría acumular 4 segundos de CPU de esfuerzo gastado por segundo de tiempo transcurrido. Estos muestran que no hay una fórmula simple (o incluso compleja) que pueda usar.
Jonathan Leffler
1
@Catbuilts: ¿Sabe que el núcleo de Unix se ejecuta por separado de los programas de usuario? Cuando su programa realiza una llamada al sistema (por ejemplo, read()o getpid()), el núcleo ejecuta el código en nombre de su programa. El kernel también maneja la multitarea preventiva para que otros programas tengan su turno de ejecución, y realiza un trabajo de limpieza general para mantener el sistema funcionando sin problemas. Este código se ejecuta en 'código de kernel' (también en 'modo de kernel'). Esto es distinto del código que escribió y las bibliotecas de usuario (incluida la biblioteca del sistema C) que ejecuta.
Jonathan Leffler
36

Tiempo de reloj de pared: tiempo transcurrido de acuerdo con el reloj interno de la computadora, que debe coincidir con el tiempo en el mundo exterior. Esto no tiene nada que ver con el uso de la CPU; Se da como referencia.

Tiempo de CPU del usuario y tiempo del sistema: exactamente lo que piensas. Las llamadas al sistema, que incluyen I / O llama tales como read, write, etc., están ejecutado por salto en código del núcleo y la ejecución de eso.

Si el tiempo de reloj de pared <tiempo de CPU, entonces está ejecutando un programa en paralelo. Si el tiempo de reloj de pared> tiempo de CPU, está esperando el disco, la red u otros dispositivos.

Todos se miden en segundos, según el SI .

Fred Foo
fuente
7

El tiempo del reloj de pared es exactamente lo que dice, el tiempo transcurrido medido por el reloj de su pared (o reloj de pulsera)

El tiempo de CPU del usuario es el tiempo que se pasa en la "tierra del usuario", es decir, el tiempo dedicado a procesos que no son del núcleo

El tiempo de CPU del sistema es el tiempo que se pasa en el núcleo, generalmente el tiempo dedicado a atender las llamadas del sistema.

ennuikiller
fuente
7
time [WHAT-EVER-COMMAND]

real    7m2.444s
user    76m14.607s
sys 2m29.432s

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24

real o reloj de pared

reales 7m2.444s

En un sistema con procesador de 24 núcleos, este cmd / proceso tardó más de 7 minutos en completarse. Eso utilizando el paralelismo más posible con todos los núcleos dados.

usuario

usuario 76m14.607s

El cmd / proceso ha utilizado esta cantidad de tiempo de CPU. En otras palabras, en una máquina con CPU de un solo núcleo, el real y el usuario serán casi iguales, por lo que el mismo comando tardará ~ 76 minutos en completarse.

sys

sys 2m29.432s

Este es el tiempo que tarda el núcleo en ejecutar todas las operaciones básicas / de nivel del sistema para ejecutar este cmd, incluida la conmutación de contexto, la asignación de recursos, etc.

Nota: El ejemplo supone que su comando utiliza paralelismo / hilos.

Página de manual detallada: https://linux.die.net/man/1/time

Sankarganesh Eswaran
fuente
Dadas las veces que publicaste, ¿no es aproximadamente la mitad del paralelismo realizado? (Solo estoy haciendo (user + sys) / realpara representar eso.
DTC