stringtranslate.com

Carga (computación)

htop muestra una carga computacional significativa (arriba a la derecha: Carga promedio: )

En informática UNIX , la carga del sistema es una medida de la cantidad de trabajo computacional que realiza un sistema informático. La carga promedio representa la carga promedio del sistema durante un período de tiempo. Normalmente aparece 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 generan una métrica adimensional de tres números de "promedio de carga" en el núcleo . Los usuarios pueden consultar fácilmente el resultado actual desde un shell Unix ejecutando el uptimecomando:

$ uptime 14:34:03 activo 10:43, 4 usuarios, carga promedio: 0.06, 0.11, 0.09

Los comandos wy topmuestran los mismos tres números promedio de carga, al igual que una variedad de utilidades de interfaz gráfica de usuario .

En los sistemas operativos basados ​​en el kernel Linux , se puede acceder fácilmente a esta información leyendo el /proc/loadavgarchivo.

Para explorar este tipo de información en profundidad, de acuerdo con el Estándar de Jerarquía del Sistema de Archivos de Linux , la información dependiente de la arquitectura se expone en el archivo /proc/stat. [1] [2] [3]

Una computadora inactiva tiene un número de carga de 0 (el proceso inactivo no se cuenta). Cada proceso que usa o espera CPU (la cola de listos o la cola de ejecución ) incrementa el número de carga en 1. Cada proceso que termina lo disminuye en 1. La mayoría de los sistemas UNIX cuentan solo los procesos en los estados en ejecución (en CPU) o ejecutables (esperando CPU) . Sin embargo, Linux también incluye procesos en estados de suspensión ininterrumpida (generalmente esperando actividad de disco ), lo que puede llevar a resultados marcadamente diferentes si muchos procesos permanecen bloqueados en E/S debido a un sistema de E/S ocupado o estancado. [4] Esto, por ejemplo, incluye procesos bloqueados 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 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 del promedio de carga se refieren a los últimos uno, cinco y quince minutos de funcionamiento del sistema. [5]

Matemáticamente hablando, los tres valores siempre promedian toda la carga del sistema desde que se puso en marcha. Todos decaen exponencialmente, pero lo hacen 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 relación 63%/37% sobre 5 minutos y 15 minutos, respectivamente. Por lo tanto, no es técnicamente preciso 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 principalmente el último minuto.

Interpretación

En el caso de los sistemas con una sola CPU que dependen de la CPU , se puede pensar en la carga promedio como una medida de la utilización del sistema durante el período de tiempo correspondiente. En el caso de los sistemas con varias CPU, se debe dividir la carga por la cantidad de procesadores para obtener una medida comparable.

Por ejemplo, se puede interpretar una carga promedio de "1,73 0,60 7,98" en un sistema de una sola CPU como:

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, una carga promedio 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 para ejecutarse sumará 1 a la carga. Sin embargo, otros sistemas, especialmente los sistemas que implementan el llamado subproceso M:N , utilizan diferentes estrategias, como contar el proceso exactamente una vez a los efectos de la carga (sin importar el número de subprocesos), o contar solo los subprocesos actualmente expuestos por el programador de subprocesos del usuario al núcleo, lo que puede depender del nivel de concurrencia establecido en el proceso. Linux parece contar cada subproceso por separado como si agregara 1 a la carga. [6]

Carga de CPU vs. utilización de CPU

El estudio comparativo de diferentes índices de carga realizado por Ferrari et al. [7] 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 puede reflejar el nivel de carga exacto de la utilización. En contraste, las longitudes de la cola de la CPU pueden reflejar directamente la cantidad de carga en una CPU. A modo de ejemplo, es muy probable que dos sistemas, uno con 3 y el otro con 6 procesos en la cola, tengan ambos una utilización cercana al 100%, aunque obviamente difieren. [ investigación original? ]

Cálculo de la carga de la CPU

En los sistemas Linux, el promedio de carga no se calcula en cada tic del reloj, sino que se controla mediante 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 núcleo en hercios (veces por segundo) y el valor predeterminado es 100 para tics de 10 ms. Las actividades del núcleo utilizan esta cantidad de tics para cronometrarse. En concreto, la función timer.c::calc_load(), que calcula el promedio de carga, se ejecuta cada tic LOAD_FREQ = (5*HZ+1) o aproximadamente cada cinco segundos:

avenrun largo sin signo [ 3 ];  static inline void calc_load ( unsigned long ticks ) { unsigned long active_tasks ; /* punto fijo */ static int count = LOAD_FREQ ;               contar -= ticks ; si ( contar < 0 ) { contar += FRECUENCIA_CARGA ; tareas_activas = contar_tareas_activas (); CALC_CARGAR ( avenrun [ 0 ], EXP_1 , tareas_activas ); CALC_CARGAR ( avenrun [ 1 ], EXP_5 , tareas_activas ); CALC_CARGAR ( avenrun [ 2 ], EXP_15 , tareas_activas ); } }                       

La matriz avenrun contiene promedios de 1, 5 y 15 minutos. La CALC_LOADmacro y sus valores asociados se definen en sched.h:

#define FSHIFT 11 /* n° 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(5sec/5min) */ #define EXP_15 2037 /* 1/exp(5sec/15min) */#define CALC_LOAD(carga,exp,n) \  carga *= exp; \  carga += n*(FIXED_1-exp); \  carga >>= FSHIFT;

El cálculo "muestreado" de los promedios de carga es un comportamiento bastante común; FreeBSD también solo actualiza el valor cada cinco segundos. El intervalo suele considerarse no exacto para que no recopilen los procesos que están programados para ejecutarse en un momento determinado. [8]

Una publicación en la lista de correo de Linux considera que su tick +1 es insuficiente para evitar artefactos Moire de dicha recopilación, y sugiere un intervalo de 4,61 segundos en su lugar. [9] Este cambio es común entre los núcleos del sistema Android , aunque la expresión exacta utilizada supone un HZ de 100. [10]

Otros comandos de rendimiento del sistema

Otros comandos para evaluar el rendimiento del sistema incluyen:

Véase también

Referencias

  1. ^ "Carga de CPU" . Consultado el 4 de octubre de 2023 .
  2. ^ "/proc". Jerarquía del sistema de archivos de Linux . Consultado el 4 de octubre de 2023 .
  3. ^ "Estadísticas del kernel diversas en /proc/stat" . Consultado el 4 de octubre de 2023 .
  4. ^ "Soporte técnico de Linux: ¿Qué es exactamente un promedio de carga?". 23 de octubre de 2008.
  5. ^ Walker, Ray (1 de diciembre de 2006). "Examinando el promedio de carga". Linux Journal . Consultado el 13 de marzo de 2012 .
  6. ^ Véase http://serverfault.com/a/524818/27813
  7. ^ Ferrari, Domenico; y Zhou, Songnian; "Una investigación empírica de los índices de carga para aplicaciones de equilibrio de carga", Actas de Performance '87, el 12.º Simposio internacional sobre modelado, medición y evaluación del rendimiento informático, North Holland Publishers, Ámsterdam, Países Bajos, 1988, págs. 515-528
  8. ^ "¿Cómo se calcula la carga promedio en FreeBSD?". Unix & Linux Stack Exchange .
  9. ^ Ripke, Klaus (2011). "Archivo del kernel de Linux: LOAD_FREQ (4*HZ+61) evita el efecto muaré de loadavg". lkml.iu.edu .gráfico y parche
  10. ^ "Parchear el kernel con la función de carga de 4.61s · Problema n.° 2109 · AOSC-Dev/aosc-os-abbs". GitHub .
  11. ^ Baker, Scott (28 de septiembre de 2022). "dool - clon de dstat compatible con Python3". GitHub . Consultado el 22 de noviembre de 2022 . ...Dag Wieers dejó de desarrollar Dstat...
  12. ^ "Iotop(8) - Página del manual de Linux".

Enlaces externos