Linuxの負荷計算で単純な1/5/15分移動平均が使用されないのはなぜですか?


28

最近まで、負荷の平均(たとえば上に表示)は、状態が「実行可能」または「実行中」のプロセス数の最後のn個の値の移動平均であると考えていました。nは移動平均の「長さ」で定義されます。負荷平均を計算するアルゴリズムは5秒ごとにトリガーされるように見えるため、nは1分間の負荷平均では12、5分間の負荷平均では12x5、12x15でした15分間の平均負荷。

:しかし、私はこの記事読んhttp://www.linuxjournal.com/article/9001を。この記事は非常に古いものですが、今日では同じアルゴリズムがLinuxカーネルに実装されています。負荷平均は移動平均ではなく、名前がわからないアルゴリズムです。とにかく、Linuxカーネルアルゴリズムと、想像上の周期的な負荷の移動平均を比較しました。

荷重グラフ

大きな違いがあります。

最後に、私の質問は次のとおりです。

  • なぜこの実装が真の移動平均と比較して選択されたのか、それは誰にとっても本当の意味を持っていますか?
  • アルゴリズムが最後の1分よりもはるかに多くを考慮しているため、誰もが「1分間の負荷平均」について話す理由。(数学的には、ブート以降のすべての測定値;実際には、丸め誤差を考慮に入れて-それでも多くの測定値)

5
これは指数移動平均(EMA)であり、たとえば金融(テクニカル分析)でも使用されます。利点はおそらく同じです。EMAは前の値と現在の値のみから計算でき、最近の値には古い値よりも大きな重みが与えられます。標準のMAでは、最も古い値が平均値に最も最近の値と同じくらい寄与します。また、最近の値がより重要であると考える場合があります。
jgファウスト

回答:


24

この違いは、元のBerkeley Unixにまでさかのぼり、カーネルが実際にローリング平均を維持できないという事実に由来しています。そのためには、過去の測定値を大量に保持する必要があります。特に昔は、そのためのメモリが不足していました。代わりに使用されるアルゴリズムには、カーネルが保持する必要のあるすべてが前の計算の結果であるという利点があります。

コンピューターの速度と対応するクロックサイクルがGHzではなく数十MHzで測定されたとき、アルゴリズムは少し真実に近いことに留意してください。これらの日には不一致が忍び寄る時間がもっとあります。


2
わかりました、それは実装の選択を説明します。多くの人が過去1分/ 5分/ 15分の3つの負荷平均を計算するのはなぜだと思いますか?私はそれが間違っていると思う、アルゴリズムはすべての最後の値の平均を計算します。新しい値よりも古い値の重要度は低いことを理解していますが、それでも、1分を超える値は1分間の負荷平均で無視できない影響を及ぼします。だから私の意見では「1分/ 5分/ 15分」は意味がありませんが、私は間違っているかもしれません(?)
user368507

5
なぜなら、それはドキュメントであり、元のBSDから始めてそれらを報告したすべてのプログラムuptimewが主張しているからです。カーネルソースを調べて、実際にはそうではないことがわかりました。
ギーコサウルス

1
それは本当に残念です
-user368507

3
@ user5528時代に1min/5min/15min 意味があります。それらは、現在の負荷の影響が一定の要因(おそらくe = 2.71 ..または多分2)だけ低下するまでの時間を決定します。試してみてください。
maaartinus

2
@maaartinusはい。1分/ 5分/ 15分は、EMA計算で古い測定値の重みが1 / e以下になるまでの時間を決定します。この精度は、man uptimeman topでは表示されません。
user368507
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.