Wie Valgrind parallel zu unserem Prozess laufen, so dass seine Leistung nicht verringert zu viel?

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

Frage

Ich brauche Valgrind verwenden, um alle Speicherzugriffsverletzungen in einer Server-Anwendung gemacht zu erfassen. Der Server erstellt viele Threads. Ich vermute, dass es eine Rennbedingung ist, dass der Server all 1 Stunde oder so zum Absturz verursacht. Wir verwendeten Valgrind seine Speichernutzung zu analysieren, sondern der Server-Prozess Geschwindigkeit verringert sich dramatisch. Die Geschwindigkeit des Servers verringert, so sehr, dass es kaum brauchbar und keine Rennbedingungen, bei der wahrscheinlich war.

Gibt es trotzdem Valgrind parallel zu unserer Anwendung zu laufen, damit wir nicht so viel Leistung verlieren?

War es hilfreich?

Lösung

Es ist erwähnenswert, dass Valgrind, während Unterstützung von Programmen mit mehreren Threads, wird nicht wirklich das Programm der Threads parallel ausgeführt werden, wenn Sie zur Verfügung multiiple Kerne haben. Es verschachtelt auch Fäden mit einem feineren Korn als die native OS-Scheduler. Diese zwei Fakten kombiniert könnten es so ein Programm mit Rennbedingungen oder anderen gleichzeitigen Anomalien verhält sich anders.

Sie möchten Helgrind , um zu versuchen, ein Werkzeug, das hauptsächlich auf die Erkennung korrekt ausgerichtet Verriegelungs Disziplin und DRD , ein Werkzeug, das hauptsächlich auf die Erkennung Daten Rennen gerichtet.

Andere Tipps

Sie können das nicht tun. Valgrind nicht wirklich Code nativ ausführen - stattdessen läuft es in einem Simulator. Deshalb ist es so langsam. Also, es gibt keinen Weg, um es schneller laufen und immer noch den Vorteil der Valgrind erhalten.

Am besten ist es, die ulimit zu setzen, so dass Ihr Programm eine Core-Datei erzeugt, wenn er abstürzt. Dann können Sie versuchen, herauszufinden, was das Problem durch die Untersuchung des Kerns war.

Dies ist nicht direkt beantworten Ihre Frage, aber wenn Sie einen Synchronisationsfehler vermuten, Sie haben versucht, das Valgrind-Tool Helgrind ?

Valgrind wirkt, indem es in die malloc Anrufe Einhaken, so dass Sie Ihr Programm erwarten können, langsamer unter valgrind laufen. Also, ich würde sagen, dass Sie nicht Ihr Programm schneller unter valgrind laufen können und in den Genuss von Speicherfehlern zu analysieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top