Criação de perfil do Linux com o Performance Analyzer

Criação de perfil do Linux com o Performance Analyzer


Colegas, acho útil falar sobre um gerador de código de código conveniente e gratuito para Linux / Solaris. Faz parte do pacote Sun / Oracle Developer Studio [1]. Na minha opinião, outras partes desse ambiente de desenvolvimento são um pouco inúteis, mas o criador de perfil chamado Performance Analyzer é muito bem-sucedido. É fácil de usar, de forma clara e conveniente, a análise dos resultados. Na minha opinião, o criador de perfil ainda é superior a muitos colegas Linux. Com essa ferramenta, o uso do gprof parece um capricho estranho e uma perda de tempo.


Se você não planeja usar o Performance Analyzer imediatamente, não poderá ler mais. Lembre-se de que esse produto existe. Se é interessante dar uma olhada, então seja bem-vindo.


O criador de perfil consiste em duas partes: coletar - inicia o aplicativo e coleta dados, registra os resultados do experimento; O analisador é uma interface gráfica que lê os dados do experimento e oferece oportunidades para uma análise conveniente de pontos de acesso e árvores de chamadas de função.


Brevemente sobre as vantagens e desvantagens importantes:


Prós:


  • gratuitamente;
  • não requer recompilação do código e vinculação do arquivo executável;
  • trabalha com compiladores gnu e sun;
  • não altera o tempo de execução do programa ao coletar dados;
  • Possui uma interface gráfica intuitiva;
  • Equipado com interface avançada de linha de comando para análise automática;
  • permite que você observe rapidamente o resultado do compilador;
  • possui um criador de perfil estatístico suficientemente preciso, mesmo para peças não particularmente trabalhosas;
  • análise convenientemente feita e análise comparativa de vários lançamentos de programas;
  • não distorce os resultados.

Alguns contras:


  • A interface gráfica é escrita em Java. Às vezes, ele trava na inicialização, uma simples reinicialização ajuda;
  • apenas o tempo da CPU é medido: se é possível corrigir o kernel, essa restrição pode ser removida;
  • em aplicativos multithread, o tempo gasto pela função é a soma dos tempos gastos nessa função em cada thread;
  • o criador de perfil estatístico é barulhento e dificulta a otimização de ciclos.

Plataformas


Formalmente, o Oracle Developer Studio suporta apenas Solaris e Oracle Linux. De fato, eu o usei com sucesso no Redhat, CentOS e Ubuntu. Coletor / analisador que usei apenas para otimizar aplicativos C / C ++ / Fortran. A documentação afirma que a ferramenta também lida com projetos Java.


Executar e analisar resultados


A análise de código, é claro, começa com a criação de um arquivo executável. Os nomes das funções não devem ser excluídos, caso contrário não haverá nada para analisar. Os símbolos de depuração são necessários se você deseja examinar as linhas de código do analisador. Obviamente, em primeiro lugar, faz sentido criar um perfil com suas opções de otimização favoritas. Existem cenários em que é útil criar um perfil do código sem otimização, mas isso é raro. Por exemplo, se você só precisa olhar para o gráfico de chamadas e não medir o desempenho.


Portanto, para começar, você precisa, como sempre, coletar o arquivo executável, por exemplo:


g++ -O3 –g example.c –o ex 

A segunda etapa é executar a partir da coleta:


 $pathToSunStudio/collect ./ex 

Como resultado do trabalho do criador de perfil, um subdiretório do experimento test.N.er é criado no diretório atual, onde N é o número inicial. (Importante: se o seu programa foi interrompido, o diretório do experimento será quebrado).


A etapa mais agradável é iniciar a GUI:


 $pathToSunStudio/analyzer test.1.er 

No caso do nosso exemplo simples, conheceremos o código diretamente do analisador da GUI. Nosso exemplo calcula a soma dos logaritmos naturais e decimais de números inteiros de 2 a 20.000.000. As linhas "quentes" são destacadas em amarelo.



Vamos para a lista de "funções pesadas". Inicialmente, as funções são classificadas pelo tempo gasto na própria função (horário exclusivo). Você pode classificar pela soma do tempo na função e em seus filhos (tempo inclusivo).



Como esperado, você pode andar pela pilha de chamadas. Em nosso exemplo simples, vemos que em t1 () viemos de main () e a função sumlog () leva metade do tempo de execução de todo o programa.



É muito conveniente para a automação que é possível extrair dados usando a linha de comando. Por exemplo:


 er_print -functions test.1.er test.2.er 

imprime o tempo de execução das funções a partir de duas partidas.


mesa com tempos
 <p>Functions sorted by metric: Exclusive Total CPU Time Excl. Incl. Name Total Total CPU sec. CPU sec. 4.160 4.160 Total 3.140 3.140 __ieee754_log 0.330 1.990 __ieee754_log10 0.270 1.880 sumlog(int) 0.180 2.280 sumlog10(int) 0.100 1.610 log 0.090 2.100 log10 0.050 0.050 isnan</p> <ol> <li>4.160 __libc_start_main</li> <li>4.160 main</li> <li>1.880 t1(int)</li> <li>2.280 t2(int) 


Lifehack. Observando atentamente o gráfico de chamadas de programa, você pode descobrir muitos trabalhos úteis e a arquitetura de uma nova base de código para você. Costumo começar a trabalhar com um novo projeto iniciando o Performance Analyzer, porque você pode entender imediatamente qual código realmente é executado e em quais cenários.


Conclusão


O Sun / Oracle Studion Performance Analyzer é uma ferramenta poderosa e conveniente. Na nota, mostrei o caso de uso mais simples e, é claro, o Performance Analyzer pode fazer muito mais. Se você estiver interessado em aprender mais, consulte a documentação [2]. A principal conclusão: essa ferramenta existe e pode ser de grande benefício para seus projetos.


Referências:


  1. Oracle Developer Studio
  2. Oracle Developer Studio 12.6: Analisador de Desempenho
  3. Analisador de desempenho

Source: https://habr.com/ru/post/pt469409/


All Articles