¿Por qué no se usa un promedio móvil directo de 1/5/15 minutos en el cálculo de carga de Linux?

28

Hasta hace poco, pensaba que el promedio de carga (como se muestra, por ejemplo, en la parte superior) era un promedio móvil en los n últimos valores del número de procesos en estado "ejecutable" o "en ejecución". Y n habría sido definido por la "longitud" del promedio móvil: dado que el algoritmo para calcular el promedio de carga parece activarse cada 5 segundos, n habría sido 12 para el promedio de carga de 1 min, 12x5 para el promedio de carga de 5 min y 12x15 para el promedio de carga de 15 min.

Pero luego leí este artículo: http://www.linuxjournal.com/article/9001 . El artículo es bastante antiguo, pero el mismo algoritmo se implementa hoy en el kernel de Linux. El promedio de carga no es un promedio móvil, sino un algoritmo para el que no sé un nombre. De todos modos, hice una comparación entre el algoritmo del kernel de Linux y un promedio móvil para una carga periódica imaginaria:

gráfico de carga.

Hay una gran diferencia

Finalmente mis preguntas son:

  • ¿Por qué esta implementación se ha elegido en comparación con un promedio móvil real, que tiene un significado real para cualquiera?
  • Por qué todo el mundo habla del "promedio de carga de 1 minuto" ya que el algoritmo tiene en cuenta mucho más que el último minuto. (matemáticamente, todas las medidas desde el arranque; en la práctica, teniendo en cuenta el error de redondeo, aún muchas medidas)
usuario368507
fuente
55
Es una media móvil exponencial (EMA), también utilizada, por ejemplo, en finanzas (análisis técnico). Presumiblemente, las ventajas son las mismas: la EMA se puede calcular solo a partir del valor anterior y actual, y los valores recientes tienen más peso que los valores anteriores. En una MA estándar, el valor más antiguo contribuye tanto al promedio como el más reciente, y a veces pensamos que los valores más recientes son más importantes.
jg-faustus

Respuestas:

24

Esta diferencia se remonta al Berkeley Unix original y se debe al hecho de que el núcleo no puede mantener un promedio móvil; necesitaría retener una gran cantidad de lecturas pasadas para hacerlo, y especialmente en los viejos tiempos simplemente no había memoria de sobra para ello. En cambio, el algoritmo utilizado tiene la ventaja de que todo lo que necesita mantener el núcleo es el resultado del cálculo anterior.

Tenga en cuenta que el algoritmo estaba un poco más cerca de la verdad cuando las velocidades de la computadora y los ciclos de reloj correspondientes se midieron en decenas de MHz en lugar de GHz; Hay mucho más tiempo para que sigan las discrepancias en estos días.

geekosaur
fuente
2
Ok, eso explica la elección de la implementación. ¿Sabes por qué mucha gente piensa que el promedio de tres cargas se calcula en los últimos 1 min / 5 min / 15 min? Creo que está mal, el algoritmo calcula un promedio sobre todos los últimos valores. Entiendo que los valores antiguos tienen menos importancia que los valores nuevos pero, sin embargo, los valores anteriores a 1 minuto todavía tienen una influencia no despreciable en el promedio de carga de 1 minuto. Entonces, en mi opinión, "1min / 5min / 15min" no tiene sentido, pero puedo estar equivocado (?)
user368507
55
Porque esa es la documentación, y cada programa que los reportó comenzando con el BSD original uptimey w, afirmó; tenías que mirar las fuentes del núcleo para descubrir que en realidad no era cierto.
geekosaur
1
eso es realmente una pena
user368507
3
@ user5528 Los tiempos 1min/5min/15min no tienen sentido. Determinan el tiempo después del cual la influencia de la carga actual cae en algún factor fijo (probablemente e = 2.71 ... o tal vez 2). Solo pruébalo.
maaartinus
2
@maaartinus Sí. 1min / 5min / 15min determinan el tiempo después del cual las medidas anteriores tienen una ponderación menor o igual a 1 / e en el cálculo de EMA. Esta precisión no aparece en el tiempo de actividad del hombre ni en la cima del hombre .
user368507