Come eseguire Valgrind in parallelo con il nostro processo così le sue prestazioni non diminuisce troppo?

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

Domanda

Ho bisogno di utilizzare Valgrind per rilevare eventuali violazioni di accesso alla memoria fatti in un'applicazione server. Il server crea molte discussioni. Ho il sospetto che ci sia una condizione di corsa che causa il crash del server ogni 1 ora o giù di lì. Abbiamo usato Valgrind per analizzare il suo utilizzo di memoria, ma la velocità di processo server diminuito drasticamente. la velocità del server è diminuita così tanto che era quasi utilizzabile e senza condizioni di corse in cui probabile.

Esiste un modo per eseguire Valgrind in parallelo con la nostra applicazione in modo da non perdere più di tanto le prestazioni?

È stato utile?

Soluzione

Vale la pena notare che Valgrind, supportando programmi multi thread, non sarà effettivamente eseguito thread del programma in parallelo se avete core multiiple disponibili. E 'intercala anche le discussioni in una grana più fine del sistema operativo scheduler nativo. Questi 2 fatti combinati potrebbero rendere così un programma con condizioni di gara o altre anomalie simultanei si comporterà in modo diverso.

Si consiglia di provare Helgrind , uno strumento rivolge principalmente a rilevare corretta bloccaggio disciplina e DRD , un utensile destinato principalmente a rilevare corse di dati.

Altri suggerimenti

Non si può fare questo. Valgrind in realtà non esegue il codice nativo - invece si corre all'interno di un simulatore. Ecco perché è così lento. Quindi, non c'è modo per farlo funzionare più velocemente, e ancora ottenere il beneficio di Valgrind.

La cosa migliore è quella di impostare il ulimit in modo che il programma genera un file core quando si blocca. Poi si può cercare di capire quale fosse il problema esaminando il nucleo.

Questo non risponde direttamente alla tua domanda, ma se si sospetta un errore di sincronizzazione, Hai provato a usare lo strumento Valgrind Helgrind ?

Valgrind lavora agganciando nelle vostre chiamate malloc, quindi ci si può aspettare il vostro programma per l'esecuzione più lenta sotto Valgrind. Quindi, direi che non si poteva eseguire il programma più veloce sotto valgrind e ottenere il beneficio di analizzare gli errori di memoria.

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