Marcio Cunha

Disco lento no Linux? Como achar gargalos de I/O com o perf

Aprenda a rastrear chamadas de sistema e descobrir a origem exata da latência de disco no Linux usando o utilitário perf passo a passo.

Marcio Cunha•5 min
Também disponível em:EnglishEspañol
Resumo
  • O utilitário perf conecta a instrumentação interna do núcleo do sistema operacional para coletar eventos de hardware e software sem recompilar códigos
  • Eventos de tracepoint do subsistema de blocos revelam o atraso real entre a submissão e o término de uma requisição de leitura ou escrita
  • Medir o tempo gasto em chamadas de sistema como read e write expõe gargalos invisíveis a ferramentas genéricas de monitoramento de infraestrutura
  • Correlacionar métricas de disco e CPU evita falsos diagnósticos em servidores que sofrem com contenção de barramento de armazenamento
  • A análise profunda de latências reduz custos operacionais ao direcionar correções precisas para os processos que mais travam o fluxo de dados

O que é o comando perf e por que ele importa para o armazenamento

Quando um servidor Linux começa a responder com lentidão extrema, o primeiro instinto de grande parte dos administradores é olhar o uso geral da memória ou da unidade de processamento central, a CPU. Muitas vezes, no entanto, a raiz do problema está em operações de disco travadas ou lentas, conhecidas como gargalos de input/output ou I/O. Para investigar esses cenários invisíveis a ferramentas básicas, engenheiros recorrem ao comando perf, um utilitário nativo de diagnóstico muito poderoso que acompanha o núcleo do sistema operacional.

Na prática, o perf funciona como uma caixa-preta capaz de interceptar eventos em tempo real, desde o momento em que um programa solicita um dado ao disco até a resposta final do hardware. Se você já tentou diagnosticar problemas de lentidão usando apenas comandos tradicionais de monitoramento de infraestrutura, como explicamos em nosso artigo sobre como achar gargalos de E/S com iostat, percebeu que eles mostram a média do problema, mas raramente revelam qual processo exato está gerando a espera excessiva. É exatamente nessa lacuna de precisão que o utilitário perf se torna indispensável para qualquer engenheiro de sistemas.

Como funcionam as chamadas de sistema e o rastreamento no Linux

Para entender como o perf monitora o disco, precisamos decifrar o caminho que um arquivo percorre. Quando uma aplicação precisa ler ou escrever dados, ela não fala diretamente com a controladora física do disco rígido ou do SSD. Ela faz o que chamamos de system call, ou chamada de sistema, que é um pedido formal para que o núcleo do sistema operacional interaja com o hardware de forma segura e controlada.

Essas chamadas de sistema geram eventos que podem ser medidos com precisão cirúrgica. O perf se conecta a pontos específicos no código do núcleo chamados tracepoints. Um tracepoint é como um sensor instalado em uma estrada que registra exatamente a hora de passagem de cada veículo. No nosso caso, o veículo é o bloco de dados trafegando entre a memória RAM e o dispositivo de armazenamento, permitindo calcular latências com margem de erro mínima.

Preparando o ambiente e instalando as ferramentas de diagnóstico

Antes de começarmos a rastrear o comportamento do disco, precisamos garantir que o utilitário está instalado corretamente e possui as permissões necessárias para interagir com os contadores de desempenho do processador e do núcleo. Em distribuições baseadas em Debian ou Ubuntu, a instalação geralmente ocorre através do gerenciador de pacotes padrão do sistema.

Para verificar se o pacote correspondente à versão atual do seu kernel está disponível e pronto para uso na máquina, execute o comando abaixo no terminal com privilégios administrativos:

sudo apt update && sudo apt install linux-tools-common linux-tools-$(uname -r)

Após a conclusão bem-sucedida do comando anterior, teste o funcionamento básico do utilitário solicitando a exibição da ajuda ou listando os eventos disponíveis no sistema. Se o comando retornar a lista sem erros de permissão ou ausência de símbolos de depuração, o seu ambiente está pronto para capturar dados reais de desempenho de I/O.

Como rastrear eventos de I/O de blocos com o comando perf

O subsistema responsável por gerenciar a leitura e a escrita nos discos rígidos e SSDs no Linux é o bloco, comumente chamado de block layer. O perf possui ferramentas específicas para monitorar esse subsistema através da opção record, que grava eventos em um arquivo local para posterior inspeção detalhada na tela.

Para iniciar uma gravação focada nos eventos de submissão e conclusão de requisições de bloco durante um intervalo crítico de tráfego, utilize o comando estruturado abaixo no seu terminal:

sudo perf record -e block:block_rq_issue,block:block_rq_complete -a sleep 10

O comando acima instrui o sistema a coletar todos os eventos de envio e término de blocos em todas as CPUs do servidor durante exatamente dez segundos. O parâmetro -a garante que o monitoramento seja global e não fique restrito a um único processo isolado, capturando o panorama completo da atividade de armazenamento da máquina.

Analisando os relatórios de latência e identificando culpados

Depois que a gravação dos dados de desempenho é concluída, o perf gera um arquivo oculto chamado perf.data no diretório atual de trabalho. Para transformar esse amontoado de registros binários em um relatório legível que aponte quais processos provocaram as maiores filas, usamos o comando de relatório interativo.

Execute a instrução a seguir para abrir o painel de análise sumarizada diretamente no seu console de texto:

sudo perf report --stdio

Neste relatório textual, você conseguirá observar a distribuição percentual do tempo de CPU gasto em funções do núcleo relacionadas ao gerenciamento de disco. Se notar que chamadas ligadas a rotinas de espera de drivers de armazenamento consomem o topo da lista, você encontrou a prova matemática de que o seu subsistema de I/O está estrangulando o desempenho geral do servidor.

Correlacionando latências de disco com a saúde geral da máquina

Identificar um gargalo de I/O isolado é apenas a metade do trabalho de engenharia. Muitas vezes, o disco está lento não porque a controladora física falhou, mas porque processos secundários em segundo plano estão saturando o barramento com operações desnecessárias. O monitoramento contínuo ajuda a evitar que você gaste tempo trocando hardware quando o real culpado é um banco de dados mal configurado ou um serviço gerando logs excessivos.

Se o espaço em disco estiver comprometido por arquivos temporários acumulados pelo sistema operacional, vale a pena verificar dicas complementares de limpeza, como o procedimento que detalhamos em nosso artigo sobre como limpar o cache do systemd journal e liberar disco no Linux. Garantir que o sistema tenha espaço livre adequado reduz a fragmentação e alivia o trabalho do subsistema de blocos investigado com o perf. Para aprofundar esses conceitos na prática em produção, confira também nossa análise técnica sobre Como testar o circuito de charge da placa-mãe com multímetro.

Considerações finais

O uso avançado do comando perf transforma a depuração de gargalos de I/O de um processo baseado em adivinhação em uma ciência exata baseada em telemetria profunda do núcleo. Ao rastrear chamadas de sistema e eventos do subsistema de blocos, engenheiros ganham a capacidade de isolar latências milimétricas e resolver problemas crônicos de desempenho em ambientes de produção exigentes.

Manter essa rotina de inspeção detalhada garante maior estabilidade para suas aplicações, reduz custos com infraestrutura superdimensionada e assegura que qualquer anomalia de disco seja tratada com precisão cirúrgica antes de impactar os usuários finais.