Perché il Finder funziona con una priorità di processo così bassa?


13

Sono in perdita per questo.
Sto eseguendo un'importante importazione in apertura e sta causando il rallentamento del mio sistema fino a una scansione completa, che lo rende praticamente inutilizzabile per qualsiasi cosa, anche navigando sul web. Dato che questo sembra un po 'innaturale, ho trascorso un po' di tempo a guardarmi intorno.

L'esecuzione ps -Almostra che, apparentemente per impostazione predefinita, il Dock, Findere SystemUIServertutti sembrano funzionare con una priorità molto inferiore rispetto alle applicazioni di terra dell'utente. Mentre le applicazioni utente hanno in genere una priorità di 33, Dock, Finder, ecc. Hanno una priorità di 53.

Il risultato finale è QUALSIASI task ad alta intensità di processore che blocca completamente l'interfaccia utente e rende il sistema inutilizzabile fino al termine.

Ad ogni modo, l'utilizzo renice -20 -p <prid>li porta alla stessa priorità del resto dell'interfaccia utente della userland e si traduce in non dover attendere 1-3 secondi (!) Affinché l'interfaccia utente risponda a qualcosa di semplice come un clic del mouse.

Thad ha detto, ho due domande:
c'è qualche motivo per cui non dovrei alterare la priorità della discussione del cercatore in questo modo?
Esiste un modo per rendere persistente la modifica della priorità, ad esempio in modo che rimanga tale dopo il riavvio.


9
In genere ho scoperto che è l'I / O del disco, non il carico della CPU, a causare la scansione del mio sistema. Il Finder e le altre applicazioni menzionate probabilmente stanno aspettando letture / scritture quando sembrano non rispondere. Non ho davvero una soluzione a questo (a parte ottenere un disco veloce come un SSD), quindi, pubblicherò questo come un commento invece che una risposta.
Kyle Cronin,

5
Lo avrei pensato anch'io. Tuttavia, la modifica della priorità del thread non influenzare il comportamento dell'interfaccia utente, che mi fa pensare che sia la priorità del thread colpisce anche la gestione della coda IO, o è davvero CPU limitato.
Nome falso

1
Ad esempio, con la priorità del dock lasciata come stock, sono necessari 5-10 secondi per reagire al passaggio del mouse su di esso. Con un aumento manuale dello stesso 33 di tutto il resto, reagisce immediatamente (anche se c'è un po 'di increspatura).
Nome falso

3
Aggiornamento: il simpatico comando ha effetto sia sulla gestione della coda della CPU che su quella IO: insanelymac.com/forum/lofiversion/index.php/t164156.html
Nome falso

2
Il problema non è un limite di memoria / spazio su disco. Sto eseguendo processi che prendono intenzionalmente tutte le risorse che possono. Un programmatore di mutitasking adeguato dovrebbe consentire al sistema di rimanere perfettamente reattivo (o almeno causare solo un lieve calo delle prestazioni) nonostante ciò, a condizione che la definizione delle priorità sia corretta. Tuttavia, per qualche motivo folle, l' aspetto più importante dell'interfaccia utente è impostato sulla priorità più bassa possibile, e quindi l'intero sistema è sostanzialmente reso inutilizzabile.
Nome falso

Risposte:


1

Non sono sicuro che nessuno a parte gli sviluppatori di Apple sarebbe in grado di rispondere a questa domanda, i segreti interni di Finder sono il loro dominio. Se pensi che ci siano alcuni notevoli problemi di ritardo con l'interfaccia utente, potresti voler inviare una segnalazione di bug ad Apple al riguardo.

A giudicare dal suono delle cose (i processi occupano intenzionalmente tutte le risorse) questo è un po 'un caso limite per la gestione della memoria. Devo ancora vedere un sistema funzionare al meglio senza un 10-20% di risorse gratuite, come aiuto per il buffering.

Solo curioso, quali sono questi processi che stai eseguendo?


Python, principalmente. Effettuare alcuni calcoli ricorsivi pesanti.
Nome falso

Inoltre, l'elaborazione di immagini batch
Nome falso

Sembra più un problema di utilizzo della RAM che un problema della CPU. Ho avuto qualcosa come Git che utilizza tonnellate di CPU senza rallentare l'interfaccia utente, ma quando qualcosa inizia a consumare tutta la RAM, l'interfaccia utente subisce un duro colpo. Com'è il tuo utilizzo della RAM durante questi processi?
Tim

1

"Sto eseguendo un'importante importazione in apertura e sta causando il rallentamento del mio sistema fino a una scansione completa"

Quindi Aperture è (probabilmente) il programma che vuoi renice, non gli altri. I processi che hai citato sono ottimizzati rispetto alle applicazioni degli utenti medi, in modo che le applicazioni degli utenti abbiano una priorità più elevata e rimangano reattive, poiché sono ciò che gli utenti utilizzano la maggior parte del tempo.

Il tuo caso è quello meno comune, in cui un'applicazione sta eseguendo un'attività intensiva a lungo termine e l'utente vuole fare qualcos'altro allo stesso tempo. Per impostazione predefinita, sono le applicazioni dell'utente che hanno la priorità in modo che queste attività intense ottengano più risorse e vengano completate prima.

Per ogni utente che si lamenta che altre applicazioni non rispondono abbastanza, c'è un altro utente che si lamenta che l'applicazione attiva non funziona abbastanza velocemente.

Se stai eseguendo un'attività lunga e ad uso intensivo di risorse e sai che vuoi che abbia una priorità più bassa in modo da poter usare altri processi mentre l'attività è completata - e non ti dispiace se l'attività intensiva richiede più tempo - dovresti abbassare la priorità di il processo che esegue l'attività intensiva.

Per quanto riguarda la tua seconda domanda, ci sono diverse possibili soluzioni per rendere il renicepiù automatico. Ad esempio, è possibile creare un'applet di script che esegue Aperture con una priorità inferiore e utilizzarla per avviare Aperture. Oppure potresti avviare Aperture tramite uno script della shell memorizzato in un file * .command (tuttavia, questo aprirà Terminal ed eseguirà il comando in una finestra di terminale, che potrebbe non essere quella desiderata). Ognuno di questi è un po 'coinvolto. Se desideri esempi, posso vedere come fornirli in seguito.


Le attività in background, per definizione , dovrebbero avere una priorità inferiore rispetto alle attività in primo piano. L'attività più importante in primo piano nell'intero sistema è la GUI, che è in gran parte il processo di ricerca. Potrei essere in grado di patchare i thread processo per processo renicenelle cose, ma il vero problema è la priorità dei cercatori.
Nome falso

Ad esempio, in Windows 7, che ha una delle GUI più reattive in circolazione, Window-Manager funziona automaticamente con una priorità "Alta". Ora, ciò significa che un comportamento scorretto di questo processo causerà un ritardo del sistema, ma significa anche che un comportamento errato altrove non lo farà . Ho avuto un crash delle applicazioni nell'uso del 100% di ogni core della CPU e l'interfaccia utente su Windows rimane ancora estremamente reattiva.
Nome falso

1
@ Nome falso: il Finder non gestisce alcun aspetto dell'interfaccia utente diverso dalle proprie finestre (cartelle e icone del desktop). (È possibile chiudere il Finder; in realtà è sparito e tutto il resto funziona ancora.) SystemUIServer gestisce solo gli elementi del lato destro della barra dei menu e le sovrapposizioni della "cornice" (volume / luminosità, ecc.). Il rendering e gli eventi delle finestre sono gestiti interamente dai processi WindowServer.
Kevin Reid,

@ Nome falso, come punto di chiarimento: reniceopera sui processi, non sui thread.
Chris Page

1

Ho posto una domanda simile - molto tempo fa, su ServerFault - anche se non così specificamente focalizzato sul Finder (anche se trovo che il Finder sia anche intollerabilmente lento). Come "rinominare" permanentemente un processo su Mac OS X (o iOS, ecc.)? Lì non sono state raccolte molte informazioni - su un buon modo per farlo ... o sul perché sia ​​così ..

Ci penso ancora spesso, e in realtà ci sono alcuni modi per confondersi con le "basi" se ne hai il coraggio. Come accennato in precedenza, puoi fare varie chicanery di shell .. ma un buon posto per tali misfatti sono le varie /etc/rc*routine di avvio .. che sono già lì dentro .. che impostano tutti i tipi di parametri di sistema arbitrari (definiti da Apple) per te. modificarli o cercare come aggiungere le proprie routine al processo di avvio.

inoltre, se vuoi davvero far esplodere la testa ..

sudo sysctl list ed è la chiave della scatola di Pandora, alias /etc/sysctl.conf

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.