2.3. Diskdevstat e netdevstat

As ferramentas Diskdevstat e netdevstat são SystemTap que coletam informações detalhadas sobre a atividade do disco e atividade de rede de todos os aplicativos rodando em um sistema. Estas ferramentas foram inspiradas por PowerTOP, o que exibe o número de ativamentos de CPU por cada aplicativo por segundo (consulte o Seção 2.2, “PowerTOP”). As estatísticas que estas ferramentas coletam, permitem que você identifique aplicativos que desperdiçam a energia com muitas operações de E/S pequenas, ao invés de menos operações maiores. Outras ferramentas de monitoramento que medem somente velocidades de transferência, não ajudam a identificar este tipo de uso.
Instalar estas ferramentas com o SystemTap com o comando:
yum install systemtap tuned-utils kernel-debuginfo
Rodar estas ferramentas com o comando:
diskdevstat
ou o comando:
netdevstat
Ambos comandos podem tomar três parâmetros, como se segue:
diskdevstat update_interval total_duration display_histogram
netdevstat update_interval total_duration display_histogram
update_interval
O tempo em segundos entre atualizações da exibição. Padrão 5
total_duration
O tempo em segundos para a execução total. Padrão: 86400 (1 dia)
display_histogram
Sinalização se o histograma para todos os dados colecionados no final da execução.
O resultado se assemelha ao de PowerTOP. Aqui segue um resultado de amostra de uma execução de diskdevstat mais longa em um sistema Fedora 10 executando um 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
As colunas são:
PID
O ID do processo do aplicativo
UID
o ID de usuário sob o qual o aplicativo está em execução
DEV
o dispositivo no qual a E/S aconteceu
WRITE_CNT
o número total de operações de gravação
WRITE_MIN
o tempo mínimo tomado para 2 gravações consecutivas (em segundos)
WRITE_MAX
o tempo mais longo gasto para duas gravações consecutivas (em segundos)
WRITE_AVG
a média de tempo gasta para duas gravações consecutivas (em segundos)
READ_CNT
o número total de operações de leitura
READ_MIN
o tempo mais curto gasto para duas leituras consecutivas (em segundos)
READ_MAX
o tempo mais long gasto para duas leituras consecutivas (em segundos)
READ_AVG
a média de tempo gasta para duas leituras consecutivas (em segundos)
COMMAND
o nome do processo
neste exemplo, três aplicativos bastante óbvios se sobresaem:
  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
Estes três aplicativos possuem um WRITE_CNT maior do que 0, o que significa que eles realizam alguma forma de gravação durante a medida. Destes, o plasma era o ofendedor pior pela principal razão: ele realizava a maior parte das operações de gravação, e é claro, a média de tempo entre gravações era a mais baixa. O Plasma seria então o melhor candidado a investigar se você estivesse preocupado com os aplicativos de energia ineficiente.
Use os comandos strace e ltrace para examinar aplicativos mais de perto, rastreando todas as chamadas de sistema de ID de processo existentes. Neste exemplo, você pode executar:
strace -p 2789
Neste exemplo, o resultado de strace continha um modelo repetitivo a cada 45 segundos que abria o arquivo cache do ícone KDE do usuário para gravação seguido de um fechamento imediato do arquivo novamente. Isto levava à uma gravação física necessária para o disco rígico, pois o metadado do arquivo (principalmente, o tempo de modificação) tinha sido mudado. O reparo final era para evitar aquelas chamadas desnecessárias quando não ocorria nenhuma atualização nos ícones.