Determinar em qual CPU um processo está sendo executado

19

Usando o Process Explorer da Sysinternals, existe uma coluna que pode ser usada para indicar em qual CPU um processo está sendo executado? Se não houver coluna, existe alguma outra maneira?

rory.ap
fonte
3
@DavidPostill - A melhor resposta apenas aponta para a página da web do Process Explorer. Minha pergunta é: dado o explorador de processos, como determinar em que núcleo um processo é iniciado?
Roger.ap

Respostas:

47

Solicitado em 2005 :

Estou muito impressionado com os recursos integrados no Process Explorer, mas gostaria de ver uma opção para exibir cada afinidade da CPU do processo na janela principal como uma alternância de coluna.

Sem resposta.

Solicitado em 2007 :

Obrigado por excelentes serviços públicos. Minha solicitação é adicionar uma opção de coluna ao Process Explorer para exibir a afinidade da CPU. É isso aí.

Sem resposta.

Similar discutido em 2013 :

Seria muito bom se houvesse uma nova coluna de exibição de desempenho do processo chamada Uso principal que mostrasse uma soma do uso sobre o núcleo em que o processo está sendo executado.

Sinopse básica: isso não pode ser feito.

Threads são enviados para núcleos para processamento, não para processos. A maioria dos processos modernos tem vários threads.

Se você definir manualmente a afinidade para um processo, todos os threads do processo deverão permanecer em um único processador. Como você o define manualmente, você deve saber em qual CPU está. ;)

Porém, se você não especificar, os threads serão controlados pelo sistema operacional e pelo hardware de processamento subjacente e se movimentarão entre os processadores a uma velocidade que seria inatacável e provavelmente imprecisa no momento em que foi exibida. vocês.

Talvez dê uma olhada nessas perguntas da SU para saber mais:

Além disso, no StackOverflow:

Agora, se você criou o programa, poderá usar o GetCurrentProcessorNumber , que relata o processador atual em uso pelo encadeamento do qual a função foi chamada.

Usar isso permitirá que você faça estimativas sobre o uso do processador por seus encadeamentos, pois você nunca pode ter certeza de onde os encadeamentos serão um ciclo para o próximo (novamente, a menos que você defina a afinidade de propósito).

Mais informações:

Ƭᴇcʜιᴇ007
fonte
3
Resposta agradável ... :)
DavidPostill
@DavidPostill - Concordado.
Roger.api
Ótima resposta, pois responde à pergunta específica, entra na história e nos porquês e ajuda a entender os conceitos.
Smithers
1
No Linux e no Windows, é possível definir a afinidade por thread. No entanto, isso raramente é útil, portanto, raramente é feito, exibindo uma afinidade por thread em um programa de monitoramento genérico, se for definido como mais ou menos inútil - a grande maioria deixaria o kernel agendar da maneira que quisesse.
Bob
O sistema operacional pode até alternar seu encadeamento para outro processador logo após a chamada GetCurrentProcessorNumber (mas antes de começar a executar) e novamente logo após o retorno, para que o resultado não seja o processador no momento da chamada nem o processador no momento a ligação retorna!
precisa saber é o seguinte
8

Isso pode ser feito capturando um rastreio xperf e abrindo-o com o Windows Performance Analyzer (WPA.exe) no Windows Performance Toolkit. Aqui você pode adicionar uma CPU de coluna para ver qual CPU (Core) o processo está executando:

insira a descrição da imagem aqui

magicandre1981
fonte
Agradável. Ele lista o mesmo processo em cada CPU (se estiver usando mais de uma)? Como está usando um rastreio xperf capturado, isso significa que não são relatórios ao vivo?
precisa saber é o seguinte
Os eventos ETW @ Ƭᴇcʜιᴇ007 também podem ser consumidos em tempo de execução. Gravá-los em um arquivo ETL é apenas uma maneira. Sim, lista os processos em ambas as CPUs quando utiliza as duas.
magicandre1981