Perché non viene utilizzata una media mobile semplice di 1/5/15 minuti nel calcolo del carico Linux?


28

Fino a poco tempo fa pensavo che la media del carico (come mostrato ad esempio in alto) fosse una media mobile sugli ultimi valori del numero di processi nello stato "eseguibile" o "in esecuzione". E n sarebbe stato definito dalla "lunghezza" della media mobile: poiché l'algoritmo per calcolare la media del carico sembra innescarsi ogni 5 secondi, n sarebbe stato 12 per la media del carico 1min, 12x5 per la media del carico 5 min e 12x15 per la media del carico di 15 minuti.

Ma poi ho letto questo articolo: http://www.linuxjournal.com/article/9001 . L'articolo è piuttosto vecchio ma lo stesso algoritmo è implementato oggi nel kernel di Linux. La media del carico non è una media mobile ma un algoritmo per il quale non conosco un nome. Comunque ho fatto un confronto tra l'algoritmo del kernel Linux e una media mobile per un carico periodico immaginario:

grafico di carico.

C'è un'enorme differenza.

Infine le mie domande sono:

  • Perché questa implementazione è stata scelta rispetto a una media mobile reale, che ha un significato reale per chiunque?
  • Perché tutti parlano di "carico medio di 1 minuto" poiché l'algoritmo tiene conto di molto più dell'ultimo minuto. (matematicamente, tutte le misure dal momento dell'avvio; in pratica, tenendo conto dell'errore di arrotondamento - ancora molte misure)

5
È una media mobile esponenziale (EMA), utilizzata anche ad esempio in finanza (analisi tecnica). I vantaggi sono presumibilmente gli stessi: l'EMA può essere calcolato solo dal valore precedente e attuale e ai valori recenti viene dato più peso rispetto ai valori precedenti. In un MA standard il valore più vecchio contribuisce tanto alla media quanto il più recente, e talvolta pensiamo che i valori più recenti siano più importanti.
jg-faustus,

Risposte:


24

Questa differenza risale all'originale Berkeley Unix e deriva dal fatto che il kernel non può effettivamente mantenere una media mobile; per poterlo fare avrebbe bisogno di conservare un gran numero di letture passate, e soprattutto ai vecchi tempi non c'era memoria per risparmiarlo. L'algoritmo utilizzato presenta invece il vantaggio che tutto il kernel deve conservare è il risultato del calcolo precedente.

Tieni presente che l'algoritmo era un po 'più vicino alla verità quando le velocità del computer e i corrispondenti cicli di clock sono stati misurati in decine di MHz anziché GHz; in questi giorni c'è molto più tempo per far insinuare le discrepanze.


2
Ok, questo spiega la scelta dell'implementazione. Sai perché molte persone pensano che la media dei tre carichi sia calcolata negli ultimi 1 minuto / 5 minuti / 15 minuti? Penso che sia sbagliato, l'algoritmo calcola una media su tutti gli ultimi valori. Comprendo che i vecchi valori hanno meno importanza dei nuovi valori ma, tuttavia, i valori più vecchi di 1 minuto hanno ancora un'influenza non trascurabile nella media del carico di 1 minuto. Quindi secondo me "1min / 5min / 15min" non ha senso, ma
potrei

5
Perché questo è ciò che la documentazione e ogni programma che li riportava a partire dal BSD originale uptimee w, rivendicato; dovevi guardare i sorgenti del kernel per scoprire che in realtà non era vero.
Geekosaur

1
è davvero un peccato
user368507

3
@ user5528 I tempi 1min/5min/15min non hanno senso. Determinano il tempo dopo il quale l'influenza del carico corrente diminuisce di un fattore fisso (probabilmente e = 2,71 .. o forse 2). Provalo e basta.
maaartinus l'

2
@maaartinus Sì. 1min / 5min / 15min determinano il tempo dopo il quale le misure più vecchie hanno una ponderazione inferiore o uguale a 1 / e nel calcolo EMA. Questa precisione non appare nei tempi di attività o nella parte superiore dell'uomo .
user368507
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.