Was genau macht kernel_task?

30

Ich möchte nur wissen, wofür kernel_task verantwortlich ist. Was ist ein akzeptabler maximaler RAM- und CPU-Verbrauch dafür?

Timothy Müller-Harder
quelle
Am besten messen Sie die RAM- und CPU-Auslastung nach einem sicheren Start, um zu ermitteln, mit welcher Geschwindigkeit Ihr System im Leerlauf läuft.
bmike
1
Laut Tyler ist es eine "Darstellung des Mikrokerns selbst". Wenn Sie eine spezifischere Antwort wünschen, fährt er fort: "Es scheint sich um den grundlegenden (virtuellen /) Speichermanager für Mac OS X zu handeln, der über Mach hinausgeht." Es wird Ihnen schwer fallen, eine endgültige Antwort zu finden, es sei denn, Sie sprechen mit einem hochrangigen Apple-Techniker. Die Öffentlichkeit hat diesen Prozess nur zusammengefügt. Quelle: bleepsoft.com/tyler/index.php?itemid=43

Antworten:

28

Die Kernelaufgabe ist etwas Besonderes, da es sich um ein gesamtes Betriebssystem / Mikrokernel handelt, das auf Mach 3.0 basiert . Es abstrahiert den Großteil der Kernhardware, des Timings, des Message-Passings und des Memory-Handlings.

Die meisten Benutzer bemerken im Aktivitätsmonitor, dass kernel_taskdie gesamte CPU-Zeit für die Eingabe / Ausgabe (I / O) von Verarbeitungsverzögerungen und -berechnungen sowie für die Planung des Overheads von Prozessen und Threads angesammelt wird. In ähnlicher Weise werden alle Speicherzuordnungen akkumuliert, die sich nicht im Benutzerbereich befinden. Auf den Macs von 2014 und neueren Versionen besteht diese Aufgabe darin, die CPU zu drosseln. Wenn die Temperaturen im Prozessor zu hoch sind, wird der Kernel-Aufgabe "Keine Arbeit" zugewiesen und es wird eine hohe CPU-Auslastung angezeigt, damit der Prozessor im Leerlauf läuft und der Computer nicht überhitzt. Dies macht sich vor allem bei tragbaren Geräten bemerkbar - insbesondere beim MacBook ohne Lüfter oder Lüfter zum Kühlen des Prozessors. Apple warnt potenzielle Kernel-Programmierer davor unter "Warum sollten Sie sich vom Programmieren im Kernel fernhalten?" Wenn Sie die Kühlung deaktivieren, wird die Hardware dauerhaft irreparabel beschädigt.

Zusammenfassend ist die Kernel-Programmierung eine immense Verantwortung. Sie müssen äußerst vorsichtig sein, um sicherzustellen, dass Ihr Code nicht zum Absturz des Systems führt, keinen unbefugten Benutzerzugriff auf die Dateien oder den Speicher eines anderen Benutzers gewährt, keine Remote- oder lokalen Root-Exploits einführt und keine versehentlichen Datenverluste oder -beschädigungen verursacht .

Wenn Sie es sich nach einem Neustart ansehen, werden Sie feststellen, dass es mit minimalem RAM- und CPU-Bedarf startet und stattdessen nur wächst, wenn andere Programme ausgeführt werden und die Systemdienste benötigen.

Deaktivieren Sie nicht benötigte Anschlüsse (WLAN, Bluetooth usw.) sowie nicht verwendete / inaktive Programme, um das Programm zu vereinfachen. Wenn sich die Situation nicht beruhigt, sollten Sie einen Neustart in Betracht ziehen, um sicherzustellen, dass keine Aufgabe hängen bleibt oder Speicherplatz verloren geht. Wenn Sie Programme haben, die echte Arbeit leisten, wird der Kernel sowohl Speicher- als auch Prozessorzeit belegen. Beobachten Sie beim Starten, welche anderen Programme dieses Verhalten verursachen. Es ist selten ein Problem mit dem Kernel - auch bei schlecht funktionierenden Programmen - das nicht durch Abmelden und erneutes Anmelden gelöst werden kann. Die kernel_task bereinigt gut und achtet im Allgemeinen darauf, nur die Ressourcen zu verwenden, die von der Arbeitslast benötigt werden.

bmike
quelle
Vielen Dank! Würden Sie sagen, dass 700-750 MB RAM dafür akzeptabel sind? Ich habe genug frei, aber ich würde gerne wissen, ob ich sowieso irgendetwas tun sollte.
Timothy Mueller-Harder
Nicht unbedingt. Auf meinem Haupt-MacBook Pro kann es manchmal auf 2 GB ansteigen, wenn ich wirklich viele beteiligte Programme ausführe. Selbst dann muss ich nicht oft neu starten, sondern nur einmal im Monat oder so. (2.66 Core 2 Duo / 8 GB RAM)
bmike
14

Mac OS X-Interna: Ein Systemansatz - Amit Singh - Google Books :

Der Kernel verwendet die Task- und Thread-Abstraktionen, um seine Funktionalität in verschiedene Ausführungsabläufe zu unterteilen. Der Kernel verwendet eine einzelne Task - die Kernel-Task - mit mehreren Threads, die Kernel-Vorgänge ausführen, z. B. Zeitplanung, Thread-Ernte, Callout-Management, Paging und Unix-Ausnahmebehandlung. Daher ist xnu ein monolithischer Kernel, der deutlich unterschiedliche Komponenten wie Mach, BSD und das I / O-Kit enthält, die alle als Gruppen von Threads in einer einzigen Task im selben Adressraum ausgeführt werden.

http://lists.apple.com/archives/darwin-kernel/2010/Sep/msg00014.html :

Die Kernel-Aufgabe ist keine echte Aufgabe. Es stellt den Kernel dar, der den Kern des Betriebssystems darstellt. Der Großteil dessen, was geschieht, erfolgt auf direkte Anforderung einer Anwendung. Jedes Mal, wenn Sie einen großen Speicherblock zuweisen, eine Datei öffnen oder schließen, eine Datei lesen oder schreiben, Daten über das Netzwerk abrufen, einen neuen Prozess oder Thread erstellen usw., führt Ihre Anwendung einen Systemaufruf aus. Diese Aufrufe bewirken, dass der Kernel für Ihre Anwendung funktioniert. Ein Großteil dieser Arbeit wird dem Kernel in Rechnung gestellt, aber tatsächlich wird sie von Ihrer Anwendung erledigt, wenn auch indirekt.

Lri
quelle
1

Ein praktischer Grund, warum der Kernel möglicherweise überlastet ist, ist, dass auf Ihrem System nicht genügend Arbeitsspeicher zur Verfügung steht und es überlastet. Überprüfen Sie das Speicherdruckdiagramm auf der Registerkarte Speicher des Aktivitätsmonitors, um festzustellen , ob es gelb oder rot ist.

In diesem Fall können Sie Prozesse nach Speicher sortieren und einige davon beenden, um den Druck zu verringern. (zB einige Google Chrome Helper-Prozesse beenden)

Nicolas Kokkalis
quelle