callgrind langsam mit deaktivierter Instrumentierung

8

Ich benutze Callgrind, um eine Linux Multithread App zu profilieren und meistens funktioniert es großartig. Ich beginne es mit Instrumentierung aus ( - instr-atstart = no ) und dann, wenn die Einrichtung abgeschlossen ist, schalte ich es mit callgrind_control -i on ein. Wenn ich jedoch bestimmte Konfigurationen ändere, um zu versuchen, einen anderen Teil der App zu profilieren, läuft es extrem langsam, noch bevor ich die Instrumentierung einschalte. Grundsätzlich dauert ein Teil des Codes, der bei normalem Betrieb einige Sekunden dauern würde, über eine Stunde mit Callgrind (Instrumentation ausgeschaltet). Irgendwelche Ideen, warum das sein könnte und wie Debugging / Auflösung der Langsamkeit gehen?

    
naumcho 27.01.2012, 19:30
quelle

1 Antwort

10

Callgrind ist ein Tool, das auf Valgrind basiert. Valgrind ist im Grunde ein dynamischer Binär-Übersetzer (libVEX, Teil von Valgrind). Es wird jeden Befehl dekodieren und JIT-kompilieren sie in Strom von einigen Anweisungen der gleichen CPU.

Wie ich weiß, gibt es keine Möglichkeit, diese Übersetzung (in der Valgrind-Implementierung) für den bereits laufenden Prozess zu aktivieren, sodass die dynamische Übersetzung vom Start des Programms an jederzeit möglich ist. Es kann auch nicht ausgeschaltet werden.

Werkzeuge werden auf Valgrind gebaut, indem man etwas Instrumentierungscode hinzufügt. Das Werkzeug "Nul" (nulgrind) ist das Werkzeug, das keine Instrumentierung hinzufügt. Aber jedes Werkzeug verwendet Valgrind und die dynamische Übersetzung ist immer aktiv. Das Ein- und Ausschalten im Callgrind schaltet zusätzliche Instrumente ein und aus.

Die virtuelle CPU, die von Valgrind implementiert wird, ist begrenzt, es gibt eine (unvollständige) Liste von Einschränkungen Ссылка Die meisten Einschränkungen betreffen Gleitkommaoperationen und sie können falsch emuliert werden.

Ist die Änderung mit Fließkommaoperationen verbunden? Oder mit anderen aufgeführten Einschränkungen?

Sie sollten auch wissen, dass " Valgrind die Ausführung serialisiert, so dass nur ein Thread gleichzeitig ausgeführt wird ". (von derselben Seite manual-core.html)

    
osgx 09.02.2012, 19:38
quelle