Como posso garantir que exatamente um processo esteja sendo executado em um determinado processador/núcleo?

Como posso garantir que exatamente um processo esteja sendo executado em um determinado processador/núcleo?

Eu gostaria de fazer isso para poder testar com precisão meus processos e apenas para poder ter a ilusão de controle.

Talvez eu queira reservar um processador para programas especiais. Talvez eu queira escrever meu próprio otimizador de processos. Quem sabe. As possibilidades são infinitas em minha mente.

Isso é possível em qualquer sistema operacional? Se não, por que não? Se podemos compartimentar a memória, por que não podemos ter esse controle sobre os processadores?

Obrigado.

Responder1

No Linux,cpusetsdeve funcionar para isso.

Responder2

Isto é, em teoria, possível. A maneira mais fácil de conseguir algo próximo disso seria com uma plataforma de virtualização que permite atribuir CPU/núcleos específicos a uma VM específica. Então você poderia executar apenas o processo desejado em uma determinada VM (é claro, com o mínimo de sobrecarga do sistema operacional).

Responder3

A maneira mais fácil de fazer isso é definir a afinidade do processador para um determinado processo ou informar ao sistema operacional em quais CPUs lógicas (núcleos) esse processo pode ser executado. Se você clicar com o botão direito em um processo no Gerenciador de tarefas do Windows e selecionar Set Affinity..., você encontrará uma janela parecida com esta:

Configurando a afinidade do processador no Windows

Em sistemas baseados em Linux, você podefaça a mesma coisa com o tasksetutilitárioou definindo o sinalizador de máscara de CPU apropriado na /procentrada dos processos.

Infelizmente, não há uma maneira fácil de remover todos os processos de um determinado processador ou de definir automaticamente uma máscara específica em um processo quando ele é inicializado - você precisará de um script para monitorar novos processos no sistema e definir a afinidade apropriada que você deseja.

informação relacionada