¿Cómo son iguales el tiempo de CPU y el uso de CPU?

23

En la página de Wikipedia para el tiempo de CPU , dice

El tiempo de CPU se mide en tics de reloj o segundos. 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.

No entiendo cómo una duración de tiempo puede ser reemplazada por un porcentaje. Cuando miro top, ¿no %CPUme dice que MATLABestá usando 2.17 de mis núcleos?

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
18118 jasl      20   0 9248400 261528  78676 S 217.2  0.1   8:14.75 MATLAB      

Pregunta

Para comprender mejor qué es el uso de la CPU, ¿cómo calculo yo mismo el uso de la CPU?

Jasmine Lognnes
fuente
Presione '1' mientras tiene 'superior' abierto para obtener más granularidad por núcleo.
Peter
Ese es el número uno ( 1).
Michael Hampton
Deje que Linux le muestre qué tan ocupado está cada procesador con esta solicitud de línea de comandos. mpstat -P ALL 5 3 ingrese para el estado de multiprocesador 5 segundos 3 intervalos. Divida el% de CPU reportado por su número de núcleos para obtener el promedio de CPU Ocupado%. iostat -xm 5 3 enter le dirá cuántos núcleos / CPU tiene disponibles.
Wilson Hauck

Respuestas:

32

El tiempo de CPU se asigna en segmentos de tiempo discretos (ticks). Para un cierto número de segmentos de tiempo, la CPU está ocupada, otras veces no lo está (lo que está representado por el proceso inactivo). En la imagen a continuación, la CPU está ocupada por 6 de los 10 segmentos de CPU. 6/10 = .60 = 60% del tiempo ocupado (y, por lo tanto, habría un 40% de tiempo inactivo).

ingrese la descripción de la imagen aquí

Un porcentaje se define como "un número o tasa que se expresa como un cierto número de partes de algo dividido en 100 partes". Entonces, en este caso, esas partes son segmentos de tiempo discretos y algo son segmentos de tiempo ocupado frente a segmentos de tiempo inactivo: la tasa de segmentos de tiempo ocupado a inactivo.

Dado que las CPU funcionan en GHz (miles de millones de ciclos por segundo). El sistema operativo corta ese tiempo en unidades más pequeñas llamadas garrapatas. No son realmente 1/10 de segundo. La tasa de tics en Windows es de 10 millones de tics en un segundo y en Linux es sysconf(_SC_CLK_TCK)(generalmente 100 tics por segundo).

En algo así top, los ciclos de CPU ocupados se dividen en porcentajes de cosas como el tiempo del usuario y el tiempo del sistema. En topLinux y perfmon en Windows, a menudo obtendrá una pantalla que supera el 100%, eso es porque el total es 100% * the_number_of_cpu_cores.

En un sistema operativo, es tarea del planificador asignar estos preciosos sectores a los procesos, por lo que el planificador es el que informa esto.

Kyle Brandt
fuente
1
Los segmentos de tiempo no se miden en billonésimas de segundo. No son tan cortos. Es más probable que estén entre 0.1 ms y 10 ms. La resolución de los valores de tiempo en las API no es la misma que la tasa de interrupciones del temporizador. Algunas llamadas API en Linux tienen tiempos especificados en nanosegundos, pero no querrá interrupciones del temporizador con tanta frecuencia. Si tuviera un millón de interrupciones por segundo, pasaría todo el tiempo de la CPU en cambios de contexto.
kasperd
2
¿Te refieres a 1000 garrapatas? Todos mis sistemas Linux son 1000 ticks (EL5 y EL6) o 1000 ticks + tickless (EL7). ¿O quieres decir algo más?
Michael Hampton
1
La página del manual dice: "La variable correspondiente está obsoleta". No creo que se pueda confiar en eso. Verifiqué la configuración del kernel en /boot/config-2.6.32- sea lo que sea este mes ...
Michael Hampton
1
Ajá, no, no se informa lo mismo. CLK_TCK es un valor escalado explícitamente para el espacio de usuario, y aparentemente siempre es 100 independientemente de la cantidad de ticks que el núcleo realmente use. Encontré algunas buenas explicaciones sobre SO ( 1 , 2 )
Michael Hampton
2
También creo que los "ticks" de Windows a los que se refiere esa llamada API no son los mismos que la frecuencia de interrupción del temporizador de Windows , y por lo tanto no son realmente comparables.
Michael Hampton
15

El tiempo de CPU es el tiempo que el proceso usa la CPU; la conversión a un porcentaje se realiza dividiendo por la cantidad de tiempo real que ha pasado.

Entonces, si tengo un proceso que usa 1 segundo de tiempo de CPU durante un período de 2 segundos, está usando el 50% de una CPU.

En el caso de su proceso MATLAB, el 217% indica que ha usado 2.17 segundos de tiempo de CPU por segundo durante el último intervalo de muestra, efectivamente, monopolizando 2 núcleos de CPU y tomando algo de un tercio.

Shane Madden
fuente
55
O podría estar usando el 25% de 8 CPU y parte de un noveno.
Bob Jarvis - Restablece a Mónica el