Determine en qué CPU se está ejecutando un proceso

19

Con el Explorador de procesos de Sysinternals, ¿hay una columna que se pueda usar para indicar en qué CPU se está ejecutando un proceso? Si no hay columna, ¿hay alguna otra manera?

rory.ap
fuente
3
@DavidPostill: la mejor respuesta solo apunta a la página web de Process Explorer. Mi pregunta es: dado el explorador de procesos, ¿cómo puedo determinar en qué núcleo se inicia un proceso?
rory.ap

Respuestas:

47

Solicitado en 2005 :

Estoy muy impresionado con las características integradas en Process Explorer, pero me gustaría ver una opción para mostrar cada afinidad de CPU de proceso en la ventana principal como una alternancia de columnas.

Ninguna respuesta.

Solicitado en 2007 :

Gracias por excelentes utilidades. Mi solicitud es agregar una opción de columna para procesar el explorador para mostrar la afinidad de la CPU. Eso es.

Ninguna respuesta.

Similar discutido en 2013 :

Sería realmente bueno si hubiera una nueva Columna de Vista de Rendimiento del Proceso llamada Uso del Núcleo que mostraría una suma del uso sobre el núcleo en el que se está ejecutando el proceso.

Sinopsis básica: no se puede hacer.

Los hilos son los que se envían a los núcleos para su procesamiento, no los procesos. La mayoría de los procesos modernos tienen múltiples hilos.

Si establece manualmente la afinidad por un proceso, todos los hilos del proceso deben adherirse a un único procesador. Como lo configuró manualmente, debe saber en qué CPU está. ;)

Pero si no especifica, el sistema operativo y el hardware de procesamiento subyacente controlarán los subprocesos, y saltarían entre los procesadores a una velocidad que sería imposible de observar y muy probablemente imprecisa para cuando se muestre. tú.

Quizás revise estas preguntas de SU para más información:

Además, desde StackOverflow:

Ahora, si escribió el programa, podría usar el GetCurrentProcessorNumber , que informa el procesador actual en uso por el hilo desde el que se llamó a la función.

El uso de esto le permitirá hacer estimaciones sobre el uso del procesador por parte de sus hilos, ya que nunca puede estar seguro de dónde estarán los hilos de un ciclo al siguiente (de nuevo, a menos que establezca la afinidad a propósito).

Más información:

Ƭᴇcʜιᴇ007
fuente
3
Buena respuesta ... :)
DavidPostill
@DavidPostill - De acuerdo.
rory.ap
Gran respuesta, ya que responde la pregunta específica, entra en la historia y por qué, y ayuda a comprender los conceptos.
Smithers
1
Tanto en Linux como en Windows es posible establecer la afinidad por subproceso. Sin embargo, esto rara vez es útil, por lo tanto, rara vez se hace, por lo tanto, mostrar una afinidad por subproceso en un programa de monitoreo genérico si está configurado es más o menos inútil: la gran mayoría simplemente dejaría que el núcleo se programara como quisiera.
Bob
El sistema operativo incluso podría cambiar su subproceso a otro procesador justo después de llamar a GetCurrentProcessorNumber (pero antes de que comience a ejecutarse) y nuevamente justo después de que regrese, por lo que el resultado no sería ni el procesador en el momento de la llamada, ni el procesador en el momento la llamada vuelve!
gnasher729
8

Esto se puede hacer capturando un rastro de xperf y abriéndolo con el Analizador de rendimiento de Windows (WPA.exe) del Kit de herramientas de rendimiento de Windows, aquí puede agregar una columna CPU para ver qué CPU (Core) está ejecutando el proceso:

ingrese la descripción de la imagen aquí

magicandre1981
fuente
Agradable. ¿Enumera el mismo proceso en cada CPU (si está usando más de una)? Dado que está usando una traza xperf capturada, ¿eso significa que no se trata de informes en vivo?
Ƭᴇcʜιᴇ007
@ Ƭᴇcʜιᴇ007 Los eventos ETW también se pueden consumir en tiempo de ejecución. Escribirlos en un archivo ETL es solo una forma. Sí, enumera los procesos en ambas CPU cuando usa ambos.
magicandre1981