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.