Cosa profiler dovrei usare per misurare _real_ tempo (tra cui in attesa di chiamate di sistema) trascorrere in questa funzione, non _CPU_ uno
Domanda
L'applicazione non fa le cose calcolare, ma non i file / o, leggere, utilizza la rete. Voglio profiler di mostrarlo.
Mi aspetto qualcosa di simile a una cosa del genere in callgrind che le chiamate clock_gettime ogni proble.
O come oprofile che interrupt la mia domanda (mentre si sta dormendo o in attesa di presa / file / altro) per vedere che cosa sta facendo.
Voglio cose come "leggere", "Connect", "nanosleep", "invio" e soprattutto "fsync" ( E tutti i loro chiamanti ) di essere audaci (non cose come stringa o un numero funzioni che eseguono calcoli).
Piattaforma: GNU / Linux @ i386
Soluzione
rapidamente hacked fino banale profiler di campionamento per Linux: http://vi-server.org/vi /simple_sampling_profiler.html
Si aggiunge backtrace(3)
in un file sul SIGUSR1
, e poi lo converte in fonte annotata.
Come si esplora periodicamente il programma, vedremo le funzioni che attende qualcosa.
E come si cammina la pila, vedremo chi chiama troppo.
Anche le persone da risposte a domande simili raccomanda Zoom.
Altri suggerimenti
Non c'è vero modo per rispondere a questa domanda senza conoscere la propria piattaforma e un po 'di più su ciò che si sta cercando di fare.
Quando sono in esecuzione su una piattaforma Intel, mi piace usare la Time Stamp Counter (RDTSC) . E 'difficile da battere resoultion nella fascia sub-microsecondo. Ho appena messo una chiamata ad esso prima e dopo un pezzo di codice, e confrontare la differenza.