En la computación UNIX , la carga del sistema es una medida de la cantidad de trabajo computacional que realiza un sistema informático. El promedio de carga representa la carga promedio del sistema durante un período de tiempo. Aparece convencionalmente en forma de tres números que representan la carga del sistema durante los últimos períodos de uno, cinco y quince minutos.
Cálculo de carga al estilo Unix
Todos los sistemas Unix y similares a Unix generan una métrica adimensional de tres números de "promedio de carga" en el kernel . Los usuarios pueden consultar fácilmente el resultado actual desde un shell de Unix ejecutando el uptime
comando:
$ tiempo de actividad 14:34:03 hasta 10:43, 4 usuarios, promedio de carga: 0.06, 0.11, 0.09
Los comandos w
y top
muestran los mismos tres números de promedio de carga, al igual que una variedad de utilidades de interfaz gráfica de usuario . En Linux , también se puede acceder a ellos leyendo el /proc/loadavg
archivo.
Una computadora inactiva tiene un número de carga de 0 (el proceso inactivo no se cuenta). Cada proceso que usa o espera la CPU (la cola lista o la cola de ejecución ) incrementa el número de carga en 1. Cada proceso que termina lo reduce en 1. La mayoría de los sistemas UNIX solo cuentan los procesos en ejecución (en la CPU) o ejecutables (en espera de la CPU). ) estados . Sin embargo, Linux también incluye procesos en estados de suspensión ininterrumpida (generalmente esperando la actividad del disco ), lo que puede conducir a resultados marcadamente diferentes si muchos procesos permanecen bloqueados en E / S debido a un sistema de E / S ocupado o estancado. [1] Esto, por ejemplo, incluye el bloqueo de procesos debido a una falla del servidor NFS o medios demasiado lentos (por ejemplo, dispositivos de almacenamiento USB 1.x). Tales circunstancias pueden resultar en un promedio de carga elevado que no refleja un aumento real en el uso de la CPU (pero aún da una idea de cuánto tiempo tienen que esperar los usuarios).
Los sistemas calculan el promedio de carga como el promedio móvil ponderado / amortiguado exponencialmente del número de carga . Los tres valores de carga promedio se refieren a los últimos uno, cinco y quince minutos de funcionamiento del sistema. [2]
Hablando matemáticamente, los tres valores siempre promedian toda la carga del sistema desde que se puso en marcha. Todos decaen exponencialmente, pero decaen a diferentes velocidades : decaen exponencialmente por e después de 1, 5 y 15 minutos respectivamente. Por lo tanto, el promedio de carga de 1 minuto consiste en el 63% (más precisamente: 1 - 1 / e ) de la carga del último minuto y el 37% (1 / e ) de la carga promedio desde el arranque, excluyendo el último minuto. Para los promedios de carga de 5 y 15 minutos, se calcula la misma proporción de 63% / 37% durante 5 minutos y 15 minutos respectivamente. Por tanto, no es técnicamente exacto que el promedio de carga de 1 minuto solo incluya los últimos 60 segundos de actividad, ya que incluye el 37% de la actividad del pasado, pero es correcto afirmar que incluye mayoritariamente el último minuto.
Interpretación
Para los sistemas de CPU única que están vinculados a la CPU , se puede pensar en el promedio de carga como una medida de la utilización del sistema durante el período de tiempo respectivo. Para sistemas con múltiples CPU, se debe dividir la carga por el número de procesadores para obtener una medida comparable.
Por ejemplo, se puede interpretar un promedio de carga de "1,73 0,60 7,98" en un sistema de una sola CPU como:
- durante el último minuto, el sistema se sobrecargó en un 73% en promedio (1,73 procesos ejecutables, por lo que 0,73 procesos tuvieron que esperar un turno para un solo sistema de CPU en promedio).
- durante los últimos 5 minutos, la CPU estuvo inactiva el 40% del tiempo en promedio.
- durante los últimos 15 minutos, el sistema se sobrecargó en un 698% en promedio (7,98 procesos ejecutables, por lo que 6,98 procesos tuvieron que esperar un turno para un solo sistema de CPU en promedio).
Esto significa que este sistema (CPU, disco, memoria, etc.) podría haber manejado todo el trabajo programado para el último minuto si fuera 1,73 veces más rápido.
En un sistema con cuatro CPU, un promedio de carga de 3.73 indicaría que había, en promedio, 3.73 procesos listos para ejecutarse, y cada uno podría programarse en una CPU.
En los sistemas UNIX modernos, el tratamiento de los subprocesos con respecto a los promedios de carga varía. Algunos sistemas tratan los subprocesos como procesos a los efectos del cálculo del promedio de carga: cada subproceso que espera ejecutarse agregará 1 a la carga. Sin embargo, otros sistemas, especialmente los sistemas que implementan los llamados subprocesos M: N , utilizan diferentes estrategias, como contar el proceso exactamente una vez con el propósito de cargar (independientemente del número de subprocesos), o contar solo los subprocesos expuestos actualmente por el usuario. programador de subprocesos al kernel, que puede depender del nivel de concurrencia establecido en el proceso. Linux parece contar cada subproceso por separado como sumando 1 a la carga. [3]
Carga de la CPU frente a la utilización de la CPU
El estudio comparativo de diferentes índices de carga realizado por Ferrari et al. [4] informó que la información de carga de la CPU basada en la longitud de la cola de la CPU funciona mucho mejor en el equilibrio de carga en comparación con la utilización de la CPU. La razón por la que la longitud de la cola de la CPU funcionó mejor es probablemente porque cuando un host está muy cargado, es probable que su utilización de la CPU sea cercana al 100% y no pueda reflejar el nivel de carga exacto de la utilización. Por el contrario, las longitudes de la cola de la CPU pueden reflejar directamente la cantidad de carga en una CPU. Por ejemplo, dos sistemas, uno con 3 y el otro con 6 procesos en la cola, es muy probable que ambos tengan utilizaciones cercanas al 100%, aunque obviamente difieren. [ investigación original? ]
Calculando la carga de la CPU
En los sistemas Linux, el promedio de carga no se calcula en cada tic del reloj, sino que está impulsado por un valor variable que se basa en la configuración de frecuencia HZ y se prueba en cada tic del reloj. Esta configuración define la frecuencia de tic del reloj del kernel en hercios (veces por segundo), y su valor predeterminado es 100 para ticks de 10 ms. Las actividades del núcleo utilizan este número de tics para cronometrarse. Específicamente, la función timer.c :: calc_load (), que calcula el promedio de carga, ejecuta cada LOAD_FREQ = (5 * HZ + 1) tics, o aproximadamente cada cinco segundos:
avenrun largo sin firmar [ 3 ];static inline void calc_load ( ticks largos sin firmar ) { active_tasks largos sin firmar ; / * punto fijo * / static int count = LOAD_FREQ ; contar - = garrapatas ; if ( cuenta < 0 ) { cuenta + = LOAD_FREQ ; active_tasks = count_active_tasks (); CALC_LOAD ( avenrun [ 0 ], EXP_1 , active_tasks ); CALC_LOAD ( avenrun [ 1 ], EXP_5 , active_tasks ); CALC_LOAD ( avenrun [ 2 ], EXP_15 , active_tasks ); } }
La matriz de avenrun contiene un promedio de 1 minuto, 5 minutos y 15 minutos. La CALC_LOAD
macro y sus valores asociados se definen en sched.h:
#define FSHIFT 11 / * nr de bits de precisión * /#define FIXED_1 (1 << FSHIFT) / * 1.0 como punto fijo * /#define LOAD_FREQ (5 * HZ + 1) / * intervalos de 5 segundos * /#define EXP_1 1884 / * 1 / exp (5sec / 1min) como punto fijo * /#define EXP_5 2014 / * 1 / exp (5seg / 5min) * /#define EXP_15 2037 / * 1 / exp (5seg / 15min) * /#define CALC_LOAD (cargar, exp, n) \ cargar * = exp; \ load + = n * (FIXED_1-exp); \ load >> = FSHIFT;
El cálculo "muestreado" de los promedios de carga es un comportamiento algo común; FreeBSD, también, solo actualiza el valor cada cinco segundos. Por lo general, se considera que el intervalo no es exacto para que no recopilen procesos que están programados para activarse en un momento determinado. [5]
Una publicación en la lista de correo de Linux considera su +1 marca insuficiente para evitar artefactos de muaré de dicha colección y sugiere un intervalo de 4,61 segundos en su lugar. [6] Este cambio es común entre los núcleos del sistema Android , aunque la expresión exacta utilizada asume un HZ de 100. [7]
Otros comandos de rendimiento del sistema
Otros comandos para evaluar el rendimiento del sistema incluyen:
uptime
- la fiabilidad del sistema y el promedio de cargatop
- para una vista general del sistemavmstat
- vmstat reporta información sobre procesos ejecutables o bloqueados, memoria, paginación, bloque de E / S, trampas y CPU.htop
- visor de procesos interactivodstat
- ayuda a correlacionar todos los datos de recursos existentes para procesos, memoria, paginación, bloques de E / S, trampas y actividad de la CPU.iftop
- visor de tráfico de red interactivo por interfaznethogs
- visor de tráfico de red interactivo por procesoiotop
- visor de E / S interactivo [8]iostat
- para estadísticas de E / S de almacenamientonetstat
- para estadísticas de redmpstat
- para estadísticas de CPUtload
- gráfico de carga promedio para terminalxload
- gráfico de carga promedio para X/proc/loadavg
- archivo de texto que contiene el promedio de carga
Ver también
enlaces externos
- Brendan Gregg (8 de agosto de 2017). "Promedios de carga de Linux: resolver el misterio" . Consultado el 22 de enero de 2018 .
- Neil J. Gunther . "Promedio de carga de UNIX - Parte 1: Cómo funciona" (PDF) . TeamQuest . Consultado el 12 de agosto de 2009 .
- Andre Lewis (31 de julio de 2009). "Comprensión de la carga de la CPU de Linux: ¿cuándo debería preocuparse?" . Consultado el 21 de julio de 2011 . Explicación utilizando una analogía de tráfico ilustrada.
- Ray Walker (1 de diciembre de 2006). "Examinar el promedio de carga" . Diario de Linux . Consultado el 21 de julio de 2011 .
- Karsten Becker. "Conjunto de herramientas de supervisión de carga de Linux OSS" . LoadAvg.
Referencias
- ^ http://linuxtechsupport.blogspot.com/2008/10/what-exactly-is-load-average.html
- ^ Walker, Ray (1 de diciembre de 2006). "Examinar el promedio de carga" . Diario de Linux . Consultado el 13 de marzo de 2012 .
- ^ Ver http://serverfault.com/a/524818/27813
- ^ Ferrari, Domenico; y Zhou, Songnian; " An Empirical Investigation of Load Indices for Load Balancing Applications ", Proceedings of Performance '87, XII Simposio internacional sobre modelado, medición y evaluación del rendimiento informático, North Holland Publishers, Amsterdam, Países Bajos, 1988, págs. 515–528
- ^ "¿Cómo se calcula el promedio de carga en FreeBSD?" . Stack Exchange de Unix y Linux .
- ^ Ripke, Klaus (2011). "Archivo del kernel de Linux: LOAD_FREQ (4 * HZ + 61) evita loadavg Moire" . lkml.iu.edu . gráfico y parche
- ^ "Parche el kernel con la carga 4.61s · Edición # 2109 · AOSC-Dev / aosc-os-abbs" . GitHub .
- ^ http://man7.org/linux/man-pages/man8/iotop.8.html