Perf- Uma Ferramenta de Monitoramento e Análise de Desempenho para Linux

Quando falamos de desempenho em computação, estamos nos referindo à relação entre nossos recursos e as tarefas que eles nos permitem completar em um determinado período de tempo.

Perf- A Performance Monitoring and Analysis Tool for Linux

Em um dia de competição acirrada entre empresas, é importante que aprendamos a usar o que temos da melhor forma possível. O desperdício de recursos de hardware ou software, ou a falta de habilidade para saber como usá-los de forma mais eficiente, acaba sendo uma perda que simplesmente não podemos nos dar ao luxo se quisermos estar no topo do nosso jogo.

Ao mesmo tempo, devemos ter cuidado para não levar nossos recursos a um limite onde o uso contínuo resultará em danos irreparáveis.

Neste artigo, vamos apresentar a você uma ferramenta de análise de desempenho relativamente nova e fornecer dicas que você pode usar para monitorar seus sistemas Linux, incluindo hardware e aplicativos. Isso ajudará você 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 o Perf no Linux

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

A resposta é que o perf fornece acesso à Unidade de Monitoramento de Desempenho na CPU, e assim nos permite ter uma visão detalhada do comportamento do hardware e seus eventos associados.

Você 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 o comando uname -r acima retornar strings extras além da versão real (3.2.0-23-generic no meu caso), você pode precisar digitar linux-tools-3.2.0-23 em vez de usar a saída do uname.

Também é importante notar que o perf fornece resultados incompletos quando executado em um convidado em cima do VirtualBox ou VMWare pois eles não permitem acesso aos contadores de hardware como outras tecnologias de virtualização (como KVM ou XEN) fazem.

Além disso, tenha em mente que alguns comandos do perf podem ser restritos ao root por padrão, o que pode ser desativado (até que o sistema seja reiniciado) fazendo:

# echo 0 > /proc/sys/kernel/perf_event_paranoid

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

kernel.perf_event_paranoid = 0

Subcomandos

Depois de instalar o perf, consulte 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 os melhores e mais completos resultados, use o perf como root ou através do sudo.

Lista de Perf

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

Exibir lista de eventos pré-definidos de software no Linux:

# perf list sw 
List Software Pre-defined Events in Linux

Estatísticas do Perf

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

# perf stat dd if=/dev/zero of=test.iso bs=10M count=1
Collects Performance Statistics of Linux Command

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 “tempo decorrido em segundos” abaixo (23.914596 milissegundos), obtemos 0.912 (CPU utilizado).
  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 são 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 resulta em 2,843 GHz.
  4. Se dividirmos o número de ciclos pelo total de instruções, obtemos 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 atribuir isso (pelo menos em parte) ao número de branches e branch-misses (veja abaixo), que acabam desperdiçando ou utilizando erroneamente ciclos de CPU.
  5. Ao executar o comando, um total de 3.552.630 branches foram encontrados. Esta é a representação em nível de CPU de pontos de decisão e loops no código. Quanto mais branches, menor o desempenho. Para compensar isso, todas as CPUs modernas tentam prever o fluxo que o código seguirá. 51.348 branch-misses indicam que a função de previsão estava errada 1,45% do tempo.

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

Perf top

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 retornada por perf list):

Exibirá todos os eventos de ciclos.

perf top -a 

Exibirá todos os eventos relacionados ao clock da CPU.

perf top -e cpu-clock 
Live Analysis of Linux Performance

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

Perf record

perf record executa um comando e salva os dados estatísticos em um arquivo chamado perf.data dentro do diretório de trabalho atual. Ele é executado de maneira semelhante a perf stat.

Digite perf record seguido por um comando:

# perf record dd if=/dev/null of=test.iso bs=10M count=1
Record Command Statistical Data

Perf report

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

# sudo perf report
Perf Linux Performance Report

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

# man perf-subcommand

onde subcomando é listar, estatística, topo, registro, ou relatório. Estes são os subcomandos mais frequentemente utilizados; outros estão listados na documentação (consulte a seção Resumo para o link).

Resumo

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

Se você encontrar aplicativos que estão consumindo uma porcentagem alta de recursos, pode considerar modificar o código-fonte ou utilizar outras alternativas.

Se tiver dúvidas sobre este artigo ou sugestões para melhorar, estamos à disposição. Sinta-se à vontade para nos contatar usando o formulário de comentário abaixo.

Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/