Warum wird der Finder mit einer so niedrigen Prozesspriorität ausgeführt?

13

Da bin ich ein bisschen ratlos.
Ich führe einen großen Import in die Apertur aus, und mein System wird dadurch langsamer, bis es vollständig gecrawlt ist. Dies macht es praktisch unbrauchbar für alles, auch für das Surfen im Internet. Da dies etwas unnatürlich erscheint, habe ich mich ein wenig umgesehen.

Laufen ps -Alzeigt , dass offenbar standardmäßig das Dock, Finderund SystemUIServeralle zu laufen scheinen eine Priorität weit dann Userland - Anwendungen senken. Während Benutzeranwendungen normalerweise eine Priorität von 33 haben, haben Dock, Finder usw. eine Priorität von 53.

Das Endergebnis ist, dass JEDE prozessorintensive Aufgabe die Benutzeroberfläche vollständig überlastet und das System unbrauchbar macht, bis es fertig ist.

Wenn Sie renice -20 -p <prid>Bumps mit derselben Priorität wie die übrige Benutzeroberfläche verwenden, müssen Sie nicht 1-3 Sekunden (!) Warten, bis die Benutzeroberfläche auf einen einfachen Mausklick reagiert.

Thad sagte, ich habe zwei Fragen:
Gibt es einen Grund, warum ich die Thread-Priorität des Finders nicht so ändern sollte?
Gibt es eine Möglichkeit, die Prioritätsänderung dauerhaft zu machen, z. B. bleibt dies auch nach dem Neustart der Fall.

Falscher Name
quelle
9
Ich habe normalerweise festgestellt, dass es die Festplatten-E / A ist, nicht die CPU-Last, die mein System zum Crawlen bringt. Finder und die anderen Anwendungen, die Sie erwähnen, warten wahrscheinlich auf Lese- / Schreibvorgänge, wenn sie nicht zu reagieren scheinen. Ich habe jedoch keine Lösung dafür (außer eine schnelle Festplatte wie eine SSD zu bekommen), daher werde ich dies als Kommentar anstatt als Antwort posten.
Kyle Cronin
5
Das hätte ich mir auch gedacht. Das Ändern der Thread-Priorität wirkt sich jedoch auf das Verhalten der Benutzeroberfläche aus, sodass ich denke, dass sich die Thread-Priorität auch auf die Behandlung der E / A-Warteschlange auswirkt oder dass die CPU begrenzt ist.
Fake Name
1
Wenn beispielsweise die Dock-Priorität als Vorrat belassen wird, dauert es 5 bis 10 Sekunden, bis die Maus darüber bewegt wird. Mit der manuellen Anhebung auf 33 reagiert es sofort (obwohl es ein bisschen abgehackt ist).
Fake Name
3
Update: Der nette Befehl beeinflusst sowohl die CPU und IO Warteschlange Handhabung: insanelymac.com/forum/lofiversion/index.php/t164156.html
Fake Name
2
Das Problem ist keine Speicher- / Speicherplatzbeschränkung. Ich Prozesse laufen lasse , die absichtlich nehmen alle Ressourcen , die sie können. Eine richtige mutitasking Scheduler sollte das System lassen vollkommen ansprechbar bleiben (oder zumindest nur Ursache einer geringfügigen Leistungseinbußen) trotz dieser, sofern die Priorisierung eingestellt ist richtig. Aus irgendeinem verrückten Grund wird jedoch der wichtigste Aspekt der Benutzeroberfläche auf die niedrigstmögliche Priorität eingestellt, und das gesamte System wird daher im Grunde unbrauchbar.
Fake Name

Antworten:

1

Ich bin mir nicht sicher, ob jemand anderes als Apples Entwickler in der Lage wäre, diese Frage zu beantworten. Finders innere Geheimnisse sind ihre Domäne. Wenn Sie der Meinung sind, dass es auffällige Verzögerungsprobleme mit der Benutzeroberfläche gibt, können Sie Apple einen Fehlerbericht darüber senden.

Nach dem Klang der Dinge (Prozesse, die absichtlich alle Ressourcen belegen) zu urteilen, ist dies ein Randfall für die Speicherverwaltung. Ich habe noch nicht gesehen, wie ein System seine beste Leistung erbringt, ohne dass irgendwo 10-20% Ressourcen frei sind, als Pufferungshilfe.

Nur neugierig, was sind diese Prozesse, die Sie ausführen?

Tim
quelle
Vor allem Python. Starke rekursive Berechnungen.
Fake Name
Auch Batch-Bildverarbeitung
Fake Name
Das klingt eher nach einem RAM-Nutzungsproblem als nach einem CPU-Problem. Ich hatte so etwas wie einen Git, der Tonnen von CPU verbrauchte, ohne die Benutzeroberfläche zu verzögern, aber wenn etwas anfing, den gesamten Arbeitsspeicher zu verschlingen, dann musste die Benutzeroberfläche einen großen Schlag hinnehmen. Wie ist Ihre RAM-Auslastung während dieser Prozesse?
Tim
1

"Ich führe einen großen Import in die Apertur aus, und dadurch verlangsamt sich mein System auf ein vollständiges Crawling."

Dann ist Aperture (wahrscheinlich) das Programm, das Sie möchten renice, nicht die anderen. Die von Ihnen erwähnten Prozesse sind im Verhältnis zu durchschnittlichen Benutzeranwendungen optimiert, sodass Benutzeranwendungen eine höhere Priorität erhalten und reaktionsfähig bleiben, da sie von den Benutzern die meiste Zeit verwendet werden.

Ihr Fall ist der seltenere, bei dem eine Anwendung eine langfristige, intensive Aufgabe ausführt und der Benutzer gleichzeitig etwas anderes tun möchte. Standardmäßig erhalten die Anwendungen des Benutzers Priorität, damit diese intensiven Aufgaben mehr Ressourcen erhalten und schneller ausgeführt werden können.

Für jeden Benutzer, der sich darüber beschwert, dass andere Anwendungen nicht schnell genug reagieren, gibt es einen anderen Benutzer, der sich darüber beschwert, dass die aktive Anwendung nicht schnell genug ausgeführt wird.

Wenn Sie eine lange, ressourcenintensive Aufgabe ausführen und wissen, dass sie eine niedrigere Priorität haben soll, damit Sie während der Ausführung der Aufgabe andere Prozesse verwenden können - und es macht Ihnen nichts aus, wenn die intensive Aufgabe länger dauert -, sollten Sie die Priorität von verringern der Prozess, der die intensive Aufgabe ausführt.

Für Ihre zweite Frage gibt es mehrere mögliche Lösungen, um die reniceAutomatisierung zu verbessern. Sie können beispielsweise ein Skript-Applet erstellen, das Aperture mit einer niedrigeren Priorität ausführt und zum Starten von Aperture verwendet. Sie können Aperture auch über ein Shell-Skript starten, das in einer * .command-Datei gespeichert ist. Dadurch wird jedoch Terminal geöffnet und der Befehl in einem Terminalfenster ausgeführt, das möglicherweise nicht Ihren Vorstellungen entspricht. Jedes von diesen ist ein wenig beteiligt. Wenn Sie Beispiele wünschen, kann ich diese später zur Verfügung stellen.

Chris Page
quelle
Hintergrundaufgaben sollten per Definition eine niedrigere Priorität als Vordergrundaufgaben haben. Die wichtigste Vordergrundaufgabe im gesamten System ist die grafische Benutzeroberfläche, bei der es sich im Wesentlichen um den Finder-Prozess handelt. Ich bin möglicherweise in der Lage, Threads von Prozess zu Prozess zu patchen renice, aber das eigentliche Problem ist die Priorität des Finders.
Fake Name
Beispielsweise wird in Windows 7, das über eine der am schnellsten reagierenden GUIs verfügt, der Window-Manager automatisch mit der Priorität "Hoch" ausgeführt. Dies bedeutet, dass ein Fehlverhalten dieses Prozesses zu einer Verzögerung des Systems führt, dies bedeutet jedoch auch, dass ein Fehlverhalten an anderer Stelle nicht der Fall ist . Ich habe Anwendungen abstürzen lassen, um 100% jedes CPU-Kerns zu nutzen, und die Benutzeroberfläche unter Windows reagiert immer noch extrem schnell.
Fake Name
1
@Fake Name: Der Finder hat nicht behandeln jeden Aspekt der UI außer den eigenen Fenster (Ordner und Desktop - Icons). (Es ist möglich, den Finder zu beenden; er ist tatsächlich verschwunden, und alles andere funktioniert noch.) Der SystemUIServer verarbeitet nur die Elemente auf der rechten Seite der Menüleiste und die Einfassungen (Lautstärke / Helligkeit usw.). Fenster-Rendering und Ereignisse werden vollständig von den WindowServer-Prozessen verarbeitet.
Kevin Reid
@Fake Name, zur Verdeutlichung: Wirkt reniceauf Prozesse, nicht auf Threads.
Chris Seite
1

Ich habe vor langer Zeit eine ähnliche Frage zu ServerFault gestellt, obwohl ich mich nicht so sehr auf den Finder konzentriere (obwohl ich finde, dass der Finder auch unerträglich langsam ist). Wie kann ich einen Prozess unter Mac OS X (oder iOS usw.) dauerhaft „erneuern“? Es wurden dort nicht viele Informationen gesammelt - was eine gute Möglichkeit ist, dies zu tun ... oder warum es so ist ...

Ich denke immer noch oft darüber nach, und es gibt tatsächlich ein paar Möglichkeiten, mit den "Grundlagen" umzugehen, wenn Sie sich trauen. Wie bereits erwähnt, können Sie verschiedene Shell-Schikanen ausführen. Ein guter Ort für solche Missetaten sind jedoch die verschiedenen /etc/rc*Boot-Routinen, die bereits vorhanden sind. Bearbeiten Sie diese oder lesen Sie nach, wie Sie dem Startvorgang eigene Routinen hinzufügen können.

auch, wenn Sie wirklich Ihren Kopf explodieren lassen wollen ..

sudo sysctl list und es ist der Schlüssel zu Pandoras Box, aka /etc/sysctl.conf

alex grau
quelle