Significado de %CPU reportado por top

Eduardo Silva edsiper en gmail.com
Mie Feb 4 13:32:00 CLST 2009


>
> Nones, el % de cpu _no depende_ del intervalo en que mides!!
> [En realidad si, ya que top gasta cpu mientras mide, pero descartemos
> los efectos cuanticos ;)]
>
>

Todo proceso de medicion de uso de CPU depende del intervalo segun fue
calculado.

En realidad para entender mejor la medicion de % CPU es necesario explicar
un poco como se calcula:

Como medida base se utilizan los jiffies (
http://en.wikipedia.org/wiki/Jiffy_(time), cada jiffie puede definirse como
la duracion de un tick ), es decir, un proceso o el sistema en general usa X
jiffies desde su inicio y la forma de calculo depende de la cantidad
utilizada en un lapso de tiempo determinado comparado con el total.

Las variables que intervienen son las siguientes:

(se asume que 1 jiffie es igual a 1 clock tick)

a) Jiffies utilizados
b) Jiffies total (capacidad maxima)
c) Clock Ticks por segundo
d) Frecuencia de medición

Dependendiendo de "que es lo que se quiera medir" dependera de donde se
obtiene la informacion en linux, supongamos que tenemos un proceso N:

a) Jiffies utilizados: esta informacion se puede obtener de /proc/PID/stat,
campos 14 y 15:

     campo 14: utime (clock ticks en user mode)
     campo 15: stime (clock ticks en kernel mode

     jiffies_utilizados = utime + stime

b) Jiffies total = ( frecuencia_de_medicion/1000)*Clock_Ticks_por_Segundo

c) Clock Ticks por segundo: esto es configurado al momento de la compilacion
del kernel, este valor se puede obtener desde:

     C :
          #include <unistd.h>
          long sysconf(_SC_CLK_TCK);

     Python:
          import os
          os.sysconf(2)

d) Frequencia de medicion: valor en segundos, a gusto del consumidor :)

por cada intervalo se calcula "cuantos jiffies fueron utilizados" y el
porcentaje de CPU utilizado es igual a:

       ( (jiffies_utilizados*100) / jiffies_total )

Si desear calcular el %CPU utilizado por el sistema en general, sera
necesario sacar el uptime y sacar muestras bajo una frecuencia a elegir, se
recomienda minimo 1 segundo...la informacion de jiffies utilizados se saca
de /proc/stat , primera linea con idendificador 'cpu' (si tienes mas de 1
cpu o core, esta primera linea sera la sumatoria de las otras) primer y
segundo campo son lo mas relevantes, si se desea tener mas detalles en base
a idle task, iowait u otro ver mas detalles en proc(5).

espero que esto les sirva de ayuda...

saludos.
-- 
Eduardo Silva
http://edsiper.linuxchile.cl


Más información sobre la lista de distribución Linux