2.3. Diskdevstat e netdevstat
Diskdevstat e netdevstat sono tool di SystemTap usati per raccogliere informazioni dettagliate sull'attività del disco e della rete di tutte le applicazioni in esecuzione su di un sistema. Questi tool si ispirano a PowerTOP, il quale mostra il numero di CPU wakeup per ogni applicazione al secondo (consultare Sezione 2.2, «PowerTOP»). Le informazioni raccolte dai suddetti tool permetteranno all'utente di identificare le applicazioni che consumano inutilmente energia le quali presentano numerose piccole operazioni I/O e no operazioni più grandi ma meno frequenti. Altri tool di monitoraggio in grado di misurare la velocità di trasferimento non aiutano ad identificare questo tipo d'uso.
Installare questi tool con SystemTap usando il comando:
yum install systemtap tuned-utils kernel-debuginfo
Eseguire i tool con il comando:
diskdevstat
o il comando:
netdevstat
Entrambi i comandi possono comprendere fino a tre parametri:
diskdevstat update_interval total_duration display_histogram
netdevstat update_interval total_duration display_histogram
- update_interval
- Il periodo in secondi tra gli aggiornamenti del display. Per impostazione predefinita:
5
- total_duration
- Il periodo in secondi dell'intera esecuzione. Per impostazione predefinita:
86400
(1 giorno) - display_histogram
- Indica se usare gli istogrammi per tutti i dati raccolti alla fine della esecuzione.
L'output somiglia al PowerTOP. Di seguito viene riportato un output d'esempio di una esecuzione più lunga di diskdevstat su di un sistema Fedora 10 sul quale viene eseguito KDE 4.2:
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 15494 0 sda1 0 0.000 0.000 0.000 758 0.000 0.012 0.000 0logwatch 15520 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 15549 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 15585 0 sda1 0 0.000 0.000 0.000 108 0.001 0.002 0.000 perl 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 15429 0 sda1 0 0.000 0.000 0.000 62 0.009 0.009 0.000 crond 15379 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15473 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15415 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15433 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15425 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15375 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15477 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15469 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15419 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15481 0 sda1 0 0.000 0.000 0.000 61 0.000 0.001 0.000 crond 15355 0 sda1 0 0.000 0.000 0.000 37 0.000 0.014 0.001 laptop_mode 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd 15575 0 sda1 0 0.000 0.000 0.000 16 0.000 0.000 0.000 cat 15581 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15582 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15579 0 sda1 0 0.000 0.000 0.000 12 0.000 0.001 0.000 perl 15580 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15354 0 sda1 0 0.000 0.000 0.000 12 0.000 0.170 0.014 sh 15584 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15548 0 sda1 0 0.000 0.000 0.000 12 0.001 0.014 0.001 perl 15577 0 sda1 0 0.000 0.000 0.000 12 0.001 0.003 0.000 perl 15519 0 sda1 0 0.000 0.000 0.000 12 0.001 0.005 0.000 perl 15578 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15583 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15547 0 sda1 0 0.000 0.000 0.000 11 0.000 0.002 0.000 perl 15576 0 sda1 0 0.000 0.000 0.000 11 0.001 0.001 0.000 perl 15518 0 sda1 0 0.000 0.000 0.000 11 0.000 0.001 0.000 perl 15354 0 sda1 0 0.000 0.000 0.000 10 0.053 0.053 0.005 lm_lid.sh
Le colonne sono:
- PID
- l'ID del processo dell'applicazione
- UID
- l'ID utente con il quale le applicazioni sono in esecuzione
- DEV
- il dispositivo sul quale si è verificato l'I/O
- WRITE_CNT
- il numero totale di operazioni di scrittura
- WRITE_MIN
- il tempo più breve usato da due operazioni consecutive di scrittura (in secondi)
- WRITE_MAX
- il tempo più lungo usato da due operazioni consecutive di scrittura (in secondi)
- WRITE_AVG
- il tempo medio usato da due operazioni consecutive di scrittura (in secondi)
- READ_CNT
- il numero totale di operazioni di lettura
- READ_MIN
- il tempo più breve usato da due operazioni consecutive di lettura (in secondi)
- READ_MAX
- il tempo più lungo usato da due operazioni consecutive di lettura (in secondi)
- READ_AVG
- il tempo medio usato da due operazioni consecutive di lettura (in secondi)
- COMMAND
- il nome del processo
In questo esempio sono in particolare risalto tre applicazioni:
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd
Queste applicazioni hanno un
WRITE_CNT
maggiore di 0
, ciò significa che è stato eseguito un processo di scrittura durante la misurazione. Tra questi plasma risulta essere la peggior applicazione: infatti ha eseguito il maggior numero di operazioni di scrittura, e di conseguenza il tempo medio tra operazioni di scrittura è risultato il più basso. Per questo motivo Plasma rappresenta il miglior candidato da investigare se si desidera identificare le applicazioni più inefficienti in termini di consumo energetico.
Utilizzare i comandi strace e ltrace per esaminare le applicazioni in modo più dettagliato controllando tutte le chiamate dei sistemi di un dato ID del processo. In questo esempio sarà possibile eseguire:
strace -p 2789
In questo esempio l'output di
strace
presentava un percorso ripetitivo ogni 45 secondi il quale apre un file cache dell'icona KDE dell'utente per un processo di scrittura seguito dalla chiusura del file. Tale operazione comportava una scrittura del disco fisso poichè i metadati del file (in particolare il periodo della modifica) venivano modificati. La correzione finale impedisce l'esecuzione di chiamate non necessarie senza il verificarsi di aggiornamenti per le icone.