O que é Prioridade e Afinidade do Windows e que vantagens oferece?

9

O que exatamente é Prioridade e Afinidade (encontrado no Gerenciador de Tarefas) e para que são usados:

Encontrado no Gerenciador de tarefas

Em que situações eles devem / poderiam ser usados ​​e quais vantagens são encontradas ao personalizar essas configurações.

James Mertz
fonte

Respostas:

3

Definir afinidade faz algo, mas você nunca vai querer usá-lo.

A configuração da afinidade da CPU força o Windows a usar apenas a CPU (ou núcleos) selecionados. Se você definir a afinidade para uma única CPU, o Windows executará esse aplicativo apenas nessa CPU, nunca em outros.

O Windows coloca automaticamente os aplicativos em execução no processador menos ocupado, limitando-o a uma única CPU não permite que o Windows faça seu trabalho. Mesmo que a CPU / núcleo 1 esteja ocupada executando outros aplicativos, o Windows não poderá executar um aplicativo com afinidade definida na CPU / Core 2.

Realmente, o único motivo pelo qual você deseja fazer isso é executar um aplicativo antigo que não funcione corretamente ao executar em um sistema com várias CPUs / Núcleos.

shf301
fonte
5
> você nunca vai querer usá-lo. Não é verdade. Se você tiver um aplicativo de thread único, ele não poderá usar os threads / núcleos da CPU em sua extensão máxima e não haverá nada que o Windows possa fazer para forçá-lo / enganá-lo. Se você tiver dois aplicativos de thread único, poderá solicitar ao Windows que cada um use um thread / núcleo separado para que, em vez de o uso total da CPU fique em torno de 50-75%, você possa maximizar para 100% (cada núcleo sendo utilizado ao máximo por um programa). Portanto, sim, você pode realmente usar a configuração, mas é um cenário específico que a maioria das pessoas não sabe / percebe / precisa.
Synetech
2
Se você tiver dois aplicativos de thread único, o Windows executará cada um em um thread / núcleo diferente e você obterá 100% de utilização da CPU sem definir a afinidade. Para testar, acabei de executar 4 instâncias de um único programa de encadeamento na minha máquina de 4 núcleos e obtive 100% de uso da CPU. O Windows é inteligente o suficiente para agendar CPU com eficiência.
Shf301
Eu acho que depende do sistema e / ou versão do Windows. Eu já vi (XP) pairar nos dois núcleos de 50 a 75%, onde ambos os processos foram definidos para os dois núcleos e, configurando-os manualmente, atingiram o máximo da CPU.
Synetech 12/08/2012
@ Synetech: Isso parece quase impossível. Teria que mover os dois processos de um núcleo para o outro, sempre ambos ao mesmo tempo.
David Schwartz
Outro caso de uso válido para isso: há aplicativos que podem utilizar todas as CPUs disponíveis e impedir que outros programas funcionem bem e / ou fazer o sistema operacional responder muito lentamente à entrada do usuário. Nesse caso, alguém pode decidir limitar esse aplicativo a apenas algumas das CPUs. Como desenvolvedor, eu uso esse recurso frequentemente ao criar um perfil de meus aplicativos intensivos em CPU, pois o próprio processo de criação de perfil requer CPU.
Eyal Roth
2

A definição de afinidade informa ao processo em que processadores é permitido executar.

Embora muito útil para alguns casos de nicho, o usuário médio provavelmente não deve mexer com ele.

Por exemplo, se um processo tivesse permissão de executar seu próprio núcleo, ele poderia ser executado em (quase) em tempo real, sem que os 70 utilitários do Windows interrompessem e trocassem constantemente a pilha no processador por sua própria fatia de tempo. Os aplicativos em tempo real eram algo que o Windows nunca poderia fazer antes que os sistemas multiprocessador / multinúcleo entrassem em cena, porque o sistema operacional constantemente interrompe / alterna a tarefa do aplicativo para seus próprios fins. Agora, isso pode ser superado isolando o processador de aplicativos em tempo real e impedindo que todos os outros aplicativos do sistema usem esse processador. Esse é um assunto muito específico, mas sistemas como simuladores de vôo (reais), automação de fábrica e sistemas de feedback de controle dependem da arquitetura em tempo real para funcionar.

Os aplicativos intensivos do processador (como VMs) podem ser isolados em seu próprio núcleo, para que você possa usá-los sem levar o resto do seu sistema a um rastreamento. Em teoria, um hipervisor em execução em um processador que suporta a interação bare-metal do hipervisor pode atingir o desempenho do processador igual ao SO independente em execução por conta própria (menos o processador necessário para executar o SO host). Obviamente, na prática, mesmo uma VM executando em seu próprio núcleo / processador isolado ainda precisará aceitar uma pequena quantidade de sobrecarga do host do SO host.

Para aplicativos que manipulam uma grande quantidade de dados em fluxo, isolar o aplicativo em seu próprio processador (e potencialmente ainda utilizando vários núcleos) reduzirá a troca de cache.

Os aplicativos mais antigos que quebram quando estão espalhados por vários processadores podem efetivamente ser limitados a um núcleo / processador para corrigir o problema.

Se você estava fazendo medições de desempenho em um aplicativo específico, é quase impossível obter resultados consistentes em diferentes sistemas, a menos que você possa isolar o processo porque, caso contrário, você não terá controle sobre quanto tempo o sistema operacional dá ao seu aplicativo. A maioria das pessoas concorda que medir o desempenho em tempo de execução não produz bons resultados, mas essas pessoas nunca consideraram que a intervenção do SO (que torna os resultados tão inconsistentes) pode ser limitada usando afinidade.

Existem muitos casos em que a afinidade é vital, mas, se você não sabe o que são, provavelmente não precisará.

Evan Plaice
fonte
O que torna a afinidade muito menos útil do que muitos pensam que deveria ser é o seguinte: configurando a afinidade do processo para algum subconjunto das CPUs disponíveis. não fecha mais nada dessas CPUs. Para fazer isso, você teria que ir a todos os outros processos do sistema para mantê-los fora da CPU que deseja ter para si mesmo. Isso quase nunca é prático.
Jamie Hanrahan
É possível usar software de terceiros . Por que a MS não inclui essa funcionalidade por padrão está além de mim.
Evan Solha
Porque, como escrevi, não é tão útil assim. E é muito propenso ao mau uso. De fato, o resultado usual de ser "criativo" demais com afinidade é que as coisas não estão funcionando quando poderiam estar. Geralmente, é melhor executar um encadeamento diferente daquele que você acha que é a CPU preferida do que nunca (depois de definir tolamente a afinidade para negar o acesso a CPUs que, de outra forma, seriam inativas). O mecanismo padrão "processador ideal" e "processador anterior" do Windows obtém boa coerência de cache sem o instrumento contundente da máscara de afinidade.
Jamie Hanrahan
2

Esse é um recurso muito útil em certos cenários. Digamos que você tenha um aplicativo multiencadeado que tende a ficar ocioso ou a capturar agressivamente 100% de cada CPU por vários minutos, fazendo pesquisas, construções etc. Vamos chamar esse aplicativo de "eclipse".

Digamos também que, enquanto você trabalha neste aplicativo, você tem vários outros aplicativos que possuem requisitos modestos de CPU, mas são essencialmente aplicativos em tempo real. Por exemplo, enquanto você usa o Eclipse e ele inicia aleatoriamente compilações ou realiza compilações gwt, também está usando o computador para transmitir músicas ou realizar pesquisas em uma janela do navegador (por exemplo, pesquisando a causa de um problema de compilação) . Claro, você não morrerá se sua música pular ou se o navegador parar de responder, mas é irritante.

O que a afinidade permite que você faça é restringir seu aplicativo de alimentação da CPU a 7/8 núcleos, para que todos os outros tenham acesso garantido a uma CPU relativamente não utilizada e você não precise lidar constantemente com gagueira e interrupções na usabilidade de tudo o mais no seu computador enquanto o eclipse está se esvaindo.

Jim W
fonte
Você seria muito melhor nesse caso, simplesmente configurando o processo de sujeira da CPU para uma baixa prioridade.
Jamie Hanrahan
1

Maior prioridade significa que o processamento de uma tarefa será beneficiado em relação às tarefas de baixa prioridade. Se você estiver executando um aplicativo que precisa ser muito responsivo e vários outros processos não interativos, por exemplo, as prioridades podem garantir uma experiência melhor com seu processo de alta prioridade.

Por exemplo: desde o Windows Vista, o Windows Media Player recebe automaticamente uma prioridade mais alta para garantir a reprodução suave e contínua de arquivos de mídia, com apenas 20% do tempo da CPU disponível para outros processos por padrão. Este é apenas um exemplo para ajudar você a entender o que as prioridades fazem. (Você pode ler mais sobre as prioridades do Media Player no Vista no Technet .)

A afinidade branda ou branda pode aumentar a velocidade do processamento porque o cache da CPU ainda pode ter restos do processo quando um processo foi interrompido anteriormente e depois retomado posteriormente.

David M
fonte
Doce obrigado! Então, qual é um bom guia para usar o afinity?
James Mertz
Um bom guia para usar a afinidade: "Não".
Jamie Hanrahan
O "apenas 20% de tempo da CPU disponível para outros processos" não é uma descrição precisa. A implementação real é que um segmento que opte pelo agendador de classes multimídia pode executar até 80% de cada intervalo de agendamento na classe de prioridade em tempo real. Não precisa necessariamente usar muito, e se não usar. mais de 20% estarão disponíveis para outros threads.
Jamie Hanrahan 12/09
1

Um exemplo perfeito disso são os jogos antigos de computador (ou outro software), especialmente quando jogos de 32 bits (aplicativos) são emulados em um computador moderno de 64 bits. Ao definir a afinidade para jogos antigos, limitando-os a apenas quatro núcleos, é possível evitar muitas vezes travamentos para permitir o início de jogos de stubburn. Alguns mecanismos de renderização usados ​​por jogos antigos, editores de vídeo e software de gráficos acelerados por hardware, ou software CAD, não entendem mais do que quatro núcleos da CPU e travam quando lançados.

Não estou criando uma conta apenas para postar isso, para me encontrar no google 'kieseyhow'

Kieseyhow
fonte