¿Hay alguna forma de determinar en qué CPU se ejecuta un hilo determinado? Preferiblemente en C#, pero C++ sería suficiente.¿Cómo determinar en qué CPU se ejecuta un subproceso?
Las clases .NET Process y ProcessThread no parecen proporcionar esta información.
ETA Aclaraciones:
estamos desarrollando una aplicación de servidor que procesa http secuencias de multidifusión y genera múltiples codificadores de vídeo. Esto se ejecuta en un sistema con 12 núcleos físicos, lo que resulta en 24 CPU lógicas (hyperthreading). A través de TaskManager y ProcessExplorer, hemos verificado que nuestros procesos generados se distribuyen uniformemente sobre las CPU lógicas. Sin embargo, estamos viendo una gran cantidad de actividad (kernel?) En una sola CPU que interfiere al consumir cantidades inusuales de tiempo de CPU. Estamos tratando de identificar qué proceso (s)/thread (s) se están ejecutando en esta CPU en particular. Ni TaskManager ni ProcessExplorer parecen proporcionar esa información. Si lo hacen, explique cómo se puede obtener dicha información.
De lo contrario, estamos pensando en escribir nuestra propia herramienta para obtener esta información. Y eso es con lo que necesitamos ayuda.
Sabemos cómo cambiar la afinidad de un subproceso (y sabemos que no hay garantía de que un subproceso permanezca asociado a ninguna CPU, aunque en este caso particular el subproceso que consume CPU permanece asociado con solo una CPU), pero para poder hacerlo, primero debemos determinar QUÉ proceso/hilo necesita ser reubicado. Ese es el único objetivo de esta pregunta.
Espero que esto ayude a aclarar el problema.
¿Qué problema está tratando de resolver con esta información? –
Es conocido solo por el kernal. Entonces necesitas programar en modo Kernal. Busque las API de Kernal en MSDN. – Nawaz
¿Qué le gustaría que hiciera si un subproceso se ejecutara en muchas CPU diferentes en momentos diferentes? –