Como alterar a prioridade de E / S de um processo ou thread no Win7?

32

O Process Explorer pode mostrar a prioridade efetiva de E / S de um determinado encadeamento, mas não alterá-lo. Como o suporte à prioridade de E / S é um recurso relativamente novo, a maioria dos programas não define suas próprias prioridades de E / S. Parece que, por padrão, a prioridade de E / S é derivada da prioridade do encadeamento (em vez da prioridade do processo), que o Process Explorer também não pode modificar.

Existem outras ferramentas que podem me ajudar a alterar a prioridade de E / S de um determinado segmento / todos os segmentos de um determinado processo?

RomanSt
fonte
Existe quase a mesma pergunta no Stack Overflow: stackoverflow.com/questions/301290/…
Mehper C. Palavuzlar
3
@ [Mehper C. Palavuzlar] é verdade, mas não é para o software que desenvolvo - estou procurando uma ferramenta pronta para fazer isso em softwares de terceiros.
RomanSt

Respostas:

11

Ferramenta pronta

Uma ferramenta de terceiros para definir prioridades de E / S do processo, por ação manual do usuário ou automação e persistência, seria o Process Lasso . Ele pode definir quase qualquer configuração de processo e fazê-lo persistentemente ou por regras (por exemplo, quando isso acontece, altere a prioridade de E / S).

Resposta programática

A resposta é uma simples chamada de API para uma API nativa do NT, NTSetInformationProcess . É definida como a classe 'IoPriority' no DDK de 2008. No NT6, apenas dois níveis são suportados: Muito Baixo (segundo plano) e Normal . Tecnicamente, existem 5 níveis definidos - Crítico, Alto, Normal, Baixo e Muito Baixo. O nível Crítico é reservado para operações de paginação. Não há dados sobre os outros.

No entanto, a maneira correta de usar a prioridade I / O é apenas para iniciar um 'modo de fundo' através de uma chamada para a API do Windows SetProcessPriorityClass , fornecendo PROCESSS_MODE_BACKGROUND_BEGIN. Isso fará com que ele use a prioridade de E / S muito baixa (em segundo plano), junto com uma classe de prioridade da CPU IDLE. Quando terminar, reverta via PROCESS_MODE_BACKGROUND_END.

A API SetThreadPriority também permitirá esse mesmo modo de segundo plano para threads específicos. Aqui você forneceria THREAD_MODE_BACKGROUND_BEGIN / END.

dyasta
fonte
Eu não gosto de programação do Windows e de coisas no nível do sistema operacional, mas já ouvi falar em aumentar a prioridade de um thread, até THREAD_PRIORITY_TIME_CRITICAL é possível com seu programa ou qualquer outro programa? ou ainda é apenas a prioridade do IO que pode ser ajustada e não a prioridade da CPU na thread? Eu acho que mudar a prioridade de IO não fará muita diferença no uso da CPU, certo?
barlop
Sim. Ambos podem ser definidos e persistir. Muitas outras coisas também podem ser definidas ou alteradas dinamicamente com base em regras (por exemplo, afinidade da CPU). A prioridade de E / S é diferente da prioridade da CPU, certo.
perfil completo de Dyasta
Isso não é "uma ferramenta pronta para fazer isso em software de terceiros".
Cees Timmerman
Desculpe, acho que a pergunta pode ter sido editada, pois estava respondendo claramente de um lado programático (não editado). O Process Lasso é uma 'ferramenta pronta para fazer isso em software de terceiros'. Veja bitsum.com
dyasta
23

Eu desenvolvi isso depois de ver que ninguém se importava com isso: https://sourceforge.net/projects/iopriority/ (código aberto)

Este programa pode definir a prioridade de E / S de um processo, e todos os encadeamentos são afetados por ele imediatamente. É muito fácil modificá-lo para trabalhar com threads em vez de processos.

Wye
fonte
11
Acabei de perceber que você não permite alterar um processo para uma alta prioridade no Server 2012R2.
jftuga
14

ProcessHacker é uma ferramenta GUI que pode alterar a prioridade de E / S de um processo arbitrário.

RomanSt
fonte
Por que parece algo que Russinovich fez?
Daniel Mošmondor
11
@ DanielMošmondor Talvez tenha sido inspirado pelo ProcExp e suas limitações? Eu, pessoalmente, ligado porque Procexp mostrou o uso da CPU completamente errado no meu laptop após a versão 14.
RomanSt
11
Além disso, o ProcExp também foi capaz de editar meu comp, etc. É gratuito?
Daniel Mošmondor
@ DanielMošmondor Sim, além disso, parece realmente fazer mais do que o ProcExp em todos os aspectos. Interface do usuário ligeiramente diferente, mas muito capaz de fato.
RomanSt
1

Sou parcial de um aplicativo gratuito chamado PRIO, que economiza prioridade de processo (entre outras coisas) com uma pegada muito pequena (menos de 1 MB). Após a instalação, ele é executado silenciosamente em segundo plano até que você precise, e sua interface é criada diretamente no Gerenciador de Tarefas do Windows, estendendo sua funcionalidade e tornando-o como se os recursos adicionados sempre fizessem parte do Gerenciador de Tarefas. Quando você clica com o botão direito do mouse em um processo no Gerenciador de Tarefas com a intenção de alterar sua prioridade, alguns dos recursos adicionais do PRIO ficam aparentes, pois você pode alterar não apenas a prioridade da CPU do processo, mas também a prioridade de E / S (ergo sua pergunta) , e você pode salvar as novas configurações, se desejar. Isso faz com que, toda vez que esse processo (ou seja, esse programa) seja executado, as prioridades de processo de CPU e de E / S definidas e salvas por você entrem em vigor.

O aplicativo possui outros recursos que também ampliam a funcionalidade das várias guias no Gerenciador de tarefas do Windows. Existem versões para sistemas de 32 e 64 bits, e o aplicativo é gratuito para uso pessoal.

Mike Mounier
fonte
Parece um ótimo aplicativo. Tem um link?
Stijn de Witt
11
Se você quer dizer PRIO, está disponível a partir de um número de diferentes agregadores de conteúdo (como CNET), mas diretamente do site do desenvolvedor seria prnwatch.com/prio
Mike Mounier