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.