Warum wird bei der Linux-Lastberechnung kein einfacher gleitender Durchschnitt von 1/5/15 Minuten verwendet?

28

Bis vor kurzem dachte ich, dass der Lastdurchschnitt (wie zum Beispiel oben gezeigt) ein gleitender Durchschnitt der n letzten Werte der Anzahl der Prozesse im Zustand "lauffähig" oder "lauffähig" ist. Und n wäre durch die "Länge" des gleitenden Durchschnitts definiert worden: Da der Algorithmus zur Berechnung des Lastdurchschnitts alle 5 Sekunden auszulösen scheint, wäre n 12 für den 1-minütigen Lastdurchschnitt, 12 × 5 für den 5-minütigen Lastdurchschnitt und 12 × 15 für den 15-Minuten-Lastdurchschnitt.

Aber dann habe ich diesen Artikel gelesen: http://www.linuxjournal.com/article/9001 . Der Artikel ist ziemlich alt, aber der gleiche Algorithmus ist heute im Linux-Kernel implementiert. Der Lastdurchschnitt ist kein gleitender Durchschnitt, sondern ein Algorithmus, für den ich keinen Namen kenne. Trotzdem habe ich einen Vergleich zwischen dem Linux-Kernel-Algorithmus und einem gleitenden Durchschnitt für eine imaginäre periodische Last gemacht:

Grafik laden.

Es gibt einen großen Unterschied.

Schließlich sind meine Fragen:

  • Warum wurde diese Implementierung im Vergleich zu einem wahren gleitenden Durchschnitt gewählt, der für jedermann eine echte Bedeutung hat?
  • Warum jeder von "1min load average" spricht, da viel mehr als die letzte Minute vom Algorithmus berücksichtigt wird. (mathematisch gesehen das ganze Maß seit dem Hochfahren; in der Praxis unter Berücksichtigung des Rundungsfehlers - immer noch viele Maßnahmen)
user368507
quelle
5
Es ist ein exponentieller gleitender Durchschnitt (EMA), der auch zum Beispiel im Finanzbereich (technische Analyse) verwendet wird. Vermutlich sind die Vorteile gleich - die EMA kann nur aus dem vorherigen und dem aktuellen Wert berechnet werden, und aktuelle Werte werden stärker gewichtet als ältere Werte. In einem Standard-MA trägt der älteste Wert genauso viel zum Durchschnitt bei wie der jüngste, und manchmal denken wir, dass die neueren Werte wichtiger sind.
jg-faustus

Antworten:

24

Dieser Unterschied geht auf das ursprüngliche Berkeley-Unix zurück und beruht auf der Tatsache, dass der Kernel tatsächlich keinen rollierenden Durchschnitt halten kann. es müsste eine große Anzahl von früheren Lesungen behalten, um dies zu tun, und besonders in den alten Tagen gab es einfach keinen Speicher, der dafür übrig blieb. Der verwendete Algorithmus hat stattdessen den Vorteil, dass der Kernel nur das Ergebnis der vorherigen Berechnung behalten muss.

Denken Sie daran, dass der Algorithmus der Wahrheit ein Stück näher war, als die Computergeschwindigkeiten und die entsprechenden Taktzyklen in zehn MHz anstelle von GHz gemessen wurden. Heutzutage gibt es viel mehr Zeit für Unstimmigkeiten.

Geekosaurier
quelle
2
Ok, das erklärt die Wahl der Implementierung. Wissen Sie, warum viele Leute glauben, dass die drei Lastmittelwerte in den letzten 1 min / 5 min / 15 min berechnet wurden? Ich denke, es ist falsch, der Algorithmus berechnet einen Durchschnitt über alle letzten Werte. Ich verstehe, dass alte Werte weniger wichtig sind als neue Werte, aber dennoch haben Werte, die älter als 1 Minute sind, einen nicht zu vernachlässigenden Einfluss auf den 1-Minuten-Lastdurchschnitt. Also meiner Meinung nach "1min / 5min / 15min" haben keinen Sinn, aber ich kann falsch sein (?)
user368507
5
Denn das ist es, was die Dokumentation und jedes Programm, das sie beginnend mit der ursprünglichen BSD uptimeund gemeldet hat w, behauptet; Sie mussten sich die Kernelquellen ansehen, um herauszufinden, dass dies nicht der Fall war.
Geekosaurier
1
das ist wirklich schade
user368507
3
@ user5528 Die Zeiten 1min/5min/15min haben doch Sinn. Sie bestimmen die Zeit, nach der der Einfluss der aktuellen Last um einen festen Faktor abfällt (wahrscheinlich e = 2,71 .. oder vielleicht 2). Probieren Sie es einfach aus.
Maaartinus
2
@ maaartinus Ja. 1min / 5min / 15min bestimmen die Zeit, nach der ältere Kennzahlen in der EMA-Berechnung eine Gewichtung kleiner oder gleich 1 / e haben. Diese Präzision wird nicht in der Betriebszeit des Mannes oder in der Spitzenposition des Mannes angezeigt .
user368507