Determina su quale CPU è in esecuzione un processo


19

Utilizzando Process Explorer di Sysinternals, esiste una colonna che può essere utilizzata per indicare su quale CPU è in esecuzione un processo? Se nessuna colonna, c'è qualche altro modo?



3
@DavidPostill: la risposta migliore punta solo alla pagina Web di Process Explorer. La mia domanda è: dato Process Explorer, come determinare da quale core viene avviato un processo?
rory.ap,

Risposte:


47

Richiesto nel 2005 :

Sono rimasto molto colpito dalle funzionalità integrate in Process Explorer, ma vorrei vedere un'opzione per visualizzare ogni affinità della CPU di processo nella finestra principale come interruttore a colonna.

Nessuna risposta.

Richiesto nel 2007 :

Grazie per le superbe utility. La mia richiesta è quella di aggiungere un'opzione di colonna per elaborare Explorer per visualizzare l'affinità della CPU. Questo è tutto.

Nessuna risposta.

Simile discusso nel 2013 :

Sarebbe davvero bello se ci fosse una nuova colonna di visualizzazione delle prestazioni del processo chiamata Core Usage che mostrerebbe una somma dell'uso sul core su cui è in esecuzione il processo.

Sinossi di base: non si può fare.

I thread sono ciò che viene inviato ai core per l'elaborazione, non i processi. I processi più moderni hanno più thread.

Se si imposta manualmente l' affinità per un processo, tutti i thread per il processo dovrebbero attenersi a un singolo processore. Dato che lo hai impostato manualmente, dovresti sapere su quale CPU è accesa. ;)

Ma se non specifichi, i thread saranno controllati dal sistema operativo e dall'hardware di elaborazione sottostante e salterebbero tra i processori a una velocità che sarebbe inattaccabile e molto probabilmente inaccurata dal momento in cui veniva visualizzata voi.

Forse dai un'occhiata a queste domande SU per ulteriori informazioni:

Inoltre, da StackOverflow:

Ora se hai scritto il programma, puoi utilizzare GetCurrentProcessorNumber , che riporta il processore corrente in uso dal thread da cui è stata chiamata la funzione.

L'uso di questo ti consentirà di fare stime sull'utilizzo del processore da parte dei tuoi thread, poiché non puoi mai essere sicuro di dove saranno i thread da un ciclo all'altro (di nuovo, a meno che tu non abbia impostato l'affinità di proposito).

Ulteriori informazioni:


3
Bella risposta ... :)
DavidPostill

@DavidPostill - Concordato.
rory.ap,

Ottima risposta, in quanto risponde alla domanda specifica, entra nella storia e perché, e aiuta a capire i concetti.
Smithers,

1
Sia su Linux che su Windows è possibile impostare l'affinità su una base per thread. Tuttavia, questo è raramente mai utile, quindi raramente, quindi mostra un'affinità per thread in un programma di monitoraggio generico se impostato è più o meno inutile: la stragrande maggioranza lascerebbe semplicemente programmare il kernel come preferisce.
Bob,

Il sistema operativo potrebbe persino passare il thread a un altro processore subito dopo la chiamata a GetCurrentProcessorNumber (ma prima che inizi l'esecuzione) e di nuovo subito dopo il suo ritorno, quindi il risultato non sarebbe né il processore al momento della chiamata, né il processore al momento la chiamata ritorna!
gnasher729,

8

Questo può essere fatto catturando una traccia xperf e aprendola con Windows Performance Analyzer (WPA.exe) da Windows Performance Toolkit, qui puoi aggiungere una colonna CPU per vedere quale CPU (Core) è in esecuzione il processo:

inserisci qui la descrizione dell'immagine


Bello. Elenca lo stesso processo in ciascuna CPU (se ne utilizza più di una)? Dal momento che sta utilizzando una traccia xperf acquisita, significa che non è un report live?
Ƭᴇcʜιᴇ007,

@ Ƭᴇcʜιᴇ007 Gli eventi ETW possono anche essere consumati in fase di esecuzione. Scriverli in un file ETL è solo un modo. Sì, elenca i processi in entrambe le CPU quando utilizza entrambi.
magicandre1981,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.