2.3. Diskdevstat y netdevstat

Diskdevstat y netdevstat son herramientas de SystemTap que colectan información detallada sobre la actividad de disco y de la red de todas las aplicaciones que se ejecutan en un sistema. Estas herramientas fueron inspiradas por PowerTOP, la cual muestra el número de despertadores de CPU por cada aplicación por segundo (consulte la Sección 2.2, “PowerTOP”). La estadística que recogen estas herramientas le permiten identificar aplicaciones que desperdician energía con operaciones de E/S muy pequeñas más que con las más grandes. Otras herramientas de monitorización que solo miden velocidades de transferencia no ayudan a identificar este tipo de uso.
Instalar estas herramientas con SystemTap con el comando:
yum install systemtap tuned-utils kernel-debuginfo
Ejecute las herramientas con el comando:
diskdevstat
o el comando:
netdevstat
Ambos comandos pueden tomar hasta tres parámetros, así:
diskdevstat update_interval duración_total mostrar_histograma
netdevstat update_interval duración_total mostrar_histograma
actualizar_intervalo
El tiempo en segundos entre actualizaciones de la pantalla. Predeterminado: 5
duración_total
El tiempo en segundos para el total. Predeterminado: 86400 (1 día)
mostrar_histograma
Indica si hacer histograma para todos los datos recolectados al final de la ejecución.
La salida se parece a la de PowerTOP. A continuación, una muestra de una ejecución más larga de diskdevstat en un sistema que ejecuta Fedora 10 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
Las columnas son:
PID
El ID de proceso de la aplicación
UID
El ID de usuario bajo el cual se ejecutan las aplicaciones
DEV
El dispositivo en el cual la E/S tienen lugar
WRITE_CNT
El número total de operaciones de escritura
WRITE_MIN
El tiempo mínimo para dos escritos consecutivos (en segundos)
WRITE_MAX
El tiempo máximo para dos escritos consecutivos (en segundos)
WRITE_AVG
El tiempo promedio para dos escritos consecutivos (en segundos)
READ_CNT
El número total de operaciones de lectura
READ_MIN
El tiempo mínimo para dos lecturas consecutivas (en segundos)
READ_MAX
El máximo tiempo para dos lecturas consecutivas (en segundos)
READ_AVG
El tiempo promedio para dos lecturas consecutivas (en segundos)
COMMAND
El nombre del proceso
En este ejemplo, tres aplicaciones muy obvias llaman la atención:
  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
Estas tres aplicaciones tienen un WRITE_CNT mayor que 0, lo cual significa que realizan un forma de escritura durante la medición. De ellas, plasma fue el peor transgresor en un alto grado: realizó la mayoría de operaciones de escritura y por lo tanto el promedio de tiempo entre escrituras fue el más bajo. Por esa razón Plasma sería el mejor candidato para investigar si está interesado en aplicaciones ineficientes de energía.
Utilice los comandos strace y ltrace para examinar aplicaciones de una forma más cercana al rastrear todas las llamadas de sistema del ID de proceso determinado. En este ejemplo, puede ejecutar:
strace -p 2789
En este ejemplo, la salida de strace contenía un patrón repetitivo cada 45 segundos que abría para escribir el archivo cache del icono de KDE del usuario para escribir y luego lo cerraba inmediatamente. Esto llevaba necesariamente a una escritura física al disco duro cuando los metadatos del archivo (específicamente, el tiempo de modificación) habían cambiado. La corrección final era evitar llamadas innecesarias cuando no se presentaban actualizaciones de iconos.