Pesquisa de site

Perf- Uma ferramenta de monitoramento e análise de desempenho para Linux


Quando falamos de desempenho em computação, referimo-nos à relação entre os nossos recursos e as tarefas que eles nos permitem realizar num determinado período de tempo.

Numa época de competição acirrada entre empresas, é importante aprendermos a utilizar o que temos da melhor forma possível. O desperdício de recursos de hardware ou software, ou a falta de capacidade de saber utilizá-los de forma mais eficiente, acaba por ser uma perda que simplesmente não podemos suportar se quisermos estar no topo do nosso jogo.

Ao mesmo tempo, devemos ter cuidado para não levar os nossos recursos a um limite onde a utilização sustentada possa provocar danos irreparáveis.

Neste artigo apresentaremos uma ferramenta de análise de desempenho relativamente nova e forneceremos dicas que você pode usar para monitorar seus sistemas Linux, incluindo hardware e aplicativos. Isso o ajudará a garantir que eles operem de forma que você seja capaz de produzir os resultados desejados sem desperdiçar recursos ou sua própria energia.

Apresentando e instalando Perf no Linux

Entre outras, o Linux fornece uma ferramenta de monitoramento e análise de desempenho chamada convenientemente perf. Então, o que distingue o perf de outras ferramentas conhecidas com as quais você já está familiarizado?

A resposta é que perf fornece acesso à Unidade de Monitoramento de Desempenho na CPU e, portanto, nos permite observar de perto o comportamento do hardware e seus eventos associados.

Além disso, também pode monitorar eventos de software e criar relatórios a partir dos dados coletados.

Você pode instalar perf em distribuições baseadas em RPM com:

yum update && yum install perf     [CentOS / RHEL / Fedora]
dnf update && dnf install perf     [Fedora 23+ releases]

No Debian e derivados:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

Se uname -r no comando acima retornar strings extras além da versão real (3.2.0-23-generic no meu caso), talvez seja necessário digitar linux-tools-3.2.0-23 em vez de usar a saída de uname.

Também é importante observar que perf produz resultados incompletos quando executado em um convidado no VirtualBox ou VMWare, pois eles não permitem acesso a contadores de hardware como outras tecnologias de virtualização (como KVM ou XEN) fazem. .

Além disso, lembre-se de que alguns comandos perf podem estar restritos ao root por padrão, o que pode ser desativado (até que o sistema seja reinicializado) fazendo:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Se você precisar desativar o modo paranóico permanentemente, atualize a seguinte configuração no arquivo /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Subcomandos

Depois de instalar o perf, você pode consultar sua página de manual para obter uma lista de subcomandos disponíveis (você pode pensar nos subcomandos como opções especiais que abrem uma janela específica no sistema). Para obter resultados melhores e mais completos, use perf como root ou através do sudo.

Lista de desempenho

lista perf (sem opções) retorna todos os tipos de eventos simbólicos (lista longa). Se você deseja visualizar a lista de eventos disponíveis em uma categoria específica, use perf list seguido do nome da categoria ([hw|sw|cache|tracepoint|pmu|event_glob ]), como:

Exibir lista de eventos predefinidos de software no Linux:

perf list sw 

Estatística de desempenho

perf stat executa um comando e coleta estatísticas de desempenho do Linux durante a execução de tal comando. O que acontece em nosso sistema quando executamos dd?

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

As estatísticas mostradas acima indicam, entre outras coisas:

  1. A execução do comando dd levou 21,812281 milissegundos de CPU. Se dividirmos esse número pelo valor de “segundos decorridos” abaixo (23,914596 milissegundos), o resultado é 0,912 (CPU utilizada).
  2. Enquanto o comando foi executado, 15 trocas de contexto (também conhecidas como trocas de processo) indicam que as CPUs foram trocadas 15 vezes de um processo (ou thread) para outro.
  3. 2 migrações de CPU é o resultado esperado quando em uma CPU de 2 núcleos a carga de trabalho é distribuída uniformemente entre o número de núcleos.
    Durante esse tempo (21,812281 milissegundos), o número total de ciclos de CPU consumidos foi 62.025.623, que dividido por 0,021812281 segundos dá 2,843 GHz.
  4. Se dividirmos o número de ciclos pela contagem total de instruções, obteremos 4,9 ciclos por instrução, o que significa que cada instrução levou quase 5 ciclos de CPU para ser concluída (em média). Podemos culpar isso (pelo menos em parte) pelo número de ramificações e falhas de ramificação (veja abaixo), que acabam desperdiçando ou utilizando indevidamente os ciclos da CPU.
  5. À medida que o comando foi executado, um total de 3.552.630 ramificações foram encontradas. Esta é a representação no nível da CPU dos pontos de decisão e loops no código. Quanto mais filiais, menor será o desempenho. Para compensar isso, todas as CPUs modernas tentam prever o fluxo que o código seguirá. 51.348 falhas de ramificação indicam que o recurso de previsão estava errado em 1,45% das vezes.

O mesmo princípio se aplica à coleta de estatísticas (ou em outras palavras, criação de perfil) enquanto um aplicativo está em execução. Basta iniciar o aplicativo desejado e após um período de tempo razoável (que depende de você) fechá-lo, e perf exibirá as estatísticas na tela. Ao analisar essas estatísticas, você pode identificar possíveis problemas.

Topo de desempenho

perf top é semelhante ao comando top, pois exibe um perfil do sistema quase em tempo real (também conhecido como análise ao vivo).

Com a opção -a você exibirá todos os tipos de eventos conhecidos, enquanto a opção -e permitirá que você escolha uma categoria de evento específica (conforme retornado por lista de desempenho):

Irá exibir todos os eventos de ciclos.

perf top -a 

Irá exibir todos os eventos relacionados ao relógio da CPU.

perf top -e cpu-clock 

A primeira coluna da saída acima representa a porcentagem de amostras colhidas desde o início da execução, agrupadas por função Símbolo e Objeto Compartilhado. Mais opções estão disponíveis em man perf-top.

Registro de desempenho

O registro perf executa um comando e salva os dados estatísticos em um arquivo chamado perf.data dentro do diretório de trabalho atual. Ele funciona de forma semelhante ao perf stat.

Digite perf record seguido de um comando:

perf record dd if=/dev/null of=test.iso bs=10M count=1

Relatório de desempenho

O relatório de desempenho formata os dados coletados em perf.data acima em um relatório de desempenho:

sudo perf report

Todos os subcomandos acima têm uma página de manual dedicada que pode ser invocada como:

man perf-subcommand

onde subcomando é lista, estat, top, registro ou relatório. Estes são os subcomandos usados com mais frequência; outros estão listados na documentação (consulte a seção Resumo para obter o link).

Resumo

Neste guia apresentamos o perf, uma ferramenta de monitoramento e análise de desempenho para Linux. Recomendamos fortemente que você se familiarize com sua documentação, que é mantida em https://perf.wiki.kernel.org.

Se você encontrar aplicativos que consomem uma alta porcentagem de recursos, considere modificar o código-fonte ou usar outras alternativas.

Se você tiver dúvidas sobre este artigo ou sugestões para melhorar, somos todos ouvidos. Sinta-se à vontade para entrar em contato conosco usando o formulário de comentários abaixo.