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

Num dia de competição feroz entre empresas, é importante que aprendamos a utilizar o que temos da melhor forma possível. O desperdício de recursos de hardware ou software, ou a falta de capacidade para saber utilizá-los de forma mais eficiente, acaba por ser uma perda que simplesmente não podemos nos permitir 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 o uso sustentado resultará em danos irreparáveis.
Neste artigo, vamos apresentar-lhe 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.
Apresentação e instalação do 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 distingue o perf de outras ferramentas bem 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 dar uma olhada de perto no comportamento do hardware e seus eventos associados.
Ele 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 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, 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 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

Estatísticas de 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

As estatísticas mostradas acima indicam, entre outras coisas:
- 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 utilizada).
- 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.
- 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. - 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 ramificações e falhas de ramificação (veja abaixo), que acabam desperdiçando ou utilizando de forma inadequada os ciclos de CPU.
- Ao executar o comando, um total de 3.552.630 ramificações foram encontradas. Esta é a representação em nível de CPU de pontos de decisão e loops no código. Quanto mais ramificações, menor 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 a previsão estava errada 1.45% do tempo.
O mesmo princípio se aplica à coleta de estatísticas (ou em outras palavras, perfil) enquanto um aplicativo está em execução. Simplesmente inicie o aplicativo desejado e, após um período razoável de tempo (que fica a seu critério), feche-o, 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 (como retornada por perf list):
Exibirá todos os eventos de ciclos.
perf top -a
Exibirá todos os eventos relacionados ao relógio da CPU.
perf top -e cpu-clock

A primeira coluna na saída acima representa a porcentagem de amostras coletadas 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 forma semelhante ao perf stat.
Digite perf record seguido por um comando:
# perf record dd if=/dev/null of=test.iso bs=10M count=1

Perf report
perf report 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 é 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. Recomendamos 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 alta porcentagem de recursos, pode considerar modificar o código-fonte ou usar outras alternativas.
Se tiver dúvidas sobre este artigo ou sugestões para melhorá-lo, estamos todos ouvidos. Sinta-se à vontade para nos contatar usando o formulário de comentários abaixo.
Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/