Top- und Lastdurchschnitt verstehen


11

Ich beobachte einen hohen Lastdurchschnitt auf einer bestimmten Maschine (ungefähr 9) in allen drei Lastfeldern. Ich verstehe Load als die Anzahl der Prozesse im Status "Ausführen" / aktuell gewünschte CPU-Zeit. Bin ich zu Recht der Meinung, dass wenn N Prozesse auf meinem Computer ausgeführt werden, dies keine Last größer als N erzeugen kann?

Zählt die Last auch in Bezug auf Prozesse oder Threads? Mit anderen Worten, kann ein Multithread-Prozess eine Last von mehr als 1 erzeugen?


Beachten Sie, dass Aufgaben im Status "unterbrechungsfrei" ebenfalls als ausgeführt gezählt werden (da sie normalerweise sehr bald geplant werden). Nur ein Detail, nichts, was Ihre Frage ändert.
Mattdm

Antworten:


6

Der Lastdurchschnitt wird normalerweise als "durchschnittliche Länge der Ausführungswarteschlange" beschrieben. So wenige CPU-verbrauchende Prozesse oder Threads können LA über 1 erhöhen. Es gibt kein Problem, wenn LA weniger als die Gesamtzahl der CPU-Kerne ist. Wenn die Anzahl der CPUs jedoch höher ist, bleiben einige Threads / Prozesse in der Warteschlange, können ausgeführt werden, warten jedoch auf die freie CPU.


3

Die Zahlen, die zur Berechnung des Lastdurchschnitts verwendet werden, sind Aufgaben im laufenden oder unterbrechungsfreien Zustand und der Arbeitsaufwand in der Zeitscheibe des gleitenden Durchschnitts. Diese Aufgaben können Teil eines Multithread-Prozesses sein. Die Felder sind aufgrund der Glättungsergebnisse des verwendeten Algorithmus umso unschärfer.

Eine Last von 1 entspricht 100% der Arbeit einer CPU. Wenn Sie eine Multithread-Anwendung hätten, die es geschafft hätte, eine Anzahl aktiver Threads zu haben, die über die Anzahl der verfügbaren CPUs hinausgeht, könnte ein einzelner Prozess die Last über 1 treiben. Dies wäre wahrscheinlich eine kurzfristige Spitze und würde sich nicht in der widerspiegeln längere Zeitscheibenansichten des Lastdurchschnitts.

Da der Lastdurchschnitt entwickelt wurde, bevor es Mehrkernsysteme gab, ist es wichtig, die Lastzahlen durch die insgesamt verfügbare Anzahl von Kernen zu teilen. Wenn dies eine dauerhafte Last von 9 auf einem 4-Sockel-Quad-Core-System ist, dann ist dies eine 9 von 16-Last und kein wirkliches Problem.


1
- Ich habe noch kein System gesehen, bei dem mehrere Kerne auf einem Socket dem Benutzerraum so ausgesetzt sind, dass sie wie alles andere als mehr CPUs aussehen. Oben auf dem 4-Sockel-Quad-Core-System sind also 16 CPUs zu sehen. (So ​​kann man leicht erkennen, dass die Last von 9 unter der Anzahl der CPUs liegt.)
Mattdm

Ich verstehe, dass die Zahlen logarithmisch sind, also knapp unter oder über 1. Bei einem System, das ich habe, hat das System Folgendes gemeldet: Lastdurchschnitt: 10,41, 9,57, 9,26. Was?? Warum meldet ein Linux-System einen durchschnittlichen Auslastungsgrad: 0,81, 1,57, 0,98, während dieses System einen durchschnittlichen Auslastungsgrad von 10,41, 9,57, 9,26 meldet? Sind alle Unix nicht gleich?
Djangofan

3

Siehe kernel / sched / loadavg.c, das zu Beginn einen langen und ausgezeichneten Kommentar enthält, in dem die Ableitung des Lastdurchschnitts aus einem exponentiell abfallenden Durchschnitt der Anzahl der ausführbaren Threads (die "Ausführungswarteschlange") plus der Anzahl der unterbrechungsfreien Threads (Warten) erläutert wird auf E / A oder auf ein Schloss warten).

Hier ist die Essenz des Kommentars, aber es lohnt sich, ihn vollständig zu lesen:

 * The global load average is an exponentially decaying average of
 * nr_running + nr_uninterruptible.
 *
 * Once every LOAD_FREQ:
 *     nr_active = 0;
 *     for_each_possible_cpu(cpu)
 *         nr_active += cpu_of(cpu)->nr_running +
 *                      cpu_of(cpu)->nr_uninterruptible;
 *     avenrun[n] = avenrun[0] *
 *                  exp_n + nr_active *
 *                  (1 - exp_n)

Das wirkliche Leben macht den Code etwas komplexer: Pro-CPU-Zähler, ticklose Kernel, Hotswap-CPUs, fehlender Fließkomma-Code, der eine Festkomma-Implementierung von exp (n) erfordert. Es ist jedoch leicht zu erkennen, dass alle darauf hinarbeiten, die im Kommentar beschriebene Methode genau umzusetzen.

Sie werden feststellen, dass Linux Threads zählt , nicht nur Prozesse, die Ihre Frage beantworten.


0

Die 3 Lastmittelwerte sind so etwas wie eine logarithmische Funktion, die sich um die Zahl 1 dreht. Ähnlich wie f (x) = eX (e zum X-Exponenten). Technisch eine Festpunktdarstellung einer exponentiellen Abklingfunktion, die einen Durchschnitt simuliert. Sie sind pro CPU additiv, sodass eine Volllast auf einem Quad-Core-System wie 4,00 aussehen kann. Die erste Zahl ist der Durchschnitt der letzten Minute, die zweite der Durchschnitt der letzten fünf Minuten und die dritte der Durchschnitt der letzten 15 Minuten. Ich dachte, hier sollte eine Antwort fallen gelassen werden, die das erwähnt.


0

Sofortiges Laden: Anzahl der Aufgaben, die ausgeführt werden oder auf ihre Ausführung warten, oder auf andere Weise die Anzahl der Aufgaben, die zur Ausführung bereit sind

Lastdurchschnitt: Das oben angegebene Maß, jedoch exponentiell gemittelt mit vorherigen Stichproben desselben Maßes

Beide Zahlen sind unbegrenzt und oft viel größer als N.

Um es klar auszudrücken: Die Anzahl der Lasten unter Linux umfasst Threads, daran besteht kein Zweifel. Sie können mit einem einzigen Prozess, der viele Threads erstellt, eine beliebig große Last erzeugen.

Mehr dazu hier

http://blog.angulosolido.pt/2015/04/linux-load-average-definitive-summary.html

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.