2011-09-04 9 views

risposta

4

Da Documentation/filesystems/proc.txt:

(...) Questi numeri identificano la quantità di tempo che la CPU ha trascorso l'esecuzione di diversi tipi di lavoro. Le unità di tempo sono in USER_HZ (tipicamente centesimi di secondo).

Quindi per capire l'utilizzo in termini di percentuali è necessario:

  • Scopri cosa USER_HZ è in macchina
  • scoprire quanto tempo è passato da quando il sistema avviato.

Il secondo è semplice: c'è una riga btime nello stesso file che è possibile utilizzare per quello. Per USER_HZ, controlla How to get number of mili seconds per jiffy.

+0

Ci proverò e tornerò. – jgr

+0

Questo mi porterà la quantità totale di% speso in utente, bello ecc., Giusto? Sono interrotto nell'importo attuale, cioè al momento presente. – jgr

+0

Devi tracciarlo da solo leggendo quel file per esempio ogni secondo e "diff" i valori. – Mat

10

Questo codice calcola l'utilizzo dell'utente distribuito su tutti i core.

import os 
import time 
import multiprocessing 

def main(): 
    jiffy = os.sysconf(os.sysconf_names['SC_CLK_TCK']) 
    num_cpu = multiprocessing.cpu_count() 

    stat_fd = open('/proc/stat') 
    stat_buf = stat_fd.readlines()[0].split() 
    user, nice, sys, idle, iowait, irq, sirq = (float(stat_buf[1]), float(stat_buf[2]), 
              float(stat_buf[3]), float(stat_buf[4]), 
              float(stat_buf[5]), float(stat_buf[6]), 
              float(stat_buf[7])) 

    stat_fd.close() 

    time.sleep(1) 

    stat_fd = open('/proc/stat') 
    stat_buf = stat_fd.readlines()[0].split() 
    user_n, nice_n, sys_n, idle_n, iowait_n, irq_n, sirq_n = (float(stat_buf[1]), float(stat_buf[2]),. 
                  float(stat_buf[3]), float(stat_buf[4]), 
                  float(stat_buf[5]), float(stat_buf[6]), 
                  float(stat_buf[7])) 

    stat_fd.close() 

    print ((user_n - user) * 100/jiffy)/num_cpu 

if __name__ == '__main__': 
    main()