Monitorar e avaliar o desempenho de Entrada/Saída (E/S) do disco é crucial para diagnosticar problemas de gargalo em sistemas Linux. Este guia apresenta comandos úteis para análise em tempo real e ferramentas para testes de desempenho.
- Comandos para Monitorar a Atividade de E/S do Disco
1.1 Utilitário top
O comando top fornece uma visão geral do sistema. Para um indicativo rápido da carga de E/S do disco, observe a coluna wa% (tempo de espera de E/S). Um valor consistentemente alto pode sugerir intensa atividade de disco, embora também possa estar relacionado a E/S de rede ou outras inetrrupções. Para detalhes completos sobre todas as métricas, consulte a documentação do comando.
1.2 Utilitário sar
O sar é uma ferramenta abrangente para análise de desempenho. Para visualizar estatísticas de disco em tempo real, use a opção -d com exibição de nomes de dispositivo (-p):
sar -d -p 1 3
Este comando coleta dados de todos os discos a cada 1 segundo, três vezes. As métricas-chave incluem:
- await: Tempo médio (em milissegundos) que uma solicitação de E/S gasta na fila e sendo atendida.
- svctm: Tempo médio (em milissegundos) para completar uma solicitação de E/S no dispositivo.
- %util: Porcentagem do tempo em que o dispositivo estava ocupado processando solicitações.
Interpretação: Em condições saudáveis, svctm deve ser menor que await. Se %util se aproximar constantemente de 100%, indica que o disco está sobrecarregado, representando um potencial gargalo. Para analisar relatórios históricos armazenados em /var/log/sa/, utilize a opção -f:
sar -d -p -f /var/log/sa/sa21 | less
1.3 Utilitário iostat
O iostat oferece uma visão detalhada das métricas de E/S por dispositivo. A saída contém muitas das mesmas métricas do sar, como await, svctm e %util.
iostat -xdm 2 2
A opção -x exibe estatísticas estendidas, -d foca em discos, -m exibe valores em megabytes e 2 2 define o intervalo e a contagem de amostragem.
1.4 Utilitário vmstat
O vmstat reporta estatísticas de virtualização de memória, incluindo blocos de E/S. Execute:
vmstat 1 4
As colunas bi (blocos recebidos) e bo (blocos enviados) indicam a taxa de transferência de blocos em relação a todos os dispositivos de bloco (discos, etc.). Valores persistentemente altos sugerem intensa atividade de E/S no disco.
- Testando a Performence de E/S do Disco
2.1 Utilitário hdparm
O hdparm pode realizar testes simples de leitura. Atenção: Esta ferramenta mede apenas a velocidade de leitura.
sudo hdparm -Tt /dev/sda
O teste -T mede a leitura de cache do Linux (memória), e -t mede a leitura direta do disco. O resultado do -t é a taxa de leitura de disco mais representativa.
2.2 Utilitário dd
O dd pode ser usado para testes aproximados de velocidade de leitura e escrita. Para uma medição mais precisa, use a flag oflag=direct (escrita) ou iflag=direct (leitura) para contornar o cache do sistema.
Teste de Escrita:
dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 oflag=direct status=progress
rm -f /tmp/testfile
Teste de Leitura: (Assumindo um arquivo de teste existente)
dd if=/tmp/largefile of=/dev/null bs=1M iflag=direct status=progress
Os resultaods fornecem uma estimativa da taxa de transferência em MB/s.
2.3 Utilitário fio
O fio é a ferramenta padrão da indústria para testes detalhados e flexíveis de desempenho de E/S (IOPS, latência e taxa de transferência). Ele permite simular cargas de trabalho variadas. Aqui estão alguns exemplos de perfil de teste:
Leitura Sequencial:
fio --name=seq_read --ioengine=libaio --direct=1 --bs=128k --size=1G --numjobs=1 --rw=read --filename=/tmp/fiotest
Escrita Aleatória:
fio --name=rand_write --ioengine=libaio --direct=1 --bs=4k --size=1G --numjobs=4 --rw=randwrite --iodepth=32 --filename=/tmp/fiotest
Leitura e Escrita Aleatórias Mistas (70/30):
fio --name=rand_mixed --ioengine=libaio --direct=1 --bs=4k --size=1G --numjobs=4 --rw=randrw --rwmixread=70 --iodepth=32 --filename=/tmp/fiotest
Os parâmetros --numjobs (número de workers) e --iodepth (profundidade da fila de E/S) são cruciais para simular cargas realistas e extrair o máximo desempenho do disco.