Die Last ist die durchschnittliche Anzahl ausführbarer Prozesse. man 3 getloadavg
sagt:
Die Funktion getloadavg () gibt die Anzahl der Prozesse in der Systemlaufwarteschlange zurück, gemittelt über verschiedene Zeiträume. Bis zu Nelem-Samples werden abgerufen und aufeinanderfolgenden Elementen von loadavg [] zugewiesen.
Das System legt maximal 3 Abtastwerte fest, die Durchschnittswerte der letzten 1, 5 bzw. 15 Minuten darstellen.
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 von sysctl_loadavg
), der im Wesentlichen den aktuellen Wert von zurückgibt averunnable
.
Dies wird wiederum hier definiert :
struct loadavg averunnable =
{ {0, 0, 0}, FSCALE }; /* load average, of runnable procs */
Diese Datei definiert auch compute_averunnable
, welche den neuen gewichteten Wert von berechnet averunnable
.
Die Scheduler-Header-Datei sched.h deklariert sie als extern
und alle Scheduler-Implementierungen xnu-1699.24.8/osfmk/kern/sched_*.c
rufen sie regelmäßig über compute_averages
in sched_average.c auf .
Das Argument compute_averunnable
, ist sched_nrun
in sched_average.c
, seinen Wert von sched_run_count
in zu bekommen sched.h
.
Diese Nummer wird von den Makros geändert sched_run_incr
und sched_run_decr
ausschließlich in der Datei verwendet. Dies sched_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 :
Auf modernen UNIX-Systemen variiert die Behandlung des Einfädelns in Bezug auf Lastdurchschnitte. Einige Systeme behandeln Threads als Prozesse für die Berechnung des Lastdurchschnitts: Jeder Thread, der auf die Ausführung wartet, addiert 1 zur Last. Andere Systeme, insbesondere Systeme, die das sogenannte N: M-Threading implementieren, verwenden jedoch andere Strategien, z. B. das genaue Zählen des Prozesses zum Zwecke des Ladens (unabhängig von der Anzahl der Threads) oder das Zählen nur der Threads, die derzeit vom Benutzer verfügbar gemacht werden -thread Scheduler zum Kernel, was von der im Prozess festgelegten Parallelität abhängen kann.
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.