2009-04-19 3 views
5

Ho bisogno di ottenere le metriche di utilizzo della CPU per tutti i thread in un processo.Come ottenere le metriche di utilizzo della CPU dei thread in Redhat Linux

  • Sistema operativo = Linux Redhat
  • linguaggio di programmazione = C++ utilizzando POSIX
  • requisiti = devono prelevare campioni ogni pochi secondi indefinitamente, non solo per una fotografia istantanea in tempo.
  • vincoli = non ha permesso di scrivere codice aggiuntivo in discussione

    So che è possibile utilizzare il comando "top", ma quali altri modi ci sono? C'è una bandiera per "ps"?

Grazie in anticipo per tutto il vostro aiuto.

risposta

0

Potrebbe essere possibile farlo con gnu gprof che è disponibile in Linux. Credo che affermino di supportare il threading, ma questo è più complicato del profiling a livello di processo, quindi potresti non ottenere i risultati che stai cercando.

Ecco uno howto per la vostra situazione.

5

È possibile leggere il contenuto di /proc/[your PID]/stat per ottenere informazioni per l'intero processo e se si dispone di un kernel 2.6, esiste anche /proc/[your PID]/task/[thread ID]/stat con le informazioni per i singoli thread. (Vedi here)

In particolare, si trovano questi due campi:

Il numero di jiffies che questo processo è stato in programma in modalità utente.

STIME% lu

Il numero di jiffies che questo processo è stato in programma in modalità kernel.

cutime% ld

La parte problematica ecco l'unità nella quale sono riportati i valori. Un jiffy è 1/HZ secondi, in cui HZ è la frequenza del clock tick del kernel e la determinazione di questa frequenza di clock è la parte più difficile.

Se è necessario questo solo per un sistema specifico, è sufficiente eseguire alcuni test o controllare le intestazioni del kernel e inserire questo valore nel programma. Se vuoi sapere come determinarlo in un modo più generale, guarda come funziona uno strumento come top guardando its source code (vedi la funzione old_Hertz_hack() e i relativi commenti)

+0

Ho scoperto un modo per ottenere il valore Hz su una macchina particolare: cat/boot/config-'uname -r' | grep HZ –

1

Forse un modo più semplice di facendo questo è usare getrusage con l'estensione specifica di linux di RUSAGE_THREAD. Una volta che hai questi tempi, puoi semplicemente sottrarre i tempi dell'ultima volta che hai campionato, e dividere per il tempo reale passato dall'ultimo campione. Questo dice che ottieni l'utilizzo della CPU in percentuale.

Per la documentazione specifica di Linux, vedere rusage liunx man page.

0

è possibile utilizzare il comando "top" per trovare prima l'ID del processo.

Dopo di che, è possibile utilizzare il seguente comando per solo utilizzo della visualizzazione CPU/memoria per il processo

top -p {pid} 

Dopo di che, si può premere il tasto "Shift" + "h" per mostrare i fili