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?
Respuestas:
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.
fuente
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.
fuente
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:
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.
fuente
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.
fuente
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
fuente