GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso vedere in quale core della CPU è in esecuzione un thread?

Il comando "top" può aiutare in questo, non ha un elenco di thread raggruppato per CPU, ma piuttosto puoi vedere l'elenco dei thread (probabilmente per un singolo processo) e quali core della CPU su cui sono in esecuzione i thread

top -H -p {PROC_ID}

quindi premendo f per passare alla selezione del campo, j per abilitare la colonna CPU core e Invio da visualizzare.


Puoi anche usare ps , qualcosa del genere:

ps -mo pid,tid,%cpu,psr -p `pgrep BINARY-NAME`

La risposta di seguito non è più precisa a partire dal 2014

Le attività non dormono in nessun core particolare. E lo scheduler non saprà in anticipo su quale core eseguirà un thread perché ciò dipenderà dall'utilizzo futuro di quei core.

Per ottenere le informazioni desiderate, cerca in /proc//task//status. Il terzo campo sarà una "R" se il thread è in esecuzione. Il sesto dall'ultimo campo sarà il core su cui è attualmente in esecuzione il thread o il core su cui è stato eseguito l'ultima volta (o verso cui è stata eseguita la migrazione) se non è attualmente in esecuzione.

31466 (bc) S 31348 31466 31348 34819 31466 4202496 2557 0 0 0 5006 16 0 0 20 0 1 0 10196934 121827328 1091 18446744073709551615 4194304 4271839 140737264235072 140737264232056 217976807456 0 0 0 137912326 18446744071581662243 0 0 17 3 0 0 0 0 0

Attualmente non in esecuzione. Ultima esecuzione su core 3.

31466 (bc) R 31348 31466 31348 34819 31466 4202496 2557 0 0 0 3818 12 0 0 20 0 1 0 10196934 121827328 1091 184467440737095551615 4194304 4271839 0.> Struth; 0 0 0 0 0

Attualmente in esecuzione su core 2.

Per vedere cosa significano gli altri campi, dai un'occhiata al sorgente del kernel di Linux -- in particolare il do_task_stat funzione in fs/proc/array.c o Documentation/filesystems/stat.txt .

Tieni presente che tutte queste informazioni potrebbero essere obsolete nel momento in cui le ottieni. Era vero a un certo punto tra quando hai fatto il open chiamata sul file in proc e quando quella chiamata è tornata.


I thread non sono necessari per legare un particolare Core (se non lo hai appuntato). Pertanto per vedere la commutazione continua del core puoi usare (una risposta modificata di Dmitry):

watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p \`pgrep BINARY-NAME\`

Ad esempio:

watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p \`pgrep firefox\`

Linux
  1. Come puoi trovare il numero del processore su cui è in esecuzione un thread?

  2. Python può rilevare su quale sistema operativo è in esecuzione?

  3. Come verificare su quale porta è in esecuzione MySQL e se può essere connesso?

  4. Come posso sapere quale processo sta usando lo scambio?

  5. Come trovare quale processo sta causando un elevato utilizzo della CPU

Come monitorare la temperatura della CPU su un sistema Linux Redhat 7

Linux:come identificare quale distribuzione Linux è in esecuzione??

Linux:come limitare un processo a un core della CPU in Linux??

Come posso profilare il codice C++ in esecuzione su Linux?

Come far funzionare tutti i processi su ciascun core della CPU in Ubuntu?

Come posso scoprire quale sistema operativo del server è in esecuzione su un determinato sito?