2009-12-09 12 views
12

Quali sono i migliori strumenti per la profilatura di applicazioni C/C++ su * nix?Profili di prestazioni su Linux

(spero di profilare un server che sia un mix di file IO (di blocco), epoll per rete e fork()/execv() per alcuni lavori pesanti, ma anche l'aiuto generale e gli strumenti più generali sono tutti apprezzato.)

Riesci a ottenere la grande immagine di sistema di RAM, CPU, rete e disco tutto in una panoramica e forare in esso?

C'è stato un sacco di chiacchiere su kernel lists su cose come perf timechart, ma non ho ancora trovato nulla di nuovo in Ubuntu.

risposta

1

Compilare con -pg, eseguire il programma, e quindi utilizzare gprof

compilazione (e collega) con -pg aggiunge il profiling del codice e le librerie di profilatura per l'eseguibile, che quindi produce un file chiamato gmon.out che contiene le informazioni sul tempo. gprof visualizza i grafici delle chiamate e i loro tempi (assoluti e relativi).

Vedere man gprof per dettagli.

+0

problema con gprof è che non funziona su multithread e ha tempo duro con librerie dinamiche. –

1

se si può prendere l'applicazione per FreeBSD, OS X, o Solaris è possibile utilizzare DTrace, anche se DTrace è uno strumento orientato analista - vale a dire, è necessario guidalo - leggi: script it. Nient'altro può darti il ​​livello di granularità di cui hai bisogno; Dtrace non può semplicemente profilare le latenze delle chiamate di funzione in user-land; può anche seguire un cambio di contesto nel kernel.

0

La risposta FOSS, come già accennato, è di costruire con -pg e quindi utilizzare gprof per analizzare l'output. Se si tratta di un prodotto/progetto che giustifica il lancio di denaro, sarei tentato di utilizzare IBM/Rationals Quantify profiler in quanto semplifica la visualizzazione dei dati di profilatura, il drill-down al livello di linea o la visualizzazione in un raggio di 10000 piedi. 'livello.

Ovviamente ci può essere spettatore per gprof disponibile che può fare la stessa cosa, ma non ne sono a conoscenza.

1

oprofile potrebbe interessarti. Ubuntu dovrebbe avere tutti i pacchetti di cui hai bisogno.

2

L'esempio canonico di uno strumento di profiling del sistema completo (per Solaris, OS X, FreeBSD) è DTrace. Ma non è ancora completamente disponibile su Linux (puoi provare con lo here ma al momento il sito non è disponibile, e non l'ho provato io stesso). Esistono molti strumenti, in vari stati di utilità, per eseguire la profilazione completa del sistema e il profilo del kernel su Linux.

Si potrebbe considerare indagare:

1

Come menzionato nella risposta accettata, Zoom può fare cose sorprendenti. L'ho usato per capire il comportamento del thread fino all'ottimizzazione dell'assembly generato dal compilatore.

2

Allinea MAP è un profiler per C++ e altri linguaggi nativi su Linux. È commercialmente supportato dal mio datore di lavoro. Ha un'interfaccia grafica e una profilazione a livello di sorgente e un codice dei profili quasi senza rallentamenti, il che rende molto accurato il momento in cui i tempi di altri sottosistemi sono rilevanti, come per l'IO.

Callgrind è stato utile e preciso, ma il rallentamento era ~ 5x, quindi ho potuto eseguire solo tirature più piccole. Può effettivamente contare il numero di volte che viene chiamata una funzione che è utile per comprendere il comportamento asintotico.