sudo: Jack of all trades, master of some

Entendiendo el load average de nuestros sistemas

Comentarios desactivados en Entendiendo el load average de nuestros sistemas

Aquellos que en algún momento han usado top, htop, uptime y similares, se habrán percatado que todos estos comandos dentro de la información que ofrecen está ‘load average‘. El load average representa la carga promedio de la cola de ejecución del sistema en un período de tiempo. Convencionalmente se muestra por tres números que representan la carga del sistema durante el último minuto y los últimos cinco y quince minutos.
Pero ¿qué significan realmente estos números, cuándo deberíamos preocuparnos y cuándo no?

La cola de ejecución es una lista de procesos en espera de que hayan recursos disponibles dentro del sistema operativo. El siguiente ejemplo indica que habían 0.46 procesos en espera de ser programados en la cola de ejecución en el último minuto, 0.25 en los últimos cinco minutos y 0.1 en los últimos quince minutos.

$ uptime
 10:07:54 up 1:15, 2 users, load average: 0.46, 0.25, 0.1

Para entender un poco mejor me basaré en una analogía (ver referencia 1). Un CPU de un solo núcleo sería una sola línea de tráfico. Imaginemos una cola de las que se hacían hace muchos años atrás (era un niño) para coger la ‘guagua‘, existían aquellas barandillas por la que podían pasar una sola línea de personas. El conductor del ómnibus quiere saber cómo se comporta el tráfico de personas en esa cola entonces la pregunta sería ¿Cuántas personas esperan para subir al ómnibus en un tiempo determinado? que sería en sí la carga. Si no hay personas esperando, los que van llegando saben que pueden pasar por las barandas directamente a la ‘guagua‘ si la baranda está completamente llena entonces las que van llegando deben esperar.

Un valor de 0.00 significa que no hay personas entre las barandas y entre 0.00 y 1.00 las personas alcanzan el ómnibus sin tener que esperar.
Un valor de 1.00 significa que la cola alcanza toda la longitud de las barandas, pero el tráfico se hace un poco más lento.
Un valor sobre 1.00 significa que hay personas esperando, ¿cuántas? 2.00 significaría que las barandas están llenas y la misma cantidad de personas que hay pasando por ellas están esperando para pasar.
Ejemplo: si el tope de las barandas es diez personas, una carga de 1.90 significaría un total de 19 personas, diez entre las barandas y nueve esperando para pasar por ellas.
En esta analogía, las personas son procesos que usan una parte del tiempo del CPU (pasando por las barandas) o en espera para usar el CPU, o lo que en UNIX sería el tamaño de cola de ejecución, que es la suma de la cantidad de procesos ejecutándose y los que están en espera.

Entonces ¿cuál sería la carga ideal?

Una carga de 1.00 estaría bien, pero no habría margen para los procesos que llegan a la cola de ejecución y el sistema comenzaría a sobrecargarse un poco.
Por encima de 1.00 el sistema ya estaría sobrecargado y se debería investigar qué procesos están consumiendo más recursos.
Por encima de 5.00 el sistema se está colgando o ralentizándose demasiado.

¿Qué pasa en un sistema con procesadores de varios núcleos?

En un sistema de varios núcleos, la carga es relativa a la cantidad de núcleos del procesador. En un procesador dual-core el 100% de utilización sería 2.00, en un quad-core, 4.00, etc. Siguiendo la analogía del incio, si el ómnibus tiene dos entradas, se utilizarían dos barandas, una carga de 1.00 significaría que la capacidad está en un 50%, solo una baranda se está utilizando y las personas que vayan llegando pueden usar la que está libre. Y MÁS RÁPIDO ARRANCARÍA LA GUAGUA.

¿De los tres valores, cuál deberíamos observar?

Deberíamos observar los promedios del último valor (últimos quince minutos) ya que esto significaría que el sistema mantiene una carga generalmente estable en un tiempo largo. Por ejemplo: 1.00 en el último minuto no debería preocuparnos mucho porque esto pudiera significar un pico en la cantidad de procesos en la cola, sin embargo, este mismo valor en los últimos quince minutos sí debería preocuparnos un poco ya que el sistema estaría al 100% en un tiempo relativamente largo.

No solo el CPU interviene en la carga del sistema, la actividad del disco duro así como la de la red también tienen cierto impacto en ella.

Referencias

  1. http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
  2. http://prutser.wordpress.com/2012/04/23/understanding-linux-load-average-part-1/
  3. http://prutser.wordpress.com/2012/05/05/understanding-linux-load-average-part-2/
  4. http://prutser.wordpress.com/2012/05/05/understanding-linux-load-average-part-3/