Pergunta

Enquanto eu estava trabalhando em um projeto de Universidade, eu usei um profiler projecto-interno feito por um estudante mais velho, que era muito básico, mas bom o suficiente desde a sua tarefa consistia em subtrair vezes entre dois pontos do código e dar estatísticas.

Agora, como funciona um profiler profissional? Será que pré-processar o código para checkpoints inserir ou coisas assim? Será que ler o código binário com dados de depuração para capturar onde a função é chamada?

Graças.

Foi útil?

Solução

Há lotes de diferentes perfis que funcionam de maneiras diferentes.

profilers comumente usados ??simplesmente examinar o programa em execução regularmente para ver o que a montagem de instrução está sendo executada (o contador de programa) e que rotinas chamado a função atual (a pilha de chamadas). Este tipo de amostragem profiler pode trabalhar com binários padrão, mas são mais úteis se você tiver depuração símbolos para trabalhar linhas de dados endereços de código no programa.

Além de amostragem regularmente, você também pode usar os contadores de desempenho do processador para amostra após um certo número de eventos, tais como erros de cache, que irá ajudá-lo a ver quais partes do seu programa estão a abrandar devido a acessos de memória.

Outros profilers envolvem recompilar o programa para inserir instruções (conhecido como instrumentação ) para contar quantas vezes cada conjunto contínuo de instruções (blocos básicos) são executados, ou talvez até mesmo gravar a sequência em que os blocos básicos são executados, ou gravar o conteúdo de variáveis ??em determinados lugares.

A abordagem de instrumentação pode dar-lhe toda a precisão e dados que você pode querer, mas vai desacelerar o programa e que irá mudar suas características de desempenho. Por outro lado, com a amostragem com base abordagens que você pode sintonizar o impacto desempenho em relação ao período de tempo que você precisa para executar o programa contra a precisão dos dados de perfil que você conseguir.

Outras dicas

Há duas estratégias comuns de perfil (por linguagens baseadas em VM de qualquer maneira): instrumentação e amostragem

.

Instrumentação insere checkpoints e informa o profiler cada vez que um método começa e acabado. Isto pode ser feito pelo JIT / intérprete ou por um pós-normal-compilação, mas fase de pré-execução, que apenas muda o executável. Isto pode ter um efeito muito significativo sobre o desempenho (desviando, assim, quaisquer resultados de temporização). É bom para obter contagens precisas embora.

Amostragem pede ao VM periodicamente o que os Rastreamento de pilha olhares como para os tópicos, e atualiza suas estatísticas dessa maneira. Isso normalmente afeta o desempenho menos, mas produz as contagens de chamadas menos precisos.

depende do tipo de código a ser analisado, por exemplo .NET CLR fornece facilidade para profilers código. Ao lidar com código gerenciado é possível reescrever código intermediário para ganchos personalizados injetar. Além disso, você pode analisar rastreamento de pilha das aplicações. sistema operacional pode fornecer meios para a criação de perfis, por exemplo Windows tem desempenho contadores . Ao lidar com código incorporado você pode emular / hardware subjacente substituto para fiscalizar eficazmente o desempenho do sistema.

Como Jon Skeet escreveu acima, existem duas estratégias: instrumentação e amostragem.

Instrumentation é feito manualmente e também automaticamente. No caso de manual: o desenvolvedor insere manualmente o código para acompanhar o início / fim de uma região de código de interesse. Por exemplo, um simples "startTimer" e "EndTimer". Algumas ferramentas de perfil pode fazer isso automaticamente, também - para isso o profiler vai precisar fazer uma análise estática do código ou seja, ele analisa o código e identificar pontos de verificação importantes como o início / fim de um determinado método (s). Isso é mais fácil com idiomas que suporte reflexão (por exemplo, qualquer linguagem .net). Usando 'reflexo' do profiler é capaz de reconstruir a árvore de código-fonte inteiro (juntamente com gráficos de chamada).

A amostragem é feito pelo profiler e olha para o código binário. O profiler também pode técnicas como ganchos ou armadilha do Windows eventos / mensagens para fins de criação de perfil.

Ambos os métodos de amostragem Instrumentação e têm as suas próprias despesas. A quantidade de sobrecarga depende - v.g. se a frequência de amostragem é definido para valores elevados, em seguida, o perfil de si pode contribuir significativamente para o desempenho que está sendo relatado.

Instrumentação Vs amostragem: Não é como um é melhor que a outra abordagem. Ambos têm o seu lugar.

A melhor abordagem é começar com um perfilador de amostragem baseado e olhar para toda a nível do sistema. Que é executado o amostrador e ver a ampla utilização do sistema de recursos: memória, disco rígido, rede, CPU.

Do exposto identificar os recursos que estão sendo sufocados.

Com as informações acima, você pode agora adicionar a instrumentação ao seu código de pin-point o culpado. Por exemplo, se a memória é o recurso mais utilizado, em seguida, ele vai ajudar a instrumento o seu código relacionado alocação de memória. Note-se que com a instrumentação que você está realmente se concentrando em uma área particular de seu código.

para gprof em * nix, em tempo de compilação e tempo de ligação usando a -pg, algum código extra é injetado no código de objeto. Em seguida, executando gprof, um arquivo de relatório é gerado pelo código injetado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top