Eine fortgeschrittene Frage: Ich denke, meine durchschnittlichen Lastlasten sind im Vergleich zu einem Linux-System zu hoch. Ich habe ungefähr 0,40 1 Minute ohne CPU-Verbrauch (0-1%) und selbst wenn dies auf 4 Kerne verteilt ist, entspricht dies immer noch ungefähr 0,10 = 10% CPU-Verbrauch, was nicht korrekt ist. Ich habe jetzt erfahren, dass der durchschnittliche Auslastungsgrad nicht nur die CPU-Nutzung berücksichtigt, sondern auch die Festplatte und das Netzwerk. Ich habe daher versucht, den io wait-Wert zu finden, aber dieser scheint aus irgendeinem Grund auf dem Mac nicht verfügbar zu sein. Ich habe US und SY und ID natürlich im iostat-Tool, aber keine Anzeichen von io wait% (WI genannt, wenn ich mich nicht falsch erinnere).
Alles ist in Ordnung und ich habe die gleichen Lastdurchschnitte auf meinen anderen Macs. Ich möchte hier verstehen, WARUM die Durchschnittswerte auf diese Weise (so hoch) berechnet werden und wie ich sie weiter analysieren kann.
Ich habe gut 2 Stunden zu diesem Thema gegoogelt, aber es wird wenig oder gar nicht darüber gesprochen, irgendwelche Ideen?
Antworten:
Die Last ist die durchschnittliche Anzahl ausführbarer Prozesse.
man 3 getloadavg
sagt:Sie können dieselben Informationen auch durch Ausführen abrufen
sysctl vm.loadavg
.Unter der Annahme von Mac OS X 10.7.2
getloadavg
ruft die Funktion diesen Code hier auf (Suche nach dem zweiten Vorkommen vonsysctl_loadavg
), der im Wesentlichen den aktuellen Wert von zurückgibtaverunnable
.Dies wird wiederum hier definiert :
Diese Datei definiert auch
compute_averunnable
, welche den neuen gewichteten Wert von berechnetaverunnable
.Die Scheduler-Header-Datei sched.h deklariert sie als
extern
und alle Scheduler-Implementierungenxnu-1699.24.8/osfmk/kern/sched_*.c
rufen sie regelmäßig übercompute_averages
in sched_average.c auf .Das Argument
compute_averunnable
, istsched_nrun
insched_average.c
, seinen Wert vonsched_run_count
in zu bekommensched.h
.Diese Nummer wird von den Makros geändert
sched_run_incr
undsched_run_decr
ausschließlich in der Datei verwendet. Diessched_prim.c
sind die Planungsprimitive, die für das Entsperren, Versenden usw. von Threads verantwortlich sind.Um es noch einmal zusammenzufassen:
Es wird einfach die Anzahl der ausführbaren Threads verwendet, um Lastdurchschnitte in Intervallen von 5 Sekunden zu berechnen.
Obwohl die Systeme völlig unterschiedlich sind, fällt es mir schwer zu glauben, dass Linux immer weniger ausgelastet ist als OS X. Tatsächlich scheint Linux einfach einen anderen Wert zu haben .
Wikipedia zitieren :
Nach diesem Artikel zu urteilen , verwendet Linux wirklich die Anzahl der Prozesse , die im Gegensatz zu den Threads von XNU ausgeführt werden können.
Da jeder ausführbare Prozess mindestens einen ausführbaren Thread hat, sind die Lastdurchschnittswerte unter OS X unter der Annahme einer äquivalenten Lastdurchschnittsberechnung (die ich nicht überprüft habe) immer mindestens genauso groß, da das Element sie zählt. re basierend auf sind unterschiedlich.
quelle