Comprender el promedio superior y de carga


11

Estoy observando un alto promedio de carga en cierta máquina (aproximadamente 9) en los tres campos de carga. Entiendo la carga como el número de procesos en estado "ejecutar" / actualmente desea tiempo de CPU. ¿Estoy en lo cierto al razonar que si se están ejecutando N procesos en mi máquina, esto no puede producir una carga mayor que N?

Además, ¿la carga cuenta con respecto a procesos o subprocesos? En otras palabras, ¿puede un proceso multiproceso producir una carga mayor que 1?


Tenga en cuenta que (debido a que generalmente se espera que se programen muy pronto), las tareas en el estado "ininterrumpible" también se cuentan como en ejecución. Solo un detalle, no algo que cambie su pregunta.
mattdm

Respuestas:


6

El promedio de carga generalmente se describe como "longitud promedio de la cola de ejecución". Tan pocos procesos o hilos que consuman CPU pueden elevar LA por encima de 1. No hay problema si LA es menor que el número total de núcleos de CPU. Pero si supera el número de CPU, esto significa que algunos subprocesos / procesos permanecerán en la cola, listos para ejecutarse, pero esperando CPU libre.


3

Los números que se utilizan para calcular el promedio de carga son tareas en el estado de ejecución o ininterrumpible y la cantidad de trabajo realizado en el segmento de tiempo del promedio móvil. Estas tareas pueden ser parte de un proceso multiproceso. Los campos son difusos cuanto más atrás en el tiempo debido a los resultados de suavizado del algoritmo utilizado.

Una carga de 1 equivale al 100% del trabajo de una CPU. Si tuviera una aplicación multiproceso que lograra tener una cantidad de subprocesos activos en exceso de la cantidad de CPU disponibles, entonces podría hacer que un solo proceso impulse la carga por encima de 1. Esto probablemente sería un pico a corto plazo y no se reflejaría en el vistas de corte de tiempo más largas del promedio de carga.

Además, dado que el promedio de carga se desarrolló antes de que existieran sistemas multinúcleo, es importante dividir los números de carga por el número total disponible de núcleos. Si esta es una carga sostenida de 9 en un sistema de cuatro núcleos de 4 sockets, entonces esta es una carga de 9 de 16 y no es realmente un problema.


1
- Todavía no he visto un sistema en el que múltiples núcleos en un zócalo estén expuestos al espacio del usuario de una manera que los haga parecer cualquier cosa menos más CPU. Entonces, en la parte superior, en el sistema de cuatro núcleos de 4 sockets, se ven 16 CPU. (Por lo tanto, uno puede ver fácilmente que la carga de 9 está por debajo del número de CPU.)
mattdm

Entiendo que los números son logarítmicos, por lo que están justo por debajo o por encima de 1. Un sistema que tengo, vi que el sistema informaba esto: promedio de carga: 10.41, 9.57, 9.26. ¿¿Qué?? ¿Por qué un sistema Linux informa el promedio de carga: 0.81, 1.57, 0.98 mientras que este sistema informa el promedio de carga: 10.41, 9.57, 9.26? ¿No son todos los Unix iguales en esto?
djangofan

3

Consulte kernel / sched / loadavg.c, que tiene un comentario largo y excelente al principio que explica la derivación del promedio de carga de un promedio en descomposición exponencial del número de subprocesos ejecutables (la "cola de ejecución") más el número de subprocesos ininterrumpidos (en espera en E / S o esperando en una cerradura).

Aquí está la esencia del comentario, pero vale la pena leerlo en su totalidad:

 * The global load average is an exponentially decaying average of
 * nr_running + nr_uninterruptible.
 *
 * Once every LOAD_FREQ:
 *     nr_active = 0;
 *     for_each_possible_cpu(cpu)
 *         nr_active += cpu_of(cpu)->nr_running +
 *                      cpu_of(cpu)->nr_uninterruptible;
 *     avenrun[n] = avenrun[0] *
 *                  exp_n + nr_active *
 *                  (1 - exp_n)

La vida real hace que el código sea algo complejo: contadores por CPU, núcleos sin tick, CPU de hotswap, falta de código de punto flotante que requiere una implementación de punto fijo de exp (n). Pero es fácil ver que todos están trabajando para implementar fielmente el método descrito en el comentario.

Notarás que Linux cuenta hilos , no solo procesos, lo que responde a tu pregunta.


0

Los 3 promedios de carga son algo así como una función logarítmica que gira alrededor del número 1. Algo similar a f (x) = eX (e al exponente X). Técnicamente, una representación de punto fijo de una función de disminución exponencial que simula un promedio. Son aditivos, por CPU, por lo que una carga completa podría verse como 4.00 en un sistema de cuatro núcleos. El primer número es el promedio en el último minuto, el segundo es el promedio en los últimos cinco minutos y el tercero es el promedio en los últimos 15 minutos. Pensé que debería dejarse una respuesta aquí que mencione eso.


0

Carga instantánea: número de tareas en ejecución o en espera de ejecución, o de otra manera, el número de tareas dispuestas a ejecutar

Promedio de carga: la medida anterior pero promediada exponencialmente con muestras anteriores de la misma medida

Ambos números son ilimitados y, a menudo, mucho más grandes que N.

Para ser claros: el recuento de carga en Linux incluye subprocesos, no hay duda al respecto. Puede producir una carga arbitrariamente grande con un solo proceso que crea muchos subprocesos.

Más sobre esto aquí

http://blog.angulosolido.pt/2015/04/linux-load-average-definitive-summary.html

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.