Mi?rcoles 22 de Noviembre de 2017
   SECCIONES



   LIGAS DE INTERES
  Federación Médica de Sonora
  Sociedad Médica CIMA

 

 

 

 
   CONTENIDO

Analizando la Carga en el CPU

Fuente UnixLibre

Hermosillo, Sonora.- (09 de febrero del 2008) Una de las herramientas mas útiles para un administrador de sistemas Unix/Linux es "top". La información proporcionada por este programa es muy diversa, y una muy importante es la carga promedio (average load).

Los tres valores al principio de la información arrojada por top son la carga promedio del CPU durante un minuto, cinco minutos y quince minutos. No debemos confundir este valor con el porcentaje de uso de CPU. Lo que se mide es exactamente el uso del procesador, no se contabilizan aquellas tareas que están realizando I/O o cualquier otra actividad en donde el procesador no esté involucrado. El valor de la carga promedio también se puede obtener de otros programas, como uptime:


$ uptime
12:24AM  up 50 days,  5:09, 1 user, load averages: 3.05, 0.10, 0.09


La carga promedio del CPU nos indica si el procesador está sobre o sub-utilizado. A muy grandes razgos, un CPU que no está siendo utilizado tiene una carga promedio de 0, y un proceso que esté ocupando el CPU (estado running) o que está listo para ejecutarse (y por ende en espera del CPU: estado runnable) le agrega el valor de 1.0 a este número. Del ejemplo anterior podemos obtener que el CPU estuvo sobreutilizado en un 205%: Un proceso ocupando el CPU y 2.05 procesos en estado runnable. La parte fraccional se obtiene debido a que el valor de la carga promedio se calcula con una función de promedios móviles con ponderación exponencial.


En teoría el valor ideal para la carga promedio es de 1.0, lo que significaría que el CPU está al 100% de su utilización y no hay procesos esperando a ser ejecutados. Volviendo al ejemplo anterior, para que la carga promedio esté en su valor óptimo necesitaríamos un CPU 3.05 veces mas potente, o bien un sistema con 4 CPUs. En sistemas multiprocesador (o multicore), la carga promedio debe dividirse entre el número de procesadores para obtener el valor equivalente a un equipo con un solo CPU. Una carga promedio de 4.0 en un sistema Quad-Core indicaría un estado ideal.


El valor ideal para un sistema determinado dependerá del uso real del mismo. Como regla general, podemos observar lo siguiente:



  • La carga promedio (por CPU en caso de sistemas múltiples) puede llegar a 2.0 o a 3.0 en períodos cortos durante el último minuto sin que represente una sobre-utilización del CPU.
  • Una carga promedio arriba de 2.0 o 3.0 (por CPU) durante los últimos 15 minutos indican claramente que el (los) CPU(s) no es(son) suficiente(s) para la carga de trabajo.

Estos valores dependerán también del sistema en cuestión. En el caso particular de Linux, en la carga promedio también se cuentan procesos en estado uninterruptible-sleep (están dormidos pero no pueden pasarse a la cola de runnables porque están esperando algún recurso, ejm. una lectura del disco duro). Estos procesos que no están demandando CPU también afectan el valor de la carga promedio.


Top obtiene los valores de la carga promedio desde /proc/loadavg. Por lo tanto, el encargado de llevar este conteo es el kernel. A un proceso en estado runnable se le asigna un procesador disponible, y se le es asignado un Quantum: unaa rebanada de tiempo equivalente a 1/100 de segundo (10 milisegundos). En la mayoría de las ocasiones el proceso desocupará el CPU debido a requerimientos de I/O (disco, la red, etc), pero en el caso que el proceso monopolize al CPU se genera una interrupción de hardware que permite desocupar al procesador, y además el kernel le agrega una penalización al proceso. Para darnos una idea, si un proceso acapara un CPU Intel de 2.6Ghz (los Ghz de los CPUs AMD se miden diferente), tiene oportunidad de ejecutar aproximadamente 50 millones de instrucciones, cantidad que es mas que suficiente para un ciclo de una aplicación común y corriente. Cuando el kernel toma el control despúes de este Quantum, deshabilita todas las interrupciones e incrementa una variable (jiffies counter) que lleva el conteo del número de ocurrencias de éste Quantum, y es en este momento cuando se lleva a cabo el cálculo de la carga promedio. En realidad, el valor de la carga promedio no se calcula en cada Quantum tick, depende de otros parámetros que determinan la frecuencia con que estos valores deberán ser actualizados, y usualmente es cada 5 segundos.


Por otro lado, el porcentaje de uso de CPU es un valor tomado de una serie de lecturas tomadas periódicamente.


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  476 popuser   15   0 35872  30m 2296 S    2  1.5   0:02.14 spamd
 1633 root      10  -5     0    0    0 S    0  0.0  27:13.55 kjournald
18293 qmails    17   0  1692  516  404 S    0  0.0   2:51.08 qmail-send
20914 drweb     18   0 24312  16m  792 S    0  0.8   0:07.07 drwebd


En este ejemplo, si spamd registra el 2% de CPU significa que durante el muestreo de actividad se observó que éste proceso estuvo ocupando el procesador en el 2% del total de las muestras. En realidad no existe el concepto "2%" de uso de CPU, el procesador puede estar solamente en dos estados: Ocupado al 100% ejecutando una instrucción o al 0% esperando. Diversos autores comparan el porcentaje de uso con una autopista: El automóvil con placas ABC-123 estuvo ocupando un carril de la autopista el 30% de los muestreos, y el automóvil DEF-456 estuvo el 20% ocupando un carril de la autopista. Sin embargo, el porcentaje de uso del CPU no provee información acerca de la demanda de la autopista.


 



Imprimir Enviar