Load
Load (dt. „Last“) bezeichnet die momentan laufenden oder auf bestimmte Ereignisse wartenden Prozesse auf einem Computersystem. Man spricht dabei davon, dass „der Rechner einen Load von X hat“ (wobei X eine positive Zahl ist). Sie wird landläufig mit der Auslastung eines Computersystems gleichgesetzt. In der Unix-Welt, aus der der Begriff kommt, spricht man meistens von Load Average, dem Durchschnitt der Load-Werte über einen Zeitraum.
Load als Maßeinheit
Der Load ist die Anzahl der gerade laufenden oder auf Ereignisse wartenden Prozesse und ist demnach immer ganzzahlig (im Gegensatz zu dem Load Average auf Unix-Systemen). Solche Ereignisse sind sehr häufig das Beenden einer Schreib- oder Leseoperation von oder auf die Festplatte oder anderer Ein-/Ausgabegeräte. Der Load ist demnach ein Maß für auftretende Flaschenhals-Probleme.
So laufen zum Beispiel auf einem durchschnittlichen Computersystem sehr viele Programme im Hintergrund, die im Normalfall so gut wie keine Last erzeugen. Wenn der Speicher des Systems durch Interaktionen des Benutzers vollläuft, lagert das Betriebssystem die Prozesse vom Hauptspeicher auf Festplatte aus (Swapping). Ab und zu muss es jedoch einzelne Prozesse wieder in den Speicher laden, damit es diese ausführen kann. Da die Festplatte im Verhältnis zum Hauptspeicher ein sehr langsamer Datenträger ist, kann sich dies bei akutem Hauptspeichermangel zu einem beachtlichen Load hochschaukeln, der bis zur Unbenutzbarkeit des ganzen Computersystems führen kann, obwohl der Prozessor dabei kaum nennenswert ausgelastet ist.
Der Load ist nicht die Auslastung des Computersystems, im Speziellen nicht die Auslastung der CPU, sondern ein Maß dafür, wie viele gleichartige Systeme in einem Computer arbeiten müssten, um einen möglichen Engpass beseitigen zu können.
Beispielsweise hat ein Computersystem einen Prozessor. Gleichzeitig benötigen zwei Prozesse die volle Rechenleistung (andere Ressourcen werden im Beispiel nicht beachtet). Das Betriebssystem verteilt nun die beiden Prozesse gleichmäßig so, dass Prozess 1 und Prozess 2 gleichmäßig viel Rechenleistung erhalten (Scheduling). Der Load des Systems ist 2, die Auslastung der CPU liegt bei 100 %. Man erweitert das Computersystem auf vier CPUs. Das Betriebssystem verteilt diese Last nun auf die zwei Prozesse, so dass also immer zwei CPUs voll arbeiten können, die beiden anderen liegen brach. Trotzdem rechnen die Prozesse nun doppelt so schnell und der Rechner hat dabei immer noch eine Load von 2, die Auslastung der CPUs ist jedoch nur 50 %. Durch eine Programmverbesserung ist es nun möglich, die Last der zwei Prozesse auf alle vier CPUs zu verteilen. Der Load ist dann immer noch 2, die CPUs werden dabei aber zu 100 % ausgelastet, das heißt, die beiden Programme rechnen nochmal doppelt so schnell.
Der Load Average auf Unix-Systemen
Der Load Average (frei übersetzt durchschnittliche Systemlast) ist per Definition die (durchschnittliche) Länge der Run Queue der CPU sowie die Anzahl der Prozesse, die auf dieser laufen oder auf Ein- oder Ausgabe warten (Status D). Je nach System variiert die Zusammensetzung, genauso wie die üblichen Werte. Generell jedoch gilt: Je niedriger der Load-Wert, desto unbelasteter ist ein System, es stehen also mehr Ressourcen zur Verfügung. Die untere Grenze beträgt 0. Ein Load Average von 0 sagt dabei aus, dass sämtliche Betriebsmittel zur Verfügung stehen und das System die Aufgaben eines Benutzers mit maximaler Geschwindigkeit bearbeiten kann.
Eine obere Grenze für den Load-Wert gibt es nicht. Das System wird jedoch (je nach Anzahl der CPUs und anderer Betriebsmittel z. B. RAM, Eingabe und Ausgabe) mit steigender Systemlast immer schlechter benutzbar, weil alle Ressourcen permanent in Benutzung sind. Möchte man währenddessen zum Beispiel in einer X-Sitzung arbeiten, so macht sich die extreme Systemauslastung dadurch bemerkbar, dass die Oberfläche sehr langsam oder gar nicht reagiert.
Typische Angabe und Auswertung des Load Averages
Üblicherweise werden zur Angabe des Load Averages drei Zahlenwerte angegeben, die jeweils den Load Average der letzten Minute, der letzten fünf Minuten und der letzten 15 Minuten (in dieser Reihenfolge) angeben. Daraus kann man ablesen, wie sich die Auslastung des Systems entwickelt. Die drei Werte nennt man oft auch Load Triplet.
Bei der grafischen Darstellung der Beispielwerte 0.80, 1.71, 3.35
fällt auf, dass die Last zurückgeht (siehe Grafik rechts). Dies wird der Fall sein, wenn es weniger rechenintensive Prozesse gibt – Ursache dafür können etwa zuvor beendete Programme sein, die in den letzten 15 Minuten eine erhebliche Last erzeugt hatten.
In der Grafik auf der linken Seite werden die Werte 6.51, 5.13, 1.85
grafisch dargestellt. Man sieht, dass die Last auf dem Computer innerhalb der letzten 15 Minuten erheblich gestiegen ist, wobei in den letzten fünf Minuten der Anstieg nachgelassen hat.
Im Beispiel rechts kann man anhand der drei Werte feststellen, dass innerhalb der letzten Viertelstunde eine erhebliche Rechenlast abgearbeitet wurde, denn zum aktuellen Zeitpunkt liegt die Durchschnittslast wesentlich tiefer als vor fünf Minuten.
Aus den Load-Average-Werten kann ein Administrator mit wenig Aufwand feststellen, wie ausgelastet der Computer war. Im Gegensatz zu ressourcenfressenden grafischen Systemmonitoren braucht ein Unix-Administrator lediglich zu jeder vollen Viertelstunde den Load seines Rechners abzufragen und bekommt damit eine umfassende Statistik über den Auslastungswert. Die Auslastung wird vom Kernel automatisch berechnet, es bedarf keiner gesonderten Erfassung von Messwerten in Echtzeit.
Anhand der Systemauslastung kann man zum Beispiel auch bestimmte Programme erst dann starten, wenn der Rechner sich im Leerlauf befindet, der Load Average also sehr niedrig ist. Ein Beispiel hierfür ist der Unix-at
-Daemon. Er bietet das batch
-Utility, welches man anweisen kann, ein Programm zu starten, sobald der Load unter den Wert von 1.5
fällt.
Programme zum Anzeigen des Load Averages
Auf POSIX-kompatiblen Systemen lässt sich der Load Average üblicherweise mit dem Tool uptime
ermitteln. Ein Aufruf aus der Shell ergibt zum Beispiel folgendes Ergebnis:
$ uptime 00:58:04 up 7:07, 4 users, load average: 0.55, 0.60, 0.48
Neben der namensentsprechenden Uptime, also der Laufzeit seit dem Booten, gibt uptime im weiteren auch noch die momentane Uhrzeit, die Anzahl der angemeldeten Benutzer und zuletzt das Load Average Tripel aus.
Weitere Tools zur Anzeige auf der Konsole sind zum Beispiel w[1] und top. Es existieren auch grafische Tools, zum Beispiel das klassische xload (siehe rechts).
Das unixoide System Linux bietet im proc-Dateisystem einen Eintrag namens /proc/loadavg
, welches unter anderem den Load Average wiedergibt:
$ cat /proc/loadavg 0.27 0.47 0.45 1/186 8372
Prozentuale Auslastungswerte
Zwar ist die Benutzung des Load Average sehr praktisch und effizient, doch gibt es bei ihm keine Möglichkeit, die momentane Auslastung des Prozessors herauszufinden. Momentane Auslastungswerte werden zum Beispiel im weit verbreiteten Betriebssystem Microsoft Windows in Prozentzahlen verwendet, um die Auslastung des Systems auszugeben. Einen Load Average kennt Windows nicht.
Prozentuale Auslastungswerte bei Linux
Um in Linux einen prozentualen Auslastungswert zu erhalten, muss die Datei /proc/stat
aus dem Proc-Dateisystem ausgelesen werden. Sie enthält in den cpu-Zeilen Werte für User, Nice, System und Idle-Zeiten seit Systemstart. Diese bedeuten:
- User
- Die CPU-Ressourcen, die durch Benutzerprozesse beansprucht werden.
- Nice
- Zeit für Benutzerprozesse, die mit einem sehr hohen Nice-Wert laufen. Dies ist die unter Unix übliche Technik, um Prozessen eine niedrigere Priorität zu geben. Prozesse mit sehr niedriger Priorität werden nur ausgeführt, wenn der Rechner sonst unbeschäftigt ist (Prioritätsscheduling).
- System
- Ressourcen, die das System, d. h. der Linux-Kernel verbraucht.
- Idle
- Stellt den Leerlaufanteil des Prozessors dar, in dem keine Befehle von ihm abgearbeitet werden. Er befindet sich während einer solchen Phase im Idle-Zustand.
Die CPU-Auslastung entspricht dem invertierten prozentualen Anteil, den Idle in der Gesamtkalkulation einnimmt.
Ein Beispiel für die Datei /proc/stat
:
cpu 35421 0 4092 158570 3325 408 6 0 cpu0 35421 0 4092 158570 3325 408 6 0 [...]
Relevant sind jeweils die ersten vier Zahlen, die für User, Nice, System und Idle stehen. Zusammengerechnet geben sie im Beispiel 198.083, wovon der Idle-Wert 158.570 ausmacht, was etwa 80 % des Gesamtwerts entspricht. Die effektive CPU-Auslastung seit Systemstart liegt also bei gerade 20 %. Um eine prozentuale CPU-Auslastung über einen bestimmten Zeitraum zu erhalten, muss die Veränderung dieser Werte über diesen Zeitraum durch zweimaliges Auslesen der Datei ermittelt werden.
Weblinks
- UNIX Load Average: How It Works von Neil J. Gunther (englisch)
Fußnoten
- Manpage w (1) - man page. Abgerufen am 19. Mai 2020.