Re: Significado de %CPU reportado por top
Miguel Oyarzo O. ad...@aim.cl wrote: Aldrin Martoq escribió: [...] Si tienes un programa multi-thread ocupando el 100% de 3 CPU's, entonces su % de CPU es 300%. No, Si es 1 programa MThR que usará las 3 CPUs este siempre usara el 100% de ella (no importa lo que hagas, los ciclos de CPUs no se desperdician), pero top podria repotar un 10% de uso de CPU entre refresco y refresco (tareas rapiditas de ejecutar) Esas son dos cosas completamente diferentes. Y top(1) intenta mostrar el _promedio_ del uso de las CPU en el ultimo periodo de refresco. Esto nada tiene que ver con los resultados que muestra segun periodos. -- Dr. Horst H. von Brand User #22616 counter.li.org Departamento de InformaticaFono: +56 32 2654431 Universidad Tecnica Federico Santa Maria +56 32 2654239 Casilla 110-V, Valparaiso, Chile 234 Fax: +56 32 2797513
Re: Significado de %CPU reportado por top
Eduardo Silva edsi...@gmail.com wrote: 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 ;)] Exacto. Todo proceso de medicion de uso de CPU depende del intervalo segun fue calculado. No. La manera tradicional de medir es fijarse en cada tick del reloj en que anda la CPU, y sumarle ese intervalo (jiffy) a esa tarea. Si hay dos (o mas) tareas en el mismo tick, las otras quedan sin contabilizar, claro. No se exactamente como lo hacen los tickless kernels que se usan ahora... pero me imagino que simplemente contabilizan todo el periodo (variable) a la tarea del caso. Una manera mas precisa (que algunos sistemas usan) es tener otro reloj con periodo diferente a los jiffies y ver en que anda la CPU cuando este se dispara. De esta forma se disminuyen efectos periodicos sincronizados con los jiffies. 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) Por definicion. 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: Donde se obtiene la informacion no tiene sentido, los datos listados son obtenidos por el nucleo mediante la estrategia indicada antes. -- Dr. Horst H. von Brand User #22616 counter.li.org Departamento de InformaticaFono: +56 32 2654431 Universidad Tecnica Federico Santa Maria +56 32 2654239 Casilla 110-V, Valparaiso, Chile 234 Fax: +56 32 2797513
Re: Significado de %CPU reportado por top
Alejandro Weinstein alejandro.weinst...@gmail.com wrote: 2009/2/4 Alejandro Weinstein alejandro.weinst...@gmail.com: OK. Viendo el detalle por CPU los numeros tienen mas sentido Ahora estoy confundido otra vez. La siguiente es una captura de top, en una maquina con UNA cpu: Tasks: 61 total, 2 running, 59 sleeping, 0 stopped, 0 zombie Cpu0 : 0.3%us, 0.2%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem:507380k total,87544k used, 419836k free, 5084k buffers Swap: 385520k total,0k used, 385520k free,34484k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 4370 ajw 20 0 102m 9.9m 4200 S 23.7 2.0 0:47.09 python 4341 ajw 20 0 14996 4296 2300 S 1.7 0.8 0:03.99 python 1 root 20 0 2844 1696 548 S 0.0 0.3 0:01.57 init Tengo Cpu0: 0.3%. y uno de los procesos python usando 23.7%. Como cuadran estos numeros? Significa que el proceso uso el 23.7% del 0.3%? top(1) dice, inter alia: k: %CPU -- CPU usage The taskâs share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true SMP environment, if âIrix modeâ is Off, top will operate in âSolaris modeâ where a taskâs cpu usage will be divided by the total number of CPUs. You toggle âIrix/Solarisâ modes with the âIâ interactive command. Esto indica que es el % del uso total del CPU, o sea, el 23,7% del 0,3%. -- Dr. Horst H. von Brand User #22616 counter.li.org Departamento de InformaticaFono: +56 32 2654431 Universidad Tecnica Federico Santa Maria +56 32 2654239 Casilla 110-V, Valparaiso, Chile 234 Fax: +56 32 2797513
Re: Significado de %CPU reportado por top
Aldrin Martoq amar...@dcc.uchile.cl wrote: On Thu, 2009-02-05 at 13:06 +0100, Miguel Oyarzo O. wrote: Alejandro Weinstein escribió: Ahora estoy confundido otra vez. La siguiente es una captura de top, en una maquina con UNA cpu: Tasks: 61 total, 2 running, 59 sleeping, 0 stopped, 0 zombie Cpu0 : 0.3%us, 0.2%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem:507380k total,87544k used, 419836k free, 5084k buffers Swap: 385520k total,0k used, 385520k free,34484k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 4370 ajw 20 0 102m 9.9m 4200 S 23.7 2.0 0:47.09 python 4341 ajw 20 0 14996 4296 2300 S 1.7 0.8 0:03.99 python 1 root 20 0 2844 1696 548 S 0.0 0.3 0:01.57 init Tengo Cpu0: 0.3%. y uno de los procesos python usando 23.7%. Como cuadran estos numeros? Significa que el proceso uso el 23.7% del 0.3%? No cuadran porque los contadores se sacan de _distintas partes_ y en _distintos instantes_, No. ni siquiera la linea de arriba te da 100%: 0.3%user + 0.2%sys +99.4%idle == 99.9%. Se conoce como error de redondeo... Todo es calculado separadamente (global y por proceso) y debes tomarlo de esa forma. Un ejemplo es compilar el kernel: Se calcula por proceso (tarea), y se suma para obtener el total. O algo equivalente. top - 14:25:42 up 3:26, 9 users, load average: 2.45, 2.07, 1.24 Tasks: 207 total, 4 running, 202 sleeping, 0 stopped, 1 zombie Cpu0 : 52.9%us, 15.6%sy, 0.0%ni, 0.0%id, 30.9%wa, 0.3%hi, 0.3%si, 0.0%st Mem: 2007220k total, 1821260k used, 185960k free,52756k buffers Swap: 2112536k total, 5156k used, 2107380k free, 962488k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 12729 amartoq 20 0 19024 11m 3368 R 5.3 0.6 0:00.16 cc1 12234 root 10 -10 493m 253m 244m S 2.0 12.9 3:39.70 vmware-vmx 11437 amartoq 20 0 242m 96m 26m S 1.7 4.9 1:46.67 firefox 6528 root 20 0 255m 88m 26m S 1.3 4.5 7:52.91 Xorg La CPU estuvo al 100% durante el intervalo (5 secs), pero si miras la lista de procesos no supera el 10% de cpu . En este caso es porque los programas que utilizaron CPU ya no estan corriendo; pero todo esta correcto dentro de su contexto (4 running tampoco cuadra y asi ...). No. La CPU estuvo en uso 52,9 + 15,6 = 68,5% del tiempo, las _pocas_ tareas listadas suman algo de 10% de eso (== 7%). -- Dr. Horst H. von Brand User #22616 counter.li.org Departamento de InformaticaFono: +56 32 2654431 Universidad Tecnica Federico Santa Maria +56 32 2654239 Casilla 110-V, Valparaiso, Chile 234 Fax: +56 32 2797513
Re: Significado de %CPU reportado por top
Alejandro Weinstein alejandro.weinst...@gmail.com wrote: [...] Mas alla de que los numeros cuadren o no, me interesa saber si el sistema esta muy cargado o no. Si miro el uso total de la CPU, me sale 0.3%, y parece ser que el sistema esta super holgado. Yep. Tu cuello de botella _no_ es la CPU. Puede ser esperar al usuario, esperar I/O, ... Pero si miro por proceso, aparece mi proceso usando el 30%, ... del uso de CPU total en el intervalo... lo que parece una carga mas significativa. Es significativa, claro. Minima igual. Cual es la interpretacion correcta de estos datos? -- Dr. Horst H. von Brand User #22616 counter.li.org Departamento de InformaticaFono: +56 32 2654431 Universidad Tecnica Federico Santa Maria +56 32 2654239 Casilla 110-V, Valparaiso, Chile 234 Fax: +56 32 2797513
Re: Significado de %CPU reportado por top
Aldrin Martoq amar...@dcc.uchile.cl wrote: [...] Que la freq de cpu cambie es lo unico que se me ocurre para que tengas valores tan dispares... No lo explica en lo absoluto. Da numeros torcidos solo si el nucleo no tiene presente este efecto. Y /tan/ dificil no es de manejar... [...] Al menos es la explicacion que tengo, yo tenia valores muy extran~os por ejemplo en maquinas VMware server por esta razon: el contador de ticks se iba a las pailas, un sleep 10 podia durar 60 segundos y tengo otras historias similares; claro que en la version 2 mejoraron esto considerablemente y hace tiempo que no he visto nada raro. sleep 10 (sleep(3) y afines) solo pueden asegurar que te despiertan _no antes_ de que hayan transcurrido 10s en este caso. Hmmm intenta nmon o algun profiler (systemtap?). Depende del paraque: si quieres gastar menos bateria, mejorar rendimiento... Esa es una excelente sugerencia: Definir exactamente que quieres saber, luego determinar como mejor medirlo. -- Dr. Horst H. von Brand User #22616 counter.li.org Departamento de InformaticaFono: +56 32 2654431 Universidad Tecnica Federico Santa Maria +56 32 2654239 Casilla 110-V, Valparaiso, Chile 234 Fax: +56 32 2797513
Re: Significado de %CPU reportado por top
Alejandro Weinstein alejandro.weinst...@gmail.com wrote: 1 2009/2/4 Aldrin Martoq amar...@dcc.uchile.cl: Hmmm intenta nmon o algun profiler (systemtap?). Depende del paraque: si quieres gastar menos bateria, mejorar rendimiento... En estos momentos me interesa saber si tengo que preocuparme por el rendimiento o no. Uno de los thread de mi programa esta haciendo calculos. Hay espacio para hacer estos calculos mas eficientes, pero no me interesa hacerlo a menos que sea necesario. Buena idea! Y la medicion de eso _no_ es via % CPU ni nada, sino determinar si el _sistema_ cumple con tus requerimientos (y tal vez determinar que tanta holgura hay al respecto). -- Dr. Horst H. von Brand User #22616 counter.li.org Departamento de InformaticaFono: +56 32 2654431 Universidad Tecnica Federico Santa Maria +56 32 2654239 Casilla 110-V, Valparaiso, Chile 234 Fax: +56 32 2797513
Re: Significado de %CPU reportado por top
2009/2/4 Daniel Serpell dserp...@gmail.com: El Wed, Feb 04, 2009 at 11:13:13AM -0700, Alejandro Weinstein escribio: Si quieres saber si esta muy cargado, el uso de CPU es irrelevante. Un ejemplo: si quieres saber si un estudiante tiene una carga de ramos muy grande, ¿te sirve mirar si en este minuto esta ocupado?. Claramente, en el momento que muestrees, o bien el estudiante está en clases (con un uso de casi 100% ojalá) o no (con un uso de 0%). Por más que lo desee, no puede está haciendo más del 100% en un momento determinado. Pero si miro lo que hace el estudiante durante todo el dia, con una ventana de tiempo de, por ejemplo, 5 minutos, y la mayor parte del tiempo esta ocupado, puedo concluir que su carga es alta. Lo que debes mirar, es el tamaño de la cola de cosas por hacer promediado en el tiempo... osea, el promedio de cuantas cosas por hacer tienes. Esta medición, en un sistema Unix, la entregan las columnas load average que aparecen al principio en el top, o se pueden obtener con uptime. Los números corresponden a la carga promedio de 1, 5 y 15 minutos. Si la carga promedio es mayor que el número de CPUs de tu computador, significa que estas con sobrecarga. OK. Supongamos que descubro que la carga promedio es mayor que 1 (asumiendo un CPU), como determino quien es el culpable? Mirar la lista de procesos (por un rato), y ver el que tiene un %CPU mas alto no es lo correcto? Volviendo a la analogia del estudiante, si el tipo esta muy ocupado, como determino si es porque tiene muchas clases o si es porque se la pasa pegado jugando al computador? Alejandro.
Re: Significado de %CPU reportado por top
2009/2/5 Alejandro Weinstein alejandro.weinst...@gmail.com: 2009/2/4 Aldrin Martoq amar...@dcc.uchile.cl: Hmmm intenta nmon o algun profiler (systemtap?). Depende del paraque: si quieres gastar menos bateria, mejorar rendimiento... En estos momentos me interesa saber si tengo que preocuparme por el rendimiento o no. Eso se llama prueba de estres. Uno de los thread de mi programa esta haciendo calculos. Hay espacio para hacer estos calculos mas eficientes, pero no me interesa hacerlo a menos que sea necesario. Y segun como te va con el estres, un profiler y la regla 80/20. Luego de esto, tendriamos que pichicatear mas fuerte... Quizas hay un bug en top o el kernel en la manera como estan considerando los contadores, y nadie se ha dado cuenta aun... Si puedes hacer el caso repetible, reportalo a tu distro. OK. Solo para aclarar mis conceptos: Usando una CPU, con frequencia fija, la suma de la columna %CPU debiera calzar, dentro de un margen razonable, con el uso total de la CPU. Estoy en lo correcto? Una pregunta es si siempre tienes numeros absurdos o fue la unica vez cuando mostrate aca... Lo normal es que tengas datos razonables, o hay una pifia seria en algun lado. No te puedo asegurar si lo que te dije de la freq esta 100% correcto, pero es mi interpretacion segun mi experiencia. Tambien creo que repeti como 4 veces que intentes con nmon, tendras mucha mas info que un simple top. http://www.ibm.com/developerworks/aix/library/au-analyze_aix/ Suerte, -- Aldrin Martoq http://aldrin.martoq.cl/
Re: Significado de %CPU reportado por top
2009/2/5 Aldrin Martoq amar...@dcc.uchile.cl: Una pregunta es si siempre tienes numeros absurdos o fue la unica vez cuando mostrate aca... Lo normal es que tengas datos razonables, o hay una pifia seria en algun lado. No te puedo asegurar si lo que te dije de la freq esta 100% correcto, pero es mi interpretacion segun mi experiencia. El comportamiento absurdo es consistente. Voy a ver si puedo hacerlo repetible con un script simple. Tambien creo que repeti como 4 veces que intentes con nmon, tendras mucha mas info que un simple top. Voy a probar con nmon. Alejandro.
Re: Significado de %CPU reportado por top
Hola! El Thu, Feb 05, 2009 at 08:29:59AM -0700, Alejandro Weinstein escribio: 2009/2/4 Daniel Serpell dserp...@gmail.com: El Wed, Feb 04, 2009 at 11:13:13AM -0700, Alejandro Weinstein escribio: Si quieres saber si esta muy cargado, el uso de CPU es irrelevante. Un ejemplo: si quieres saber si un estudiante tiene una carga de ramos muy grande, ¿te sirve mirar si en este minuto esta ocupado?. Claramente, en el momento que muestrees, o bien el estudiante está en clases (con un uso de casi 100% ojalá) o no (con un uso de 0%). Por más que lo desee, no puede está haciendo más del 100% en un momento determinado. Pero si miro lo que hace el estudiante durante todo el dia, con una ventana de tiempo de, por ejemplo, 5 minutos, y la mayor parte del tiempo esta ocupado, puedo concluir que su carga es alta. Porque asumes que una ventana de 5 minutos es un muestreo razonable para este caso. Tu computador, en cambio, cambia de tarea unas cientos de veces por segundo de ser necesario, por lo que no es razonable muestrear un instante específico. Lo que debes mirar, es el tamaño de la cola de cosas por hacer promediado en el tiempo... osea, el promedio de cuantas cosas por hacer tienes. Esta medición, en un sistema Unix, la entregan las columnas load average que aparecen al principio en el top, o se pueden obtener con uptime. Los números corresponden a la carga promedio de 1, 5 y 15 minutos. Si la carga promedio es mayor que el número de CPUs de tu computador, significa que estas con sobrecarga. OK. Supongamos que descubro que la carga promedio es mayor que 1 (asumiendo un CPU), como determino quien es el culpable? Mirar la lista de procesos (por un rato), y ver el que tiene un %CPU mas alto no es lo correcto? Volviendo a la analogia del estudiante, si el tipo esta muy ocupado, como determino si es porque tiene muchas clases o si es porque se la pasa pegado jugando al computador? Ninguna de las dos, no puedes definir un culpable. Si está muy ocupado es porque tiene más de una cosa que hacer todo el tiempo, si lo que tiene que hacer te interesa a ti o no no importa realmente. ¿Cuáles son los casos de uso? - Tienes un computador que debe realizar varias cosas (por ejemplo, es servidor web, de correo y base de datos) y ves que su carga es muy alta. - debes pasar algunas de las tareas a otro computador o cambiar el computador por uno más rápido. - Debes realizar una tarea en un tiempo determinado y está demorando más de lo necesario. - En este caso, la carga no es útil como medición (es úna sóla tarea), lo que necesitas medir es simplemente cuanto tiempo demora en realizar la tarea necesaria, y aumentar CPU de ser necesario. - En tu computador, te das cuenta que la carga es muy alta cuando no debería serlo. - Tienes procesos que no controlas peleando por CPU, en este caso paras todos los procesos tuyos y con TOP puedes ver que otros procesos se están ejecutando en este momento. Debido a la manera en que funciona TOP (en particular el muestreo de uso de CPU), las únicas medidas realmente confiables son de 0% y 100%, las que corresponden a un proceso durmiendo y uno ejecutándose respectivamente. Esto es así porque en un instante de muestreo (se muestrea en los momentos en que el S.O. decide cambiar de tarea en ejecución), sólo sabes que una tarea determinada ocupó la CPU por el slot de tiempo recién terminado. Y como la interacción entre las tareas es compleja, puede suceder que una tarea *nunca* termine su slot de tiempo, por lo que nunca se va a contabilizar. Versiones modernas de Linux usan distintas eurísticas en el scheduler para determinar el uso de CPU de casa tarea, y así distribuir la CPU entre las tareas de manera más eficiente. Esto produce que la medición de CPU por tarea se desvíe de la medición de uso de CPU total, pero ninguna de las dos es realmente mejor que la otra, simplemente miden cosas ligeramente distintas. Una manera de ver esto es con un programa que latere rápidamente entre usar CPU y dormir por un intervalo corto de tiempo, la medición de uso de CPU por tarea será mucho más alta que la medición global. Para muestra, ver el programa adjunto, puedes probar, por ejemplo, testtop 10 15, el primer parámetro es el tiempo que duerme en microsegundos, el segundo el número de cuentas en un loop que no hace nada. Daniel. - testtop.c - #include unistd.h #include stdlib.h int main(int argc, char **argv) { int st = atoi(argv[1]), lp = atoi(argv[2]); while(1) { int i; for(i=0;ilp;i++); usleep(st); } return 0; } --
Re: Significado de %CPU reportado por top
On Thu, 2009-02-05 at 01:59 +0100, Miguel Oyarzo O. wrote: Aldrin Martoq escribió: On Tue, 2009-02-03 at 15:41 -0700, Alejandro Weinstein wrote: Estoy un poco confundido con el significado de %CPU reportado por top. La siguiente es la definicion del manual: k: %CPU -- CPU usage The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true SMP environment, if 'Irix mode' is Off, top will operate in 'Solaris mode' where a task's cpu usage will be divided by the total number of CPUs. You toggle 'Irix/Solaris' modes with the 'I' interactive command. En castellano: El % de CPU indica el porcentaje de uso de un proceso _por CPU_. No dice eso, el parametro muestra el % de tiempo de CPU que las tareas de ese proceso han usado entre un refresco y otro. Sorry, no pretendia decir que tradujeran mal, sino explicar cual es el comportamiento. Ejemplisticamente: El Irix mode On es el default, un ejemplo aca: top - 11:58:55 up 1 day, 40 min, 2 users, load average: 0.43, 0.12, 0.04 Tasks: 62 total, 2 running, 60 sleeping, 0 stopped, 0 zombie Cpu0 : 19.1%us, 51.5%sy, 0.0%ni, 27.7%id, 1.0%wa, 0.0%hi, 0.7%si, 0.0%st Cpu1 : 12.9%us, 65.7%sy, 0.0%ni, 18.2%id, 2.6%wa, 0.0%hi, 0.7%si, 0.0%st Irix mode On PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 16313 root 20 0 566m 190m 4096 S 148 37.8 0:33.08 java Tengo 2 cpu's, en irix mode eso significa que tengo 200% de CPU. Si sumas el idle, te da 45.9% si a eso le sumas el 148% de cpu te da un 193%. El resto (7%) son otros procesos/tareas. Ahora un ejemplo en Irix mode Off (presionas 'I'): top - 12:06:14 up 1 day, 48 min, 2 users, load average: 0.77, 0.36, 0.17 Tasks: 62 total, 2 running, 60 sleeping, 0 stopped, 0 zombie Cpu(s): 28.0%us, 56.9%sy, 0.0%ni, 11.3%id, 1.2%wa, 0.2%hi, 2.5%si, 0.0%st Irix mode Off PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 16513 root 20 0 571m 188m 4112 S 85.2 37.5 0:51.27 java En modo no-Irix top reporta el % de cpu relativo al sistema global, es decir jamas sobrepasara el 100%. Si sumas el idle mas el java 11.3% + 85.2% te da 96.5%. El resto (3.5%) son otros procesos/tareas. Si tienes un programa multi-thread ocupando el 100% de 3 CPU's, entonces su % de CPU es 300%. No, Si es 1 programa MThR que usará las 3 CPUs este siempre usara el 100% de ella (no importa lo que hagas, los ciclos de CPUs no se desperdician), pero top podria repotar un 10% de uso de CPU entre refresco y refresco (tareas rapiditas de ejecutar) Si disminuyes tu tiempo de refreco, top te mostrará mayor tiempo de utilizacion entre cada refresco. 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 ;)] -- Aldrin Martoq amar...@dcc.uchile.cl http://aldrin.martoq.cl/videopodcast/ http://aldrin.martoq.cl/techblog/ signature.asc Description: This is a digitally signed message part
Re: Significado de %CPU reportado por top
2009/2/3 Aldrin Martoq amar...@dcc.uchile.cl: Y esta es una captura de top Tasks: 128 total, 2 running, 126 sleeping, 0 stopped, 0 zombie Cpu(s): 13.5%us, 1.8%sy, 0.0%ni, 84.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 2062952k total, 934044k used, 1128908k free,29032k buffers Swap: 2008084k total,0k used, 2008084k free, 335764k cached Presiona 1 y arriba te dara el detalle de cada CPU... PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 10030 ajw 20 0 67632 23m 7360 S 22 1.2 0:09.54 python Tu programa es multithread y ocupa ~ el 13% del sistema global... Presiona I y veras lo que quieres. OK. Viendo el detalle por CPU los numeros tienen mas sentido. Python y firefox suman 33%, que corresponde al uso de CPU1. Xorg y gnome-terminal suman 8. Esto es mas que el uso de CPU0. Pero puede ser un problema de muestreo tal vez, o no? Tambien agregue el campo P, que indica en que procesador esta corriendo el proceso. No calza mucho, ya que muestra a python en el CPU0, que tienen solo 3%. Se puede explicar esto por como top muestrea el sistema? Despues de todo es una foto de lo que paso el ultimo segundo, y supongo que en un segundo el proceso puede haberse ejecutado en distintos CPUs. Captura de top: Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie Cpu0 : 3.0%us, 0.0%sy, 0.0%ni, 97.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 33.3%us, 1.9%sy, 0.0%ni, 64.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 2062952k total, 922048k used, 1140904k free,59696k buffers Swap: 2008084k total,0k used, 2008084k free, 331584k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ P COMMAND 7076 ajw 20 0 69972 26m 7364 S 30 1.3 8:53.24 0 python 5360 root 20 0 292m 25m 8088 S6 1.2 3:37.27 1 Xorg 6057 ajw 20 0 247m 100m 26m S3 5.0 2:29.63 0 firefox 6050 ajw 20 0 99.5m 24m 12m S2 1.2 0:06.00 1 gnome-terminal 1 root 20 0 3056 1888 564 S0 0.1 0:01.24 1 init Alejandro.
Re: Significado de %CPU reportado por top
2009/2/3 Aldrin Martoq amar...@dcc.uchile.cl: PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 10030 ajw 20 0 67632 23m 7360 S 22 1.2 0:09.54 python Tu programa es multithread y ocupa ~ el 13% del sistema global... Presiona I y veras lo que quieres. Como supiste que el programa es multithread? Clarividencia :) ? Alejandro.
Re: Significado de %CPU reportado por top
2009/2/4 Alejandro Weinstein alejandro.weinst...@gmail.com: OK. Viendo el detalle por CPU los numeros tienen mas sentido Ahora estoy confundido otra vez. La siguiente es una captura de top, en una maquina con UNA cpu: Tasks: 61 total, 2 running, 59 sleeping, 0 stopped, 0 zombie Cpu0 : 0.3%us, 0.2%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem:507380k total,87544k used, 419836k free, 5084k buffers Swap: 385520k total,0k used, 385520k free,34484k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 4370 ajw 20 0 102m 9.9m 4200 S 23.7 2.0 0:47.09 python 4341 ajw 20 0 14996 4296 2300 S 1.7 0.8 0:03.99 python 1 root 20 0 2844 1696 548 S 0.0 0.3 0:01.57 init Tengo Cpu0: 0.3%. y uno de los procesos python usando 23.7%. Como cuadran estos numeros? Significa que el proceso uso el 23.7% del 0.3%? Alejandro.
Re: Significado de %CPU reportado por top
Alejandro Weinstein escribió: 2009/2/4 Alejandro Weinstein alejandro.weinst...@gmail.com: OK. Viendo el detalle por CPU los numeros tienen mas sentido Ahora estoy confundido otra vez. La siguiente es una captura de top, en una maquina con UNA cpu: Tasks: 61 total, 2 running, 59 sleeping, 0 stopped, 0 zombie Cpu0 : 0.3%us, 0.2%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem:507380k total,87544k used, 419836k free, 5084k buffers Swap: 385520k total,0k used, 385520k free,34484k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 4370 ajw 20 0 102m 9.9m 4200 S 23.7 2.0 0:47.09 python 4341 ajw 20 0 14996 4296 2300 S 1.7 0.8 0:03.99 python 1 root 20 0 2844 1696 548 S 0.0 0.3 0:01.57 init Tengo Cpu0: 0.3%. y uno de los procesos python usando 23.7%. Como cuadran estos numeros? Significa que el proceso uso el 23.7% del 0.3%? 0.3% es el 30% de ocupacion de la CPU sumando todos los procesos durante ese refresco de pantalla. 23.7% representa el tiempo de uso de esa tarea en paticular. Atte Miguel Oyarzo O. Austro Internet S.A. Punta Arenas
Re: Significado de %CPU reportado por top
On Thu, Feb 5, 2009 at 5:06 AM, Miguel Oyarzo O. ad...@aim.cl wrote: Alejandro Weinstein escribió: 2009/2/4 Alejandro Weinstein alejandro.weinst...@gmail.com: OK. Viendo el detalle por CPU los numeros tienen mas sentido Ahora estoy confundido otra vez. La siguiente es una captura de top, en una maquina con UNA cpu: Tasks: 61 total, 2 running, 59 sleeping, 0 stopped, 0 zombie Cpu0 : 0.3%us, 0.2%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem:507380k total,87544k used, 419836k free, 5084k buffers Swap: 385520k total,0k used, 385520k free,34484k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 4370 ajw 20 0 102m 9.9m 4200 S 23.7 2.0 0:47.09 python 4341 ajw 20 0 14996 4296 2300 S 1.7 0.8 0:03.99 python 1 root 20 0 2844 1696 548 S 0.0 0.3 0:01.57 init Tengo Cpu0: 0.3%. y uno de los procesos python usando 23.7%. Como cuadran estos numeros? Significa que el proceso uso el 23.7% del 0.3%? 0.3% es el 30% de ocupacion de la CPU sumando todos los procesos durante ese refresco de pantalla. De donde sale el 30%?
Re: Significado de %CPU reportado por top
On Thu, 2009-02-05 at 13:06 +0100, Miguel Oyarzo O. wrote: Alejandro Weinstein escribió: Ahora estoy confundido otra vez. La siguiente es una captura de top, en una maquina con UNA cpu: Tasks: 61 total, 2 running, 59 sleeping, 0 stopped, 0 zombie Cpu0 : 0.3%us, 0.2%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem:507380k total,87544k used, 419836k free, 5084k buffers Swap: 385520k total,0k used, 385520k free,34484k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 4370 ajw 20 0 102m 9.9m 4200 S 23.7 2.0 0:47.09 python 4341 ajw 20 0 14996 4296 2300 S 1.7 0.8 0:03.99 python 1 root 20 0 2844 1696 548 S 0.0 0.3 0:01.57 init Tengo Cpu0: 0.3%. y uno de los procesos python usando 23.7%. Como cuadran estos numeros? Significa que el proceso uso el 23.7% del 0.3%? No cuadran porque los contadores se sacan de _distintas partes_ y en _distintos instantes_, ni siquiera la linea de arriba te da 100%: 0.3%user + 0.2%sys +99.4%idle == 99.9%. Todo es calculado separadamente (global y por proceso) y debes tomarlo de esa forma. Un ejemplo es compilar el kernel: top - 14:25:42 up 3:26, 9 users, load average: 2.45, 2.07, 1.24 Tasks: 207 total, 4 running, 202 sleeping, 0 stopped, 1 zombie Cpu0 : 52.9%us, 15.6%sy, 0.0%ni, 0.0%id, 30.9%wa, 0.3%hi, 0.3%si, 0.0%st Mem: 2007220k total, 1821260k used, 185960k free,52756k buffers Swap: 2112536k total, 5156k used, 2107380k free, 962488k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 12729 amartoq 20 0 19024 11m 3368 R 5.3 0.6 0:00.16 cc1 12234 root 10 -10 493m 253m 244m S 2.0 12.9 3:39.70 vmware-vmx 11437 amartoq 20 0 242m 96m 26m S 1.7 4.9 1:46.67 firefox 6528 root 20 0 255m 88m 26m S 1.3 4.5 7:52.91 Xorg La CPU estuvo al 100% durante el intervalo (5 secs), pero si miras la lista de procesos no supera el 10% de cpu . En este caso es porque los programas que utilizaron CPU ya no estan corriendo; pero todo esta correcto dentro de su contexto (4 running tampoco cuadra y asi ...). Mi apuesta en este caso es que tu maquina es un notebook que varia la frecuencia de CPU y tanto la frecuencia de la CPU como el uso de tu programa deben estar saltando, quizas podrias intentar fijar la frecuencia y tendras resultados mas estables; puedes intentar el cpufreq-applet de gnome o configurar en /sys/devices/system/cpu/cpu0/cpufreq/. 0.3% es el 30% de ocupacion de la CPU sumando todos los procesos durante ese refresco de pantalla. 23.7% representa el tiempo de uso de esa tarea en paticular. 0.3% es solo el porcentaje de cpu gastado en userland. Si quieres saber cuanto de cpu se utiliza, es mejor restar 100% al idle == 0.6%. Tu 30% no tiene sentido, 0.3% es 0.3% en todas partes. -- Aldrin Martoq amar...@dcc.uchile.cl http://aldrin.martoq.cl/videopodcast/ http://aldrin.martoq.cl/techblog/ signature.asc Description: This is a digitally signed message part
Re: Significado de %CPU reportado por top
Alejandro Weinstein escribió: On Thu, Feb 5, 2009 at 5:06 AM, Miguel Oyarzo O. ad...@aim.cl wrote: Alejandro Weinstein escribió: 2009/2/4 Alejandro Weinstein alejandro.weinst...@gmail.com: OK. Viendo el detalle por CPU los numeros tienen mas sentido Ahora estoy confundido otra vez. La siguiente es una captura de top, en una maquina con UNA cpu: Tasks: 61 total, 2 running, 59 sleeping, 0 stopped, 0 zombie Cpu0 : 0.3%us, 0.2%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem:507380k total,87544k used, 419836k free, 5084k buffers Swap: 385520k total,0k used, 385520k free,34484k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 4370 ajw 20 0 102m 9.9m 4200 S 23.7 2.0 0:47.09 python 4341 ajw 20 0 14996 4296 2300 S 1.7 0.8 0:03.99 python 1 root 20 0 2844 1696 548 S 0.0 0.3 0:01.57 init Tengo Cpu0: 0.3%. y uno de los procesos python usando 23.7%. Como cuadran estos numeros? Significa que el proceso uso el 23.7% del 0.3%? 0.3% es el 30% de ocupacion de la CPU sumando todos los procesos durante ese refresco de pantalla. De donde sale el 30%? Olvidate de mi respuesta anterior, me confundi con otra cosa Ese indicador solo te muestra el tiempo que la CPU uso en los procesos de usuarios (los que consumen algo relevante de CPU) Saludos, Miguel Oyarzo O. Austro Internet S.A. Punta Arenas
Re: Significado de %CPU reportado por top
Hola! El Wed, Feb 04, 2009 at 11:13:13AM -0700, Alejandro Weinstein escribio: [...] Es un SBC (Single Board Computer), con un procesador Pentium-M. Acabo de revisar y no aparece el directorio cpufreq. Significa eso que esta corriendo a una frequencia fija? (En mi laptop, que tiene el mismo Ubuntu que el SBC, si me aparece el directorio, con los archivos cpuinfo_min_freq y cpuinfo_max_freq entre otros). Mas alla de que los numeros cuadren o no, me interesa saber si el sistema esta muy cargado o no. Si miro el uso total de la CPU, me sale 0.3%, y parece ser que el sistema esta super holgado. Pero si miro por proceso, aparece mi proceso usando el 30%, lo que parece una carga mas significativa. Cual es la interpretacion correcta de estos datos? Si quieres saber si esta muy cargado, el uso de CPU es irrelevante. Un ejemplo: si quieres saber si un estudiante tiene una carga de ramos muy grande, ¿te sirve mirar si en este minuto esta ocupado?. Claramente, en el momento que muestrees, o bien el estudiante está en clases (con un uso de casi 100% ojalá) o no (con un uso de 0%). Por más que lo desee, no puede está haciendo más del 100% en un momento determinado. Lo que debes mirar, es el tamaño de la cola de cosas por hacer promediado en el tiempo... osea, el promedio de cuantas cosas por hacer tienes. Esta medición, en un sistema Unix, la entregan las columnas load average que aparecen al principio en el top, o se pueden obtener con uptime. Los números corresponden a la carga promedio de 1, 5 y 15 minutos. Si la carga promedio es mayor que el número de CPUs de tu computador, significa que estas con sobrecarga. Daniel.
Re: Significado de %CPU reportado por top
On Wed, 2009-02-04 at 11:13 -0700, Alejandro Weinstein wrote: 2009/2/4 Aldrin Martoq amar...@dcc.uchile.cl: No cuadran porque los contadores se sacan de _distintas partes_ y en _distintos instantes_, ni siquiera la linea de arriba te da 100%: 0.3%user + 0.2%sys +99.4%idle == 99.9%. Pero el error es pequenio. No como en mi caso donde la diferencia es significativa. Todo es calculado separadamente (global y por proceso) y debes tomarlo de esa forma. Un ejemplo es compilar el kernel: [...] La CPU estuvo al 100% durante el intervalo (5 secs), pero si miras la lista de procesos no supera el 10% de cpu . En este caso es porque los programas que utilizaron CPU ya no estan corriendo; pero todo esta correcto dentro de su contexto (4 running tampoco cuadra y asi ...). OK. Pero en mi caso el programa que usa la CPU sigue corriendo. Mi apuesta en este caso es que tu maquina es un notebook que varia la frecuencia de CPU y tanto la frecuencia de la CPU como el uso de tu programa deben estar saltando, quizas podrias intentar fijar la frecuencia y tendras resultados mas estables; puedes intentar el cpufreq-applet de gnome o configurar en /sys/devices/system/cpu/cpu0/cpufreq/. Que la freq de cpu cambie es lo unico que se me ocurre para que tengas valores tan dispares... Como explico Eduardo Silva, los contadores se basan en jiffies lo cual no es una unidad de tiempo sino una cantidad de ciclos de cpu; si la velocidad de la cpu salta tendras distinta cantidad de jiffies; luego yo esperaria que los calculos se fueran a la pailas o tal vez estoy equivocado en esta parte. Al menos es la explicacion que tengo, yo tenia valores muy extran~os por ejemplo en maquinas VMware server por esta razon: el contador de ticks se iba a las pailas, un sleep 10 podia durar 60 segundos y tengo otras historias similares; claro que en la version 2 mejoraron esto considerablemente y hace tiempo que no he visto nada raro. Es un SBC (Single Board Computer), con un procesador Pentium-M. Acabo de revisar y no aparece el directorio cpufreq. Significa eso que esta corriendo a una frequencia fija? (En mi laptop, que tiene el mismo Ubuntu que el SBC, si me aparece el directorio, con los archivos cpuinfo_min_freq y cpuinfo_max_freq entre otros). Puedes ver la freq de la cpu en /proc/cpuinfo. Prueba instalando el modulo cpufreq_userspace. Mas alla de que los numeros cuadren o no, me interesa saber si el sistema esta muy cargado o no. Hmmm intenta nmon o algun profiler (systemtap?). Depende del paraque: si quieres gastar menos bateria, mejorar rendimiento... Si miro el uso total de la CPU, me sale 0.3%, y parece ser que el sistema esta super holgado. Insisto: Separa que significa en top: us, sy, wa, id, etc ... Tu CPU usada es 100% - idle. Pero si miro por proceso, aparece mi proceso usando el 30%, lo que parece una carga mas significativa. Cual es la interpretacion correcta de estos datos? Quizas hay un bug en top o el kernel en la manera como estan considerando los contadores, y nadie se ha dado cuenta aun... Si puedes hacer el caso repetible, reportalo a tu distro. -- Aldrin Martoq amar...@dcc.uchile.cl http://aldrin.martoq.cl/videopodcast/ http://aldrin.martoq.cl/techblog/ signature.asc Description: This is a digitally signed message part
Significado de %CPU reportado por top
Hola: Estoy un poco confundido con el significado de %CPU reportado por top. La siguiente es la definicion del manual: k: %CPU -- CPU usage The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true SMP environment, if 'Irix mode' is Off, top will operate in 'Solaris mode' where a task's cpu usage will be divided by the total number of CPUs. You toggle 'Irix/Solaris' modes with the 'I' interactive command. Y esta es una captura de top Tasks: 128 total, 2 running, 126 sleeping, 0 stopped, 0 zombie Cpu(s): 13.5%us, 1.8%sy, 0.0%ni, 84.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 2062952k total, 934044k used, 1128908k free,29032k buffers Swap: 2008084k total,0k used, 2008084k free, 335764k cached PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 10030 ajw 20 0 67632 23m 7360 S 22 1.2 0:09.54 python 5322 root 20 0 293m 27m 8436 S6 1.4 2:40.33 Xorg 5934 ajw 20 0 249m 127m 26m S2 6.3 2:58.27 firefox 4914 avahi 20 0 3404 1960 1244 S1 0.1 0:08.06 avahi-daemon 5819 ajw 20 0 21232 8424 6944 R1 0.4 0:21.72 multiload-apple 1 root 20 0 3056 1884 564 S0 0.1 0:01.24 init Como ven, aparece Cpu(s): 13.5%us, y para el proceso 10030 (python), aparece %CPU 22. Segun la definicion del manual, entiendo que en los ultimos 3 segundos (periodo de actualizacion de top), el 13.5% del periodo fue usado por la CPU por programas de usuario, y de ese 13.5%, el 22% fue usado por python. Sin embargo mi interpretacion no cuadra, porque la suma de todos los procesos no suma 100, sino 32. Es posible que el 68% faltante este repartido entre los otros procesos, y que aparezca como 0 porque fue truncado? Hay otra explicacion? El tener dos nucleos afecta en algo? Saludos, Alejandro.
Re: Significado de %CPU reportado por top
On Tue, 2009-02-03 at 15:41 -0700, Alejandro Weinstein wrote: Hola: Estoy un poco confundido con el significado de %CPU reportado por top. La siguiente es la definicion del manual: [...] Como ven, aparece Cpu(s): 13.5%us, y para el proceso 10030 (python), aparece %CPU 22. Segun la definicion del manual, entiendo que en los ultimos 3 segundos (periodo de actualizacion de top), el 13.5% del periodo fue usado por la CPU por programas de usuario, y de ese 13.5%, el 22% fue usado por python. Sin embargo mi interpretacion no cuadra, porque la suma de todos los procesos no suma 100, sino 32. Es posible que el 68% faltante este repartido entre los otros procesos, y que aparezca como 0 porque fue truncado? Hay otra explicacion? El tener dos nucleos afecta en algo? Aparecen sumados los valores de todas las CPU's. Si presionas '1' aparecerán los valores por cada CPU en forma separada. Del resto no me pronuncio, porque habrá alguien que escribirá una explicación más entretenida de lo que yo pueda hacerlo. -- Germán Póo-Caamaño http://www.calcifer.org/
Re: Significado de %CPU reportado por top
Es posible que el 68% faltante este repartido entre los otros procesos, y que aparezca como 0 porque fue truncado? o que no se haya usado el 100% de la cpu, los procesos no siempre estan usando la cpu, pueden estar esperando una lectura del disco o una respuesta de la red o una entrada de teclado.
Re: Significado de %CPU reportado por top
On Tue, 2009-02-03 at 15:41 -0700, Alejandro Weinstein wrote: Estoy un poco confundido con el significado de %CPU reportado por top. La siguiente es la definicion del manual: k: %CPU -- CPU usage The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true SMP environment, if 'Irix mode' is Off, top will operate in 'Solaris mode' where a task's cpu usage will be divided by the total number of CPUs. You toggle 'Irix/Solaris' modes with the 'I' interactive command. En castellano: El % de CPU indica el porcentaje de uso de un proceso _por CPU_. Si tienes un programa multi-thread ocupando el 100% de 3 CPU's, entonces su % de CPU es 300%. Si te cambias al modo Slowlaris, se divide por la cantidad de CPU asi obtienes el porcentaje de CPU relativo al sistema global. Si tienes 4 cpu's y el proceso consume el 100% de 3 CPU's, entonces veras 75%. Y esta es una captura de top Tasks: 128 total, 2 running, 126 sleeping, 0 stopped, 0 zombie Cpu(s): 13.5%us, 1.8%sy, 0.0%ni, 84.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 2062952k total, 934044k used, 1128908k free,29032k buffers Swap: 2008084k total,0k used, 2008084k free, 335764k cached Presiona 1 y arriba te dara el detalle de cada CPU... PID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 10030 ajw 20 0 67632 23m 7360 S 22 1.2 0:09.54 python Tu programa es multithread y ocupa ~ el 13% del sistema global... Presiona I y veras lo que quieres. -- Aldrin Martoq amar...@dcc.uchile.cl http://aldrin.martoq.cl/videopodcast/ http://aldrin.martoq.cl/techblog/ signature.asc Description: This is a digitally signed message part
Re: Significado de %CPU reportado por top
Aldrin Martoq escribió: On Tue, 2009-02-03 at 15:41 -0700, Alejandro Weinstein wrote: Estoy un poco confundido con el significado de %CPU reportado por top. La siguiente es la definicion del manual: k: %CPU -- CPU usage The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true SMP environment, if 'Irix mode' is Off, top will operate in 'Solaris mode' where a task's cpu usage will be divided by the total number of CPUs. You toggle 'Irix/Solaris' modes with the 'I' interactive command. En castellano: El % de CPU indica el porcentaje de uso de un proceso _por CPU_. No dice eso, el parametro muestra el % de tiempo de CPU que las tareas de ese proceso han usado entre un refresco y otro. Si tienes un programa multi-thread ocupando el 100% de 3 CPU's, entonces su % de CPU es 300%. No, Si es 1 programa MThR que usará las 3 CPUs este siempre usara el 100% de ella (no importa lo que hagas, los ciclos de CPUs no se desperdician), pero top podria repotar un 10% de uso de CPU entre refresco y refresco (tareas rapiditas de ejecutar) Si disminuyes tu tiempo de refreco, top te mostrará mayor tiempo de utilizacion entre cada refresco. Saludos, Miguel Oyarzo O. Austro Internet S.A. Punta Arenas