¿Por qué el Finder funciona con una prioridad de proceso tan baja?

13

Estoy un poco perdido por esto.
Estoy ejecutando una gran importación en apertura, y está causando que mi sistema se ralentice a un rastreo completo, básicamente lo hace inutilizable para cualquier cosa, incluso navegar por la web. Como esto parece un poco antinatural, pasé un poco de tiempo mirando a mi alrededor.

La ejecución ps -Almuestra que, aparentemente de forma predeterminada, el Dock, Findery SystemUIServertodos parecen ejecutarse con una prioridad mucho más baja que las aplicaciones de usuario. Mientras que las aplicaciones de usuario suelen tener una prioridad de 33, el Dock, Finder, etc. tienen una prioridad de 53.

El resultado final es que CUALQUIER tarea intensiva del procesador bloquea por completo la interfaz de usuario y deja el sistema inutilizable hasta que finalice.

De todos modos, el uso renice -20 -p <prid>los sube a la misma prioridad que el resto de la interfaz de usuario del usuario y da como resultado que no tenga que esperar 1-3 segundos (!) Para que la interfaz de usuario responda a algo tan simple como un clic del mouse.

Thad dijo: Tengo dos preguntas:
¿Hay alguna razón por la que no debería alterar la prioridad del hilo del buscador de esta manera?
¿Hay alguna forma de hacer que el cambio de prioridad sea persistente, por ejemplo, para que permanezca así después del reinicio?

Nombre falso
fuente
99
Por lo general, he descubierto que es la E / S del disco, no la carga de la CPU, lo que hace que mi sistema se arrastre. El buscador y las otras aplicaciones que menciona probablemente estén esperando lecturas / escrituras cuando parezcan no responder. Sin embargo, realmente no tengo una solución para esto (aparte de obtener un disco rápido como un SSD), así que voy a publicar esto como un comentario en lugar de una respuesta.
Kyle Cronin
55
Yo también lo habría pensado. Sin embargo, cambiar la prioridad de subprocesos hace afectar el comportamiento de la interfaz de usuario, que me hace pensar que o bien la prioridad de subprocesos también afecta a la manipulación de colas IO, o de hecho es la CPU limitado.
Nombre falso
1
A modo de ejemplo, con la prioridad del muelle como stock, se tarda de 5 a 10 segundos en reaccionar cuando el mouse se mueve sobre él. Con un aumento manual hasta el mismo 33 que todo lo demás, reacciona de inmediato (aunque hay un poco de agitación).
Nombre falso
3
Actualización: El comando agradable afecta tanto el manejo de la cola de CPU como de E / S: insanelymac.com/forum/lofiversion/index.php/t164156.html
Nombre falso
2
El problema no es una limitación de memoria / espacio en disco. Estoy ejecutando procesos que intencionalmente toman todos los recursos que pueden. Un programador de multitarea adecuado debería permitir que el sistema permanezca perfectamente receptivo (o al menos solo cause un impacto menor en el rendimiento) a pesar de esto, siempre que la priorización esté establecida correctamente. Sin embargo, por alguna razón insana, el aspecto más importante de la interfaz de usuario se establece con la prioridad más baja posible y, por lo tanto, todo el sistema básicamente queda inutilizable.
Nombre falso el

Respuestas:

1

No estoy seguro de que alguien que no sea el propio desarrollador de Apple pueda responder esta pregunta, los secretos internos de Finder son su dominio. Si cree que hay algunos problemas de retraso notables con la interfaz de usuario, es posible que desee enviar un informe de error a Apple al respecto.

A juzgar por el sonido de las cosas (los procesos toman intencionalmente todos los recursos), este es un caso marginal para la administración de la memoria. Todavía tengo que ver que un sistema funcione al máximo sin tener entre 10 y 20% de recursos libres, como una ayuda de amortiguación.

Por curiosidad, ¿cuáles son estos procesos que estás ejecutando?

Tim
fuente
Python, principalmente. Haciendo algunos cálculos recursivos pesados.
Nombre falso
Además, procesamiento de imágenes por lotes
nombre falso
Eso suena más como un problema de uso de RAM que un problema de CPU. He tenido algo así como que git usa toneladas de CPU sin retrasar la interfaz de usuario, pero cuando algo comienza a consumir toda la RAM, la interfaz de usuario recibe un gran golpe. ¿Cómo es su uso de RAM durante estos procesos?
Tim
1

"Estoy ejecutando una gran importación en apertura, y está causando que mi sistema se ralentice completamente"

Entonces Aperture es (probablemente) el programa que desea renice, no los demás. Los procesos que mencionó están ajustados en relación con las aplicaciones de usuario promedio, de modo que las aplicaciones de usuario obtienen mayor prioridad y responden, ya que son lo que los usuarios usan la mayor parte del tiempo.

Su caso es el menos común, donde una aplicación realiza una tarea intensiva a largo plazo y el usuario quiere hacer otra cosa al mismo tiempo. De manera predeterminada, son las aplicaciones del usuario las que tienen prioridad para que estas tareas intensivas obtengan más recursos y se completen antes.

Por cada usuario que se queja de que otras aplicaciones no responden lo suficiente, hay otro usuario que se queja de que la aplicación activa no se ejecuta lo suficientemente rápido.

Si está ejecutando una tarea larga de uso intensivo de recursos y sabe que desea que tenga menor prioridad para poder utilizar otros procesos mientras se completa la tarea, y no le importa si la tarea intensiva lleva más tiempo, debe reducir la prioridad de El proceso que ejecuta la tarea intensiva.

En cuanto a su segunda pregunta, hay varias soluciones posibles para hacer la renicemás automática. Por ejemplo, podría crear un applet de script que ejecute Aperture con una prioridad inferior y usarlo para iniciar Aperture. O puede iniciar Aperture a través de un script de shell almacenado en un archivo * .command (sin embargo, eso abrirá Terminal y ejecutará el comando en una ventana de terminal, que puede no ser lo que desea). Cada uno de estos está un poco involucrado. Si desea ejemplos, puedo ver cómo proporcionarlos más adelante.

Chris Page
fuente
Las tareas en segundo plano, por definición , deben tener una prioridad menor que las tareas en primer plano. La tarea principal más importante en todo el sistema es la GUI, que es en gran medida el proceso Finder. Es posible que pueda parchear subprocesos proceso por proceso por renicecosas, pero el problema real es la prioridad del buscador.
Nombre falso
Por ejemplo, en Windows 7, que tiene una de las GUI más receptivas, Window-Manager se ejecuta automáticamente con una prioridad de "Alta". Ahora, esto significa que el mal comportamiento de este proceso hará que el sistema se retrase, pero también significa que el mal comportamiento en otros lugares no lo hará . He tenido fallas en las aplicaciones al usar el 100% de cada núcleo de CPU, y la interfaz de usuario en Windows sigue siendo extremadamente receptiva.
Nombre falso el
1
@Fake Name: Finder no maneja ningún aspecto de la interfaz de usuario que no sea su propia ventana (carpetas e íconos de escritorio). (Es posible salir del Finder; en realidad se ha ido, y todo lo demás sigue funcionando). SystemUIServer maneja los elementos del lado derecho de la barra de menú y las superposiciones de "bisel" (volumen / brillo, etc.) solamente. La representación de ventanas y los eventos son manejados completamente por los procesos de WindowServer.
Kevin Reid
@Fake Name, como punto de aclaración: reniceopera en procesos, no en subprocesos.
Chris Page
1

Planteé una pregunta similar, hace mucho tiempo, en ServerFault, aunque no estaba tan específicamente enfocado en el Finder (aunque también encuentro que el Finder es intolerablemente lento). ¿Cómo "cambiar la forma" de forma permanente de un proceso en Mac OS X (o iOS, etc.)? No se obtuvo mucha información allí, en cuanto a una buena manera de hacer esto ... o en cuanto a por qué es así ...

Todavía pienso en esto a menudo, y en realidad hay algunas maneras de reflexionar sobre los "conceptos básicos" si te atreves. Como se mencionó anteriormente, puede hacer varios esquemas de shell ... pero un buen lugar para tales fechorías son las diversas /etc/rc*rutinas de arranque ... que ya están allí ... configurando todo tipo de parámetros de sistema arbitrarios (definidos por Apple). edítelos o busque cómo agregar sus propias rutinas al proceso de arranque.

Además, si realmente quieres hacer explotar tu cabeza ...

sudo sysctl list y es clave para la caja de pandora, también conocida como /etc/sysctl.conf

alex grey
fuente