Domanda

Ci sono molti strumenti di strumentazione statici e dinamici. La fuliggine è uno strumento strumentazione statica per Java bytecode. Pin e Valgrind sono strumenti dinamici per strumentazione binari.

Quali sono i pro ei contro per utensili strumentazione statici e dinamici? Credo che gli strumenti strumentazione statici sono migliori in termini di performance di runtime, mentre strumenti dinamici sono più potenti. Si prega di confrontarli in termini di capacità e prestazioni.

Inoltre, qual è la differenza con gli strumenti della strumentazione di scrivere LLVM passare?

È stato utile?

Soluzione

sto assumendo il bisogno è quello di scoprire il codice che richiede molto tempo e che si potrebbe ottimizzare per salvare quel tempo. Questo è un obiettivo diverso da routine solo di temporizzazione.

Sono scettico di analizzatori statici perché tutto dipende dal mix di dati di input.

strumentazione dinamica cerca di misurare le proprietà delle funzioni, come ad esempio: il tempo di sé e il tempo totale, assoluta, media, e per cento. Inoltre chiamare conta, e il ruolo di ogni routine nel grafico di chiamata.

strumentazione dinamica (a la gprof ) ha stato lo standard de-facto per decenni, ma è molto lontano dall'essere l'ultima parola. Per prima cosa, è importante rendersi conto che la maggior parte delle statistiche dà vi manca il punto in termini di vostra esigenza originale.

In questi giorni (IMHO) è necessario un profiler di campionamento che i campioni dello stack di chiamate, non solo il contatore di programma. Dovrebbe provare in tempo orologio a muro, non solo il tempo di CPU. I campioni non devono essere tratte ad alta frequenza. Esso dovrebbe sopprimere il campionamento quando l'applicazione è in attesa di input da parte dell'utente. Esso dovrebbe darvi le informazioni a livello di linea o di istruzione, non solo il livello di funzione. La statistica più importante dovrebbe dare per una riga di codice è la percentuale di campioni che lo contengono, perché questa è la misura più diretta del tempo che può essere salvato se quella linea è ottimizzata.

Alcuni profiler può fare questo, Oprofile e RotateRight / Zoom in particolare.

Altri suggerimenti

I pro di strumentazione statica è il fatto che l'analisi non dipende sull'ingresso. L'analisi avviene sul codice originale e include tutti i percorsi del codice. Piena copertura. Questo tipo di strumentazione solito riscrive il binario che sia pronto per l'esecuzione, senza la necessità di un altro processo in fase di esecuzione. Ciò significa anche che il codice funzionerà più velocemente, con la sola testa proveniente dal codice iniettato. Lo svantaggio di strumentazione statico è l'analisi non dettagliato, che è dovuta a causa della mancanza di informazioni in fase di esecuzione e per questo motivo, a volte è molto difficile da raggiungere i vostri obiettivi.

D'altra parte, la strumentazione dinamica vuol include tutti i dettagli e le informazioni durante la fase di esecuzione del codice. Nella maggior parte dei casi, gli strumenti che eseguono strumentazione dinamica sono facili da scrivere. D'altra parte, non è in grado di raggiungere una copertura codice completo per il fatto che il percorso di esecuzione dipende ingressi indicati. Anche il fatto che ci sia la necessità di un processo esterno da allegare e strumento quello originale rende le cose più lento.

AFAIC, passaggi LLVM sono utilizzati per la strumentazione statico, perché il codice generato è in fase di compilazione ed è già scritto nel binario finale e di sicuro include tutti i pro ei contro di tecniche di strumentazione statici.

In conclusione, si tratta di una questione di che cosa avete bisogno. Si consiglia di scegliere lo strumento giusto per il lavoro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top