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?


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.


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.


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.