Pergunta

Há muitos estático e ferramentas de instrumentação dinâmicas. Fuligem é uma ferramenta instrumentação estática para bytecode Java. Pin e Valgrind são ferramentas instrumentação dinâmicas para binários.

O que há prós e contras para ferramentas estáticos e instrumentação dinâmica? Eu acho que as ferramentas de instrumentação estáticos são melhores em termos de desempenho de tempo de execução, enquanto ferramentas dinâmicas são mais poderosos. Por favor, compará-los em termos de capacidade e desempenho.

Além disso, qual é a diferença usando ferramentas de instrumentação de escrever passagem LLVM?

Foi útil?

Solução

Estou assumindo a necessidade é descobrir o código que leva um tempo significativo e que você pode otimizar para salvar esse tempo. Essa é uma meta diferente de apenas rotinas de tempo.

Eu sou cético de analisadores estáticos porque tudo depende do mix de dados de entrada.

instrumentação dinâmica tenta medir propriedades de funções, tais como: auto tempo e tempo total, absoluta, média, e por cento. Também chamada contagem, e o papel de cada rotina no gráfico de chamadas.

instrumentação Dinâmico (a la gprof ) tem sido o padrão de-facto, durante décadas, mas é muito longe de ser a última palavra. Por um lado, é importante perceber que a maioria das estatísticas que lhe dá está faltando o ponto em termos de sua necessidade original.

Estes dias (IMHO) você precisa de um profiler de amostragem que as amostras a pilha de chamadas, e não apenas o contador de programa. Deve provar no tempo relógio de parede, não apenas tempo de CPU. As amostras não necessitam de ser desenhado em alta frequência. Deve suprimir amostragem quando o aplicativo está aguardando entrada do usuário. Deve dar-lhe informações na linha ou instrução de nível, não apenas o nível de função. A estatística mais importante deve dar-lhe uma linha de código é a percentagem de amostras que contêm-lo, porque essa é a medida mais direta do tempo que pode ser salvo se essa linha é otimizado.

Alguns profilers pode fazer isso, Oprofile e RotateRight / Zoom em particular.

Outras dicas

Os profissionais de instrumentação estática é o fato de que a análise não é dependente da entrada. A análise acontece no código original e inclui todos os caminhos de código. Cobertura total. Este tipo de instrumentação normalmente reescreve o binário que está pronto para execução, sem a necessidade de outro processo em tempo de execução. Isso também significa que o código será executado rápido, com a única sobrecarga proveniente do código injetado. A desvantagem de instrumentação estática é a análise não detalhou que é causada devido à falta de informação de tempo de execução e, por isso, às vezes é muito difícil de alcançar seus objetivos.

Por outro lado, a instrumentação dinâmica que inclui todos os detalhes e informações durante o tempo de execução do código. Na maioria dos casos, as ferramentas que executam a instrumentação dinâmica são fáceis de escrever. Por outro lado, não é capaz de atingir a cobertura de código completo devido ao fato de que o caminho de execução é dependente das entradas dadas. Também o fato de que há uma necessidade de um processo externo para ser anexado e instrumento o original torna as coisas mais lento.

AFAIC, passes LLVM são utilizados para instrumentação estática, porque o código gerado é em tempo de compilação e já está escrito no binário final e com certeza inclui todos os prós e contras de técnicas de instrumentação estáticos.

Para concluir, é uma questão do que você precisa. Você deve escolher a ferramenta certa para o seu trabalho.

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