Por que uma média móvel simples de 1/5/15 minutos não é usada no cálculo de carga do Linux?

28

Até recentemente, eu pensava que a média de carga (como mostrado por exemplo na parte superior) era uma média móvel nos n últimos valores do número de processos no estado "executável" ou "em execução". E n teria sido definido pelo "comprimento" da média móvel: como o algoritmo para calcular a média de carga parece disparar a cada 5 s, n teria sido 12 para a média de carga de 1min, 12x5 para a média de carga de 5 min e 12x15 para a média de carga de 15 min.

Mas então eu li este artigo: http://www.linuxjournal.com/article/9001 . O artigo é bastante antigo, mas o mesmo algoritmo é implementado hoje no kernel do Linux. A média de carga não é uma média móvel, mas um algoritmo para o qual não sei um nome. Enfim, fiz uma comparação entre o algoritmo do kernel do Linux e uma média móvel para uma carga periódica imaginária:

carregar gráfico.

Há uma enorme diferença.

Finalmente minhas perguntas são:

  • Por que essa implementação foi escolhida em comparação com uma verdadeira média móvel, que tem um significado real para alguém?
  • Por que todo mundo fala sobre "1 min de carga média", já que muito mais que o último minuto é levado em consideração pelo algoritmo. (matematicamente, toda a medida desde a inicialização; na prática, levando em consideração o erro de arredondamento - ainda há muitas medidas)
user368507
fonte
5
É uma média móvel exponencial (EMA), também usada, por exemplo, em finanças (análise técnica). As vantagens são presumivelmente as mesmas - a EMA pode ser calculada apenas com o valor anterior e atual, e os valores recentes recebem mais peso do que os valores mais antigos. Em uma AM padrão, o valor mais antigo contribui tanto para a média quanto o mais recente e, às vezes, pensamos que os valores mais recentes são mais importantes.
jg-faustus

Respostas:

24

Essa diferença remonta ao Berkeley Unix original e decorre do fato de que o kernel não pode realmente manter uma média móvel; seria necessário reter um grande número de leituras passadas para fazer isso, e especialmente nos velhos tempos, simplesmente não havia memória de sobra para isso. O algoritmo usado tem a vantagem que todo o kernel precisa manter é o resultado do cálculo anterior.

Lembre-se de que o algoritmo estava um pouco mais próximo da verdade quando as velocidades do computador e os ciclos de clock correspondentes foram medidos em dezenas de MHz em vez de GHz; há muito mais tempo para discrepâncias surgirem nos dias de hoje.

geekosaur
fonte
2
Ok, isso explica a escolha da implementação. Você sabe por que muitas pessoas pensam que a média de três cargas é calculada nos últimos 1min / 5min / 15min? Eu acho que está errado, o algoritmo calcula uma média sobre todos os últimos valores. Entendo que os valores antigos têm menos importância que os novos, mas, mesmo assim, valores maiores que 1 minuto ainda têm uma influência não negligenciável na média de carga de 1 minuto. Então, na minha opinião "1min / 5min / 15min" não têm sentido, mas eu posso estar errado (?)
user368507
5
Porque é isso que a documentação e todos os programas que os relataram começando com o BSD original uptimee wreivindicaram; você tinha que olhar as fontes do kernel para descobrir que não era verdade.
Geekosaur
1
isso é realmente uma pena
user368507
3
@ user5528 Os tempos 1min/5min/15min não tem sentido. Eles determinam o tempo após o qual a influência da carga atual cai por algum fator fixo (provavelmente e = 2,71 .. ou talvez 2). Apenas tente.
Maaartinus 11/03
2
@maaartinus Sim. 1min / 5min / 15min determinam o tempo após o qual as medidas mais antigas têm um peso menor ou igual a 1 / e no cálculo da EMA. Essa precisão não aparece no tempo de atividade do homem ou no seu topo .
user368507