Cosa profiler dovrei usare per misurare _real_ tempo (tra cui in attesa di chiamate di sistema) trascorrere in questa funzione, non _CPU_ uno

StackOverflow https://stackoverflow.com/questions/3992587

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

È stato utile?

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.

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