Developer92
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
Hi, ich hab da mal ne Frage zur Interpretation der Load-Werte unter Linux. Es geht um folgendes: Ich hab hier nen Dual-Core der zwischen 800 MHz und 1,6 GHz takten kann. Der Load-Wert meines Systems beträgt im Moment etwa 5, d.h. doch im Prinzip, dass das System total überlastet ist. Ein Wert kleiner 1 wäre doch optimal, oder? Ich seh mir im Moment ein Video an (Dekodierung über CPU), surfe im Internet und kopiere ein paar GB von einer Festplatte auf die andere. Beide Kerne takten aber mit gerade mal 800 MHz. Müsste der Takt nicht eigentlich bei so einem hohen Load-Wert raufgehen auf die 1,6 GHz? Und wenn ich den Gnome Systemmonitor öffne, sind beide Kerne nur etwa zu 60% ausgelastet, was stimmt also hier nicht? Oder interpretiere ich da was falsch? mfg
|
TomTobin
Anmeldungsdatum: 24. August 2007
Beiträge: 3099
|
Hallo Developer92, Developer92 schrieb: Oder interpretiere ich da was falsch?
Ja tust Du 😉 ⮷ Load Gruß Tom
|
Developer92
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
TomTobin schrieb: Developer92 schrieb: Oder interpretiere ich da was falsch?
Ja tust Du 😉
Okay, um ehrlich zu sein verstehe ich den Artikel aber immer noch nicht so ganz. Soll das heißen, wenn ich 5 Prozesse am Laufen habe, die die CPU und die Festplatte voll auslasten, ich einen Load-Wert von 5 bekomme? Kann man daraus dann folgern, dass ein Load-Wert > 1 bedeutet, dass es mindestens einen Prozess gibt, der die CPU oder irgendwas anderes was in den Wert miteinfließt den Rechner voll auslastet und auch auslasten würde, unabhängig davon wieviel Rechenleistung zur Verfügung steht? mfg
|
anrub
Anmeldungsdatum: 4. Januar 2013
Beiträge: 336
|
Die Manpage von uptime ist auch sehr aufschlussreich: (man uptime)
System load averages is the average number of processes that are either
in a runnable or uninterruptable state. A process in a runnable state
is either using the CPU or waiting to use the CPU. A process in unin‐
terruptable state is waiting for some I/O access, eg waiting for disk.
The averages are taken over the three time intervals. Load averages
are not normalized for the number of CPUs in a system, so a load aver‐
age of 1 means a single CPU system is loaded all the time while on a 4
CPU system it means it was idle 75% of the time.
Bei mir ist der load in normaler Nutzung zwischen 0.00 - 0.50 (8 Kerne i7, ssd) - also der ist ziemlich idle. Da deine CPU nicht sehr belastet ist, sieht es nach IO load vom kopieren aus, die hier die hohe Auslastung verursacht. Deine Folgerung ist richtig, der Load geht auch hoch, wenn Prozesse auf IO Ressourcen warten, und CPU zur Verfügung stünde - sofern ich die manpage richtig lese. Gruß,
anrub
|
TomTobin
Anmeldungsdatum: 24. August 2007
Beiträge: 3099
|
dass ein Load-Wert > 1 bedeutet, dass es mindestens einen Prozess gibt, der die CPU oder irgendwas anderes was in den Wert miteinfließt den Rechner voll auslastet und auch auslasten würde, unabhängig davon wieviel Rechenleistung zur Verfügung steht?
Nein, es muß heißen: Load-Wert > Anzahl_CPU_Kerne lastet das System aus und auch nur dann wenn es über einen längeren Zeitraum passiert. Es ist je nach dem was Du machst ganz normal das der Load mal über die Anzahl Kerne steigt. Die CPU Last in % kann trotzdem zu diesem Zeitpunkt sehr niedrig sein. Um bei Deinem Beispiel zu bleiben: Ich hab hier nen Dual-Core
Also gehe ich mal von 2 Kernen aus Ich seh mir im Moment ein Video an (Dekodierung über CPU), surfe im Internet und kopiere ein paar GB von einer Festplatte auf die andere.
Wenn das alles gleichzeitig passiert und das Video nur auf einem Kern rendert (und wir alles andere mal unterschlagen) hast Du schon mal einen Load von drei. D.h. ein Prozess muss warten und kann nichts tun. Wie sehr die beiden anderen Prozesse die CPUs auslasten hängt vom Programm ab.
d.h. doch im Prinzip, dass das System total überlastet ist.
Total überlastet ist ein hartes Wort - aber ja, es ist überlastet.
Ein Wert kleiner 1 wäre doch optimal, oder?
Ein Load ⇐ Anzahl_Kerne wäre ausreichend. Wenn der Load noch kleiner ist, heißt das nur, das Dein System sich total langweilt 😉 Das war jetzt sehr vereinfacht ausgedrückt. Du darfst Dir das auch nicht so genau mit Anzahl laufender Programm = Anzahl Prozesse = Load vorstellen. Ein Programm kann auch mehrere Prozesse haben und diese können wiederum in mehrere Threads aufgeteilt sein. Windows kennt zwar in dem Sinne keinen Load aber vielleicht hilft Dir die Erklärung zur Prozessor-Warteschlangenlänge hier zum besseren Verständnis weiter. Gruß Tom
|
Developer92
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
anrub schrieb: Bei mir ist der load in normaler Nutzung zwischen 0.00 - 0.50 (8 Kerne i7, ssd) - also der ist ziemlich idle. Da deine CPU nicht sehr belastet ist, sieht es nach IO load vom kopieren aus, die hier die hohe Auslastung verursacht.
Ja, sowas hab ich mir gedacht.
Deine Folgerung ist richtig, der Load geht auch hoch, wenn Prozesse auf IO Ressourcen warten, und CPU zur Verfügung stünde - sofern ich die manpage richtig lese.
Also bedeutet das in meinem Fall eher, dass sich die CPU langweilg (wie gesagt, etwa 60% Auslastung auf beiden Kernen bei 800MHz Taktfrequenz) und auf die Festplatte wartet. Oh man... TomTobin schrieb: Um bei Deinem Beispiel zu bleiben: Ich hab hier nen Dual-Core
Also gehe ich mal von 2 Kernen aus
Ja, oder gibts auch Dual-Cores mit mehr Kernen? HyperThreading zählt nicht ☺
d.h. doch im Prinzip, dass das System total überlastet ist.
Total überlastet ist ein hartes Wort - aber ja, es ist überlastet.
Naja, nach der Definition des Load-Wertes ja dann doch wieder nicht. Einige Komponenten haben Zeit und drehen Däumchen, während die Festplatte tut was sie kann.
Das war jetzt sehr vereinfacht ausgedrückt. Du darfst Dir das auch nicht so genau mit Anzahl laufender Programm = Anzahl Prozesse = Load vorstellen. Ein Programm kann auch mehrere Prozesse haben und diese können wiederum in mehrere Threads aufgeteilt sein.
Das ist mir bekannt, die Videodekodierung läuft z.B. in mehreren Prozessen ab (VLC) Aber trotzdem stimmt da etwas noch nicht, ich muss irgendwas übersehen: Wenn ich nur VLC offen habe und mir Videos angucke, dann hab ich einen Load-Wert von knapp über 2. Das System ist nicht annähernd ausgelastet, die Festplatte langweilt sich, die CPU langweilt sich, der Grafikchip hat auch nichts zu tun, der Arbeitsspeicher ist nicht annähernd voll. Was überseh ich also? Oder kann es sein, dass die Berechnung des Load-Wertes einfach ein paar Zahlen auswirft die letztlich nicht wirklich was aussagen? mfg EDIT: Das war mein 2048er Beitrag, yeah. Ich sollte mir ein anderes Hobby suchen... EDIT2: Uh, der Load-Wert sinkt auf 1,59. Hängt der Load-Wert eigentlich auch von der aktuellen Taktfrequenz der Prozessorkerne ab?
|
TomTobin
Anmeldungsdatum: 24. August 2007
Beiträge: 3099
|
Developer92 schrieb: HyperThreading zählt nicht ☺
würde sich aber auf den Load auswirken 😀 EDIT2: Uh, der Load-Wert sinkt auf 1,59.
Das geht nicht, der Load ist immer ganzzahlig, ansonsten ist es ein durchschnittlicher Wert über eine Zeiteinheit. Wo hast Du den Wert denn her?
Hängt der Load-Wert eigentlich auch von der aktuellen Taktfrequenz der Prozessorkerne ab?
Wenn Du nicht den Load sondern den Load Average nimmst, dann auf jeden Fall.
Aber trotzdem stimmt da etwas noch nicht, ich muss irgendwas übersehen: Wenn ich nur VLC offen habe und mir Videos angucke, dann hab ich einen Load-Wert von knapp über 2. Das System ist nicht annähernd ausgelastet, die Festplatte langweilt sich, die CPU langweilt sich, der Grafikchip hat auch nichts zu tun, der Arbeitsspeicher ist nicht annähernd voll. Was überseh ich also?
Kommt mir auch etwas hoch vor. Im Prinzip besteht Videoabspielen ja aus Bild und Ton und laden von Platte. Das sind drei Geräte. Könnte es sein, das eines davon mit einem nicht optimalen Treiber arbeitet und daher Zeit verplempert? Was hast Du denn konkret für Hardware und welche Treiber sind dafür in Benutzung? Gruß Tom
|
Developer92
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
TomTobin schrieb: Developer92 schrieb: HyperThreading zählt nicht ☺
würde sich aber auf den Load auswirken 😀
Nö, glaub ich nicht:
Load averages are not normalized for the number of CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time.
Der Load müsste also bei HyperThreading unverändert bleiben. Ich kann das auch mal testen, hab hier noch nen Core i7 rumstehen...
EDIT2: Uh, der Load-Wert sinkt auf 1,59.
Das geht nicht, der Load ist immer ganzzahlig, ansonsten ist es ein durchschnittlicher Wert über eine Zeiteinheit. Wo hast Du den Wert denn her?
Sorry, Loadaverage der letzten Minute (aus htop). Uptime gibt aber die gleichen Werte aus ☺
Hängt der Load-Wert eigentlich auch von der aktuellen Taktfrequenz der Prozessorkerne ab?
Wenn Du nicht den Load sondern den Load Average nimmst, dann auf jeden Fall.
Hm, das erscheint mir unlogisch. Dann müsste sich die Loadaverage der letzten Minute ja ändern, wenn ich die Taktfrequenz auf 1,6GHz erzwinge.
Kommt mir auch etwas hoch vor. Im Prinzip besteht Videoabspielen ja aus Bild und Ton und laden von Platte. Das sind drei Geräte. Könnte es sein, das eines davon mit einem nicht optimalen Treiber arbeitet und daher Zeit verplempert?
Nunja, die Dekodierung wird von der CPU gemacht und ist nicht optimal, da der Grafikchip mit den OpenSource-Treiber läuft. Aber sonst? Nö, läuft eigentlich alles.
Was hast Du denn konkret für Hardware und welche Treiber sind dafür in Benutzung?
Hardware: Asus E35M1-I Deluxe mit AMD Fusion E350 APU (2x1,6GHz), 4GB DDR3-RAM, 120GB SSD fürs Betriebssystem und 2TB auf einer Samsung EcoGreen von der das Video geladen wird. Soundtreiber kann ich nicht sagen, allerdings läuft das alles mit pulsaudio ohne Probleme, also... mfg EDIT: Loadaverage ändert sich nicht, wenn ich die Taktfrequenz auf 1,6GHz festsetze.
|
TomTobin
Anmeldungsdatum: 24. August 2007
Beiträge: 3099
|
Developer92 schrieb: TomTobin schrieb: Hängt der Load-Wert eigentlich auch von der aktuellen Taktfrequenz der Prozessorkerne ab?
Wenn Du nicht den Load sondern den Load Average nimmst, dann auf jeden Fall.
Hm, das erscheint mir unlogisch. Dann müsste sich die Loadaverage der letzten Minute ja ändern, wenn ich die Taktfrequenz auf 1,6GHz erzwinge.
Stimmt, du hast ja gesagt die CPU Last wäre niedrig, damit wäre bei einem Load über Anzahl_Kerne nichts gewonnen wenn man die Taktfrequenz erhöht, außer das sich die CPU noch mehr langweilt. Gruß Tom
|
Developer92
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
TomTobin schrieb: Developer92 schrieb: Hm, das erscheint mir unlogisch. Dann müsste sich die Loadaverage der letzten Minute ja ändern, wenn ich die Taktfrequenz auf 1,6GHz erzwinge.
Stimmt, du hast ja gesagt die CPU Last wäre niedrig, damit wäre bei einem Load über Anzahl_Kerne nichts gewonnen wenn man die Taktfrequenz erhöht, außer das sich die CPU noch mehr langweilt.
Wait, what? Die Loadaverage ändert sich nicht wenn ich eine Taktfrequenz von 1,6GHz erzwinge. Ja, die CPU langweilt sich noch mehr, aber das ändert nichts an den Werten. Ich versteh nur nicht, wie der Load-Wert bei mir >1 sein kann. Die CPU langweilt sich wie gesagt, der Arbeitsspeicher ist nicht annähernd voll, VLC braucht einen konstanten Datenstrom von 1MB/s welchen die Festplatte ohne Probleme liefern kann. Die Grafikkarte macht auch nichts und das System reagiert ja auch ohne Verzögerung. Irgendwie ist das alles nicht so, wie ich es erwartet hatte. mfg
|
TomTobin
Anmeldungsdatum: 24. August 2007
Beiträge: 3099
|
Die Grafikkarte macht auch nichts
Doch natürlich macht die was. VLC zeigt Dir doch den Film oder? Was ist es denn für eine Grafikkarte und welcher Treiber wird dafür verwendet? Gruß Tom
|
Developer92
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
TomTobin schrieb: Die Grafikkarte macht auch nichts
Doch natürlich macht die was. VLC zeigt Dir doch den Film oder?
Naja, aber sie macht nicht grad viel, die könnte schon mehr. Btw: Es ist ein Grafikchip der im Prozessor integriert ist, mein Fehler ☺
Was ist es denn für eine Grafikkarte und welcher Treiber wird dafür verwendet?
Der Grafikchip hört auf die Bezeichnung HD6310, ist aber wie gesagt im Prozesor integriert (AMD Fusion APU E350) Als Treiber verwende ich den freien radeon-Treiber. mfg
|
anrub
Anmeldungsdatum: 4. Januar 2013
Beiträge: 336
|
mmmh, wenn ich nochmal auf die manpage verweisen darf, wenn ich das richtig interpretiere heisst es ja nur: Load avg > N - es gibt durchschnittlich mehr als N Prozesse die gerade im "runnable" State sind - laufen gerade oder warten auf Ausführung - oder "uninterruptible" - wartet auf IO. Und uptime gibt den Durchschnitt der vergangenen 1,5,15 Minuten an. Du kannst den load validieren und gleich sehen was dazu führt. Indem du mit
| ps -eo stat,user,pid,command|grep ^[RD]
|
prüfst wieviele und welche Prozesse gerade im "R" runnable, oder "D" uninterruptible state sind. Grüße, anrub
|
Developer92
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
anrub schrieb: mmmh, wenn ich nochmal auf die manpage verweisen darf, wenn ich das richtig interpretiere heisst es ja nur: Load avg > N - es gibt durchschnittlich mehr als N Prozesse die gerade im "runnable" State sind - laufen gerade oder warten auf Ausführung - oder "uninterruptible" - wartet auf IO. Und uptime gibt den Durchschnitt der vergangenen 1,5,15 Minuten an.
Also in meiner manpage steht nirgends, dass Loadaverage > N sein muss oder ist, eigentlich erscheint mir das sogar unlogisch. Je nachdem wann ich die Anzahl der Prozesse die laufen oder nicht unterbrechbar sind zähle, erhalte ich eine Zahl zwischen 1 und (einschließlich) 3. Der Loadaverage beträgt aber im Moment 1,31 der letzten Minute. Also ist die Loadaverage eben nicht größer N, im Gegenteil, sie muss kleiner der maximal in der letzten Minute (oder letzen 5 oder 15 Minuten) gemessenen Anzahl der Prozesse sein, die entweder laufen oder in einem nicht unterbrechbaren Zustand sind. mfg
|
anrub
Anmeldungsdatum: 4. Januar 2013
Beiträge: 336
|
Developer92 schrieb: anrub schrieb: mmmh, wenn ich nochmal auf die manpage verweisen darf, wenn ich das richtig interpretiere heisst es ja nur: Load avg > N - es gibt durchschnittlich mehr als N Prozesse die gerade im "runnable" State sind - laufen gerade oder warten auf Ausführung - oder "uninterruptible" - wartet auf IO. Und uptime gibt den Durchschnitt der vergangenen 1,5,15 Minuten an.
Also in meiner manpage steht nirgends, dass Loadaverage > N sein muss oder ist, eigentlich erscheint mir das sogar unlogisch. Je nachdem wann ich die Anzahl der Prozesse die laufen oder nicht unterbrechbar sind zähle, erhalte ich eine Zahl zwischen 1 und (einschließlich) 3. Der Loadaverage beträgt aber im Moment 1,31 der letzten Minute. Also ist die Loadaverage eben nicht größer N, im Gegenteil, sie muss kleiner der maximal in der letzten Minute (oder letzen 5 oder 15 Minuten) gemessenen Anzahl der Prozesse sein, die entweder laufen oder in einem nicht unterbrechbaren Zustand sind.
Was genau meinst du?
Ich übersetze aus der man uptime:
"System load averages is the average number of processes that are either in a runnable or uninterruptable state."
"Der System-Load-Durchschnitt ist die durchschnittliche Anzahl von Prozessen, die entweder im "runnable" oder "uninterruptable" State sind." Interessant wäre nun die "Sampling" Rate von uptime, also wie oft in der Minute wird geprüft, wieviele Prozesse das betrifft. EDIT:
Zur Vervollständigung, die loadaverage wird alle 5 Sekunden ermittelt. (theoretisch - in Wirklichkeit ist es komplizierter) Das ganze kann gut im Linux Source verfolgt werden. Ausgangspunkt ist das procfs fs/proc/loadavg.c - Dort wird die Funktion get_avenrun() aufgerufen - diese Funktion ermittelt anscheinend die average load. Diese ist in linux/sched.h definiert und wird in kernel/sched/core.c implementiert - dort steht "once every LOAD_FREQ" - das ist bei mir alle 5 Sekunden. (LOAD_FREQ ist in sched.h definiert). Das ganze ist allerdings relativ kompliziert implementiert, steht auch im source wieso usw, usf. Gruß, anrub
|