Cómo ejecutar Valgrind en paralelo con nuestro proceso de lo que su rendimiento no disminuya demasiado?

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

Pregunta

Necesito usar Valgrind para detectar cualquier violaciónes de acceso a memoria realizadas en una aplicación de servidor. El servidor crea muchos hilos. Sospecho que hay una condición de carreras que hace que el servidor se bloquee cada 1 hora más o menos. Utilizamos Valgrind para analizar su uso de memoria, pero la velocidad de proceso del servidor se redujeron drásticamente. La velocidad del servidor se redujo tanto que apenas era utilizable y no hay condiciones de carrera donde probable.

¿Hay alguna forma de ejecutar Valgrind en paralelo con nuestra aplicación para que no pierda esa cantidad de rendimiento?

¿Fue útil?

Solución

Vale la pena señalar que Valgrind, mientras que el apoyo a programas multihilo, será en realidad no ejecutar subprocesos del programa en paralelo si usted tiene núcleos multiiple disponibles. También intercala temas al mismo grano más fino que el programador del sistema operativo nativo. Estos 2 hechos combinados podrían hacerlo por lo que un programa con las condiciones de carrera u otras anomalías concurrentes se comportará de manera diferente.

Es posible que desee probar Helgrind , una herramienta destinada principalmente a la detección correcta disciplina de bloqueo y DRD , una herramienta destinada principalmente a la detección de razas de datos.

Otros consejos

No se puede hacer eso. Valgrind en realidad no ejecutar su código de forma nativa - en su lugar se ejecuta dentro de un simulador. Es por eso que es tan lento. Por lo tanto, no hay manera de hacer que se ejecute más rápido, y aún así obtener el beneficio de Valgrind.

Su mejor opción es establecer el ulimit para que su programa genera un archivo de núcleo cuando se rompe. A continuación, puede tratar de llegar a lo que era el problema mediante el examen de la médula.

Esto no está respondiendo a su pregunta directamente, pero si usted sospecha que un error de sincronización, ¿Ha intentado utilizar la herramienta Valgrind Helgrind ?

Valgrind funciona enganchando en sus llamadas malloc, por lo que se puede esperar que su programa se ejecute más lenta en valgrind. Por lo tanto, yo diría que no se podía ejecutar el programa más rápido bajo valgrind y conseguir la ventaja de analizar los errores de memoria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top