Why isn't a straightforward 1/5/15 minute moving average used in Linux load calculation?

Until recently I thought the load average (as shown for example in top) was a moving average on the n last values of the number of process in state "runnable" or "running". And n would have been defined by the "length" of the moving average: since the algorithm to compute load average seems to trigger every 5 sec, n would have been 12 for the 1min load average, 12x5 for the 5 min load average and 12x15 for the 15 min load average.

But then I read this article: http://www.linuxjournal.com/article/9001. The article is quite old but the same algorithm is implemented today in the Linux kernel. The load average is not a moving average but an algorithm for which I don't know a name. Anyway I made a comparison between the Linux kernel algorithm and a moving average for an imaginary periodic load: .

There is a huge difference.

Finally my questions are:

• Why this implementation have been choosen compared to a true moving average, that has a real meaning to anyone ?
• Why everybody speaks about "1min load average" since much more than the last minute is taken into account by the algorithm. (mathematically, all the measure since the boot; in practice, taking into account the round-off error -- still a lot of measures)

migrated from stackoverflow.comMar 9 '11 at 5:31

This question came from our site for professional and enthusiast programmers.

• It's an exponential moving average (EMA), also used for example in finance (technical analysis). The advantages are presumably the same - the EMA can be calculated from just the previous and current value, and recent values are given more weight than older values. In a standard MA the oldest value contribute just as much to the average as the most recent one, and sometimes we think that the more recent values are more important. – j-g-faustus Mar 10 '11 at 3:57