Por que o Finder é executado com uma prioridade de processo tão baixa?

13

Estou um pouco perdido com isso.
Estou executando uma grande importação de abertura e isso está fazendo com que meu sistema fique lento para um rastreamento completo, basicamente tornando-o inutilizável para qualquer coisa, até mesmo navegando na web. Como isso parece um pouco natural, passei um pouco de tempo olhando em volta.

A execução ps -Almostra que, aparentemente, por padrão, o Dock, Findere SystemUIServertodos parecem ser executados em uma prioridade muito inferior aos aplicativos da área de usuário. Enquanto os aplicativos do usuário normalmente têm prioridade 33, o Dock, o Finder etc. têm 53.

O resultado final é QUALQUER tarefa intensiva do processador que atrapalha completamente a interface do usuário e torna o sistema inutilizável até sua conclusão.

De qualquer forma, o uso renice -20 -p <prid>deles aumenta a mesma prioridade que o restante da interface do usuário e resulta em não ter que esperar 1 a 3 segundos (!) Para que a interface do usuário responda a algo tão simples quanto um clique do mouse.

Thad disse: Eu tenho duas perguntas:
existe algum motivo para eu não estar alterando a prioridade do encadeamento desse localizador?
Existe alguma maneira de tornar a alteração de prioridade persistente, por exemplo, para que continue assim após a reinicialização.

Nome falso
fonte
9
Normalmente, descobri que é a E / S do disco, não a carga da CPU, que faz com que meu sistema rastreie. O Finder e os outros aplicativos mencionados provavelmente estão aguardando leituras / gravações quando parecem não estar respondendo. Eu realmente não tenho uma solução para isso (além de obter um disco rápido como um SSD), então vou postar isso como um comentário em vez de uma resposta.
precisa
5
Eu teria pensado assim também. No entanto, alterar a prioridade de thread faz afetar o comportamento da interface do usuário, o que me faz pensar que tanto a prioridade thread também afetam o tratamento fila IO, ou é de facto CPU limitado.
Fake Name
1
Como exemplo, com a prioridade do dock deixada como material, leva de 5 a 10 segundos para reagir ao movimento do mouse sobre ele. Com ele manualmente aumentado para os mesmos 33 que tudo o resto, ele reage imediatamente (embora exista um pouco de irregularidade).
Fake Name
3
Atualização: O comando nice afeta o processamento da fila da CPU e da E / S: insanelymac.com/forum/lofiversion/index.php/t164156.html
Fake Name
2
O problema não é uma limitação de memória / espaço em disco. Estou executando processos que intencionalmente tomar todos os recursos que podem. Um agendador de multitarefa adequado deve permitir que o sistema permaneça perfeitamente responsivo (ou pelo menos cause apenas um pequeno impacto no desempenho), apesar disso, desde que a priorização esteja correta. No entanto, por algum motivo insano, o aspecto mais importante da interface do usuário é definido com a menor prioridade possível e, portanto, todo o sistema é basicamente inutilizado.
Nome Falsificado

Respostas:

1

Não sei se alguém que não seja o desenvolvedor da Apple seria capaz de responder a essa pergunta. Os segredos internos do Finder são seu domínio. Se você acha que existem alguns problemas visíveis de atraso na interface do usuário, envie um relatório de bug à Apple sobre isso.

A julgar pelo som das coisas (processos que ocupam intencionalmente todos os recursos), esse é um caso de ponta para o gerenciamento de memória. Ainda estou para ver um sistema com o melhor desempenho, sem algo em torno de 10 a 20% livre de recursos, como uma ajuda de buffer.

Apenas curioso, quais são esses processos que você está executando?

Tim
fonte
Python, principalmente. Fazendo alguma computação recursiva pesada.
Fake Name
Além disso, processamento de imagens em lote
Fake Name
Isso parece mais um problema de uso de RAM do que um problema de CPU. Eu tive algo como o git usar toneladas de CPU sem atrasar a interface do usuário, mas quando algo começa a consumir toda a RAM, a interface do usuário é atingida. Como é o seu uso de RAM durante esses processos?
Tim
1

"Estou executando uma grande importação de abertura e está fazendo com que meu sistema fique lento para um rastreamento completo"

Então o Aperture é (provavelmente) o programa que você deseja renice, não os outros. Os processos que você mencionou são ajustados em relação aos aplicativos comuns do usuário, para que os aplicativos do usuário tenham maior prioridade e permaneçam responsivos, pois são o que os usuários usam na maioria das vezes.

O seu caso é o menos comum, em que um aplicativo está executando uma tarefa intensiva e de longo prazo e o usuário deseja fazer outra coisa ao mesmo tempo. Por padrão, são os aplicativos do usuário que têm prioridade, para que essas tarefas intensivas obtenham mais recursos e sejam concluídas mais rapidamente.

Para cada usuário que reclama que outros aplicativos não estão respondendo o suficiente, há outro usuário reclamando que o aplicativo ativo não está sendo executado rápido o suficiente.

Se você estiver executando uma tarefa longa e que consome muitos recursos e sabe que deseja que ela tenha prioridade mais baixa para poder usar outros processos enquanto a tarefa é concluída - e não se importa se a tarefa intensiva demorar mais - você deve diminuir a prioridade de o processo executando a tarefa intensiva.

Quanto à sua segunda pergunta, existem várias soluções possíveis para tornar a renicemais automática. Por exemplo, você pode criar um applet de script que execute o Aperture com uma prioridade mais baixa e usá-lo para iniciar o Aperture. Ou você pode iniciar o Aperture através de um script de shell armazenado em um arquivo de comando *. (No entanto, isso abrirá o Terminal e executará o comando em uma janela de terminal, que pode não ser o que você deseja). Cada um destes está um pouco envolvido. Se você quiser exemplos, posso ver como fornecê-los mais tarde.

Chris Page
fonte
As tarefas em segundo plano, por definição , devem ter uma prioridade mais baixa que as tarefas em primeiro plano. A tarefa mais importante em primeiro plano em todo o sistema é a GUI, que é em grande parte o processo do Finder. Posso consertar os threads processo por processo renice, mas o problema real é a prioridade dos localizadores.
Fake Name
Por exemplo, no Windows 7, que possui uma das GUIs mais responsivas, o Gerenciador de Janelas é executado automaticamente com a prioridade "Alto". Agora, isso significa que o mau comportamento desse processo fará com que o sistema fique lento, mas também significa que o mau comportamento em outros lugares não . Os aplicativos falharam ao usar 100% de todos os núcleos da CPU, e a interface do usuário no Windows ainda permanece extremamente responsiva.
Fake Name
1
@ Nome falso: O Finder não lida com nenhum aspecto da interface do usuário que não seja suas próprias janelas (pastas e ícones da área de trabalho). (É possível sair do Finder; ele realmente desapareceu e tudo o mais ainda funciona.) O SystemUIServer lida com os itens do lado direito da barra de menus e as sobreposições do "painel" (volume / brilho, etc.) apenas. A renderização e os eventos da janela são gerenciados inteiramente pelos processos do WindowServer.
Kevin Reid
@Fake Name, como um ponto de esclarecimento: reniceopera em processos, não em threads.
Chris Page
1

Fiz uma pergunta semelhante - há muito tempo, no ServerFault - embora não tão especificamente focada no Finder (embora eu ache o Finder intoleravelmente lento também). Como "renovar" permanentemente um processo no Mac OS X (ou iOS, etc)? Não foram encontradas muitas informações aqui - sobre uma boa maneira de fazer isso ... ou sobre o porquê disso.

Eu ainda penso sobre isso com frequência, e na verdade existem algumas maneiras de bagunçar o "básico", se você ousar. Como mencionado anteriormente, você pode executar vários truques de shell. Mas um bom lugar para tais delitos são as várias /etc/rc*rotinas de inicialização .. que já estão lá dentro .. configurando todos os tipos de parâmetros arbitrários (definidos pela maçã) para você. edite-os ou consulte como adicionar suas próprias rotinas ao processo de inicialização.

Além disso, se você realmente quer fazer sua cabeça explodir ..

sudo sysctl list e é a chave para a caixa de pandora, aka /etc/sysctl.conf

alex grey
fonte