Pagina 1 di 1

Quanta CPU occupa un processo?

Inviato: lun 25 gen 2010, 16:58
da morphy81
Ciao a tutti!

avrei bisogno di creare uno script che recuper alcuni PID (ok, questo è semplice) e che mi dica per ogni processo quanta CPU sta usando...

idee?

Grazie 1000!

Re: Quanta CPU occupa un processo?

Inviato: lun 25 gen 2010, 17:26
da 414N
top non ti piace?

Re: Quanta CPU occupa un processo?

Inviato: lun 25 gen 2010, 17:59
da Ansa89
Questo dovrebbe fare al caso tuo:

Codice: Seleziona tutto

$ps aux | grep _TUO_PID_ | tr -s " " " " | cut -d " " -f 3

Re: Quanta CPU occupa un processo?

Inviato: mar 26 gen 2010, 11:13
da spiri
Ciao, oppure scomodando awk:

Codice: Seleziona tutto

$ps aux | grep _TUO_PID_ | awk '{print $3}
ciao

spiri

Re: Quanta CPU occupa un processo?

Inviato: mar 26 gen 2010, 11:40
da targzeta
Entrambe le soluzioni sono "complesse" e errate. Complesse perchè, da ps(1), basta:

Codice: Seleziona tutto

ps -opcpu= -p_TUO_PID_
dove _TUO_PID_ può anche essere una lista CSV (comma-separated values) di PID.

Errate perchè un pid è un valore numerico, l'output che si ottiene con 'ps aux' contiene altri valori numerici oltre al pid, quindi il grep potrebbe "matchare" più di una riga. Per esempio quando casualmente il PID di un processo è uguale alla VSZ (virtual memory size) di un altro.

Emanuele

Re: Quanta CPU occupa un processo?

Inviato: mar 26 gen 2010, 15:01
da Mario Vanoni
morphy81 ha scritto: avrei bisogno di creare uno script che recuper alcuni PID (ok, questo è semplice) e che mi dica per ogni processo quanta CPU sta usando...
Se il processo e` multi-thread,
si suddivide sulle CPU presenti,
con processore unico idem per ogni task.

Esempio pratico su una Core 2 Dual:
make -j 2 bzImage con un kernel di Con Kolivas
top dice tutto il tempo i due CPU 0.0% idle,
se guardi i PID dei due cc1 che compilano,
cambiano continuamente.

Con un semplice
make bzImage
top dice che i due CPU sono sul 50% idle,
il PID del cc1 cambia continuamente.

Quintessenza:
se il processso e` multi-thread, no chance,
se e` monolitico si`, non usando sub-processi.

Re: Quanta CPU occupa un processo?

Inviato: ven 29 gen 2010, 16:44
da robbybby
Ne sei sicuro Mario? Intedno se sei cicuro che non si possa recuperare il tempo di processore di un porgramma multithread.
Qualche tempo fa, con un programmino Java creato ad hoc, top mi dava un'occupazione di CPU di poco superiore al 100% (tipo 104-105%). Cio' dovrebbe voler dire che, se il processo e' uno solo, indipendentemente dal numero dei thread e dei processori/core, e' possibile recuperarne in tempo di CPU, anche se esso viene suddiviso (evidentemente, visto che supera il 100%) su piu' CPU/core.
make -j2 da' i risultati che hai scritto tu perche' lancia due copie di cc1, quidni si hanno effettivamente due processi separati.

Re: Quanta CPU occupa un processo?

Inviato: ven 29 gen 2010, 17:31
da 414N
robbybby ha scritto:Ne sei sicuro Mario? Intedno se sei cicuro che non si possa recuperare il tempo di processore di un porgramma multithread.
Qualche tempo fa, con un programmino Java creato ad hoc, top mi dava un'occupazione di CPU di poco superiore al 100% (tipo 104-105%). Cio' dovrebbe voler dire che, se il processo e' uno solo, indipendentemente dal numero dei thread e dei processori/core, e' possibile recuperarne in tempo di CPU, anche se esso viene suddiviso (evidentemente, visto che supera il 100%) su piu' CPU/core.
make -j2 da' i risultati che hai scritto tu perche' lancia due copie di cc1, quidni si hanno effettivamente due processi separati.
Occhio che Java crea ed esegue i thread all'interno di un singolo processo java (la JVM). Il kernel è all'oscuro di quanti thread stiano girando all'interno della JVM, perché sono thread a livello utente.

Re: Quanta CPU occupa un processo?

Inviato: ven 29 gen 2010, 17:36
da Mario Vanoni
robbybby ha scritto:Ne sei sicuro Mario? Intedno se sei cicuro che non si possa recuperare il tempo di processore di un porgramma multithread.
Qualche tempo fa, con un programmino Java creato ad hoc, top mi dava un'occupazione di CPU di poco superiore al 100% (tipo 104-105%). Cio' dovrebbe voler dire che, se il processo e' uno solo, indipendentemente dal numero dei thread e dei processori/core, e' possibile recuperarne in tempo di CPU, anche se esso viene suddiviso (evidentemente, visto che supera il 100%) su piu' CPU/core.
make -j2 da' i risultati che hai scritto tu perche' lancia due copie di cc1, quidni si hanno effettivamente due processi separati.
Permetti il dubbio?
Sia che con sar 1 che con sar -P ALL 1 che con top
non ho mai visto valori superiori al 100%.
Ma facendo esperimenti con vari progammi multi-thread, vedi
viewtopic.php?f=2&t=28988&start=0&hilit ... ip#p247313
taluni dei compressori/decompressori parallaleli
usavano al 100% i due CPU presenti, con altri uno restava con un tot% idle.
Con i kernel di Con Kolivas
make -j 2 bzImage
i due CPU erano sempre occupati al 100%, quindi 0.0% idle
con l'ultimo kernel 2.6.32.7, scheduler di Ingo Molnar,
i due processorei segnavano una tatum 0.2...2.0% idle,
timing per lo stesso kernel, stessa macchina:
5m21 per Con Kolivas (kernel 2.6.32.6-ck2)
5m42 per Ingo Molnar (kernel 2.6.32.7)

PS Il kernel 2.6.32.7 non e` piu` patch'abile con -ck2, un hunk grave!

Re: Quanta CPU occupa un processo?

Inviato: ven 29 gen 2010, 18:23
da robbybby
Capisco che tu possa rimanere perplesso, ma ho riprovato, e top mi da' 101%, par la jvm: una cpu al 99.5% user + 0.5% sys, e l'altra al 4.3% user + 0.9% sys.
Chiaramente quel 101% riguarda l'intera istannza della jvm, di cui il mio programmino di test e' solo un thread, che non potra' mai superare il 100% di cpu. Ma la jvm nel suo insieme, evidentemente si'. Oppure e' un bug di top: anche questa e' una possibilita' da non scartare.

Re: Quanta CPU occupa un processo?

Inviato: ven 29 gen 2010, 18:45
da Mario Vanoni
robbybby ha scritto:Capisco che tu possa rimanere perplesso, ma ho riprovato, e top mi da' 101%, par la jvm: una cpu al 99.5% user + 0.5% sys, e l'altra al 4.3% user + 0.9% sys.
Chiaramente quel 101% riguarda l'intera istannza della jvm, di cui il mio programmino di test e' solo un thread, che non potra' mai superare il 100% di cpu. Ma la jvm nel suo insieme, evidentemente si'. Oppure e' un bug di top: anche questa e' una possibilita' da non scartare.
Rifai il tuo test osservando top,
ma solo i valori n.n%id dei due processori,
i valori n.n%us e n.n%sy non dicono niente sull'uso dei CPU!