Per misurare il tempo totale della CPU di un utente, sto usando il campo "utime" tra /proc/[pid]/stat
:
utime %lu Amount of time that this process has been scheduled in user
mode, measured in clock ticks (divide by
sysconf(_SC_CLK_TCK). This includes guest time, guest_time
(time spent running a virtual CPU, see below), so that
applications that are not aware of the guest time field do
not lose that time from their calculations.
(da man proc (5) )
Quindi, il mio "user utime" è la somma utime
di tutti i PID che questo utente sta eseguendo.
Spero che questo mi dia un valore preciso per il numero di secondi CPU che questo utente ha trascorso. Sono sulla buona strada?
Alcune delle cose che non capisco o non prendo ancora in considerazione:
- Ogni PID ha anche un PID principale (o zero). Ma sto contando ogni PID, non solo quelli con un ppid di 0. È corretto?
- Ci sono, oltre a utime, stime, cutime e cstime. Devo preoccuparmi di quelli? Suppongo che utime sia il numero totale di secondi della cpu per un PID, senza contare il genitore.
Se calcolo il tempo totale della CPU del sistema utilizzando /proc/uptime
, questo valore è abbastanza vicino alla mia somma per tutti gli utenti, ma la differenza è significativa. Ad esempio (in minuti):
system cpu_time: 96.13
sum of users_cputime: 111.45
Correzione:
Ottengo valori "dall'aspetto sensato" per tutti i tipi di cose. Al momento sto usando la somma di utime, stime, cutime e cstime. E riporta valori che, anche se non li capisco, si correlano molto bene con le misurazioni di time
.
Se sono completamente sulla strada sbagliata, c'è un'altra domanda:
- Qual è il modo più giusto per monitorare il tempo totale della CPU - per utente? (+500 Bounty) su Chiedi a Ubuntu
/proc/uptime
? Quindi immagino che l'I / O attribuito al compito inattivo spiegherebbe la differenza. Non so nulla sull'argomento, quindi sospetto che mi manchi qualcosa di grave: non mi aspetterei che succeda così tanto nel compito inattivo, soprattutto considerando che la tua somma di utenti cputime probabilmente mancherà molto a breve- processi vissuti.
/proc/cputime
non ha alcuna informazione sul tempo impiegato dalle CPU nell'esecuzione dei processi, quindi sono perplesso quale sia il tuo calcolo del "sistema cpu_time". Se stai facendo qualcosa con il secondo numero, è il tempo impiegato dall'attività inattiva ; Non so esattamente cosa significhi in pratica.