Determinazione del processore particolare su cui è in esecuzione un processo


10

Ho accesso a un nodo a 8 core di un cluster Linux. Una volta effettuato l'accesso al nodo, posso vedere un elenco di processori usando questo comando:

more /proc/cpuinfo

Nel mio nodo a 8 core, i processori sono numerati da 0 a 7. Ogni processore è una CPU Intel Xeon (E5430 @ 2.66GHz).

Supponiamo ora di chiamare il programma foocon alcuni argomenti args:

foo args

L' fooesecuzione del programma richiede molto tempo (ore o giorni, ad esempio). Dopo aver chiamato foo, è possibile determinare il processore specifico (ovvero da 0 a 7) su cui fooè in esecuzione? Il topprogramma mi mostra l'ID del processo e informazioni simili, ma non vedo il numero del processore . Tali informazioni sono disponibili?


1
A meno che tu non abbia fatto qualcosa di specifico, il processo non rimarrà sempre sulla stessa CPU. Perché hai bisogno di queste informazioni?
Mat

@Mat Grazie per il tuo tempo. Questa è una domanda separata, ma alla fine vorrei vedere se posso assegnare due chiamate fooa due processori diversi. Quando chiamo foouna volta, funziona %CPUmolto vicino al 100% (secondo top). Ma quando chiamo foouna seconda volta, entrambi i fooprocessi funzionano in modo tale che %CPUper entrambi i processi si sommino a meno del 100% (di solito circa il 45% per ogni fooprocesso). Per me, questo suggerisce che le due chiamate a foosono in esecuzione sullo stesso processore (anche se ci sono otto processori disponibili); Vorrei verificare che sia così.
Andrew,

1
Il termine si chiama affinità processore
slm

1
Lo scheduler consente di eseguire le cose su più (diversi) processori .... TUTTAVIA, il tuo programma deve essere costruito come un programma multi-thread per trarre vantaggio dall'uso dell'elaborazione multipla simultanea su un programma o un'attività specifici. A seconda di chi programma l'applicazione, i programmi Java cercano di farlo.
mdpc,

Risposte:


11

pspuò darti tali informazioni se chiedi la psrcolonna (o usi la -Fbandiera che la include).

Ex:

$ ps -F $$
UID        PID  PPID  C    SZ   RSS PSR STIME TTY      STAT   TIME CMD
me        6415  6413  0  5210  2624   2 18:52 pts/0    SN     0:00 -su

O:

$ ps -o pid,psr,comm -p $$
  PID PSR COMMAND
 6415   0 bash

La mia shell era in esecuzione su CPU 2 quando ho eseguito il primo comando, su CPU 0 quando ho eseguito il secondo. Fai attenzione che i processi possono cambiare le CPU molto, molto rapidamente, quindi le informazioni che vedi effettivamente sono già obsolete.

Altre informazioni nelle risposte alla domanda di questo Super User:

Linux: comando per conoscere il numero del processore in cui è caricato un processo?


4

Con topda procps(generalmente l'impostazione predefinita nelle distribuzioni Linux al giorno d'oggi), in top, premere f, navigare P = Last User CPU (SMP)e premere Spaceper selezionare (è anche possibile spostare il campo ad esempio prima del COMMANDcampo con il Righttasto e quindi spostarsi su e giù). qper tornare alla schermata principale (dove vedrai il tuo processo passare da processore a processore a meno che tu non lo abbia configurato esplicitamente per rimanere con uno). È possibile premere Wper salvarlo come predefinito.

Premi ?per aiuto.


4

Il comando tasksetè quello che stai cercando:

tasket: recupera o imposta l'affinità della CPU di un processo

Esempio

$ taskset -p 12345
pid 12345's current affinity mask: f

Una maschera di fsignifica tutti i processori, 0x00000001sarebbe solo il processore 0.

$ taskset -c -p 24389 
pid 24389's current affinity list: 0-3

Mostra le CPU in formato elenco. Ho 4 core sul mio laptop in questo esempio.

Vedi la pagina man ha maggiori dettagli .


1

Puoi anche ottenere queste informazioni direttamente da /proc/[pid]/stat. È il 39 ° campo delimitato da spazi (da Linux 2.2.8).

Ad esempio per visualizzare su quale processore CPU è in esecuzione la shell corrente (in questo caso):

cat  /proc/$$/stat | cut -d' ' -f39
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.