> > 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

