I am using callgrind to profile a linux multi-threaded app and mostly it's working great. I start it with instrumentation off (--instr-atstart=no) and then once setup is done i turn it on with callgrind_control -i on. However, when I change certain configurations to try to profile a different part of the app it starts running extremely slow even before I turn instrumentation on. Basically part of the code that would take a few seconds with normal operation takes over an hour with callgrind (instrumentation turned off). Any ideas as to why that might be and how to go about debugging/resolving the slowness?
callgrind slow with instrumentation turned off
3.1k Views Asked by naumcho At
1
There are 1 best solutions below
Related Questions in C++
- Error trying to generate Makefile for glBinding
- Eclipse Makefile: Make Variables are skipped
- Errors in makefile for qemu 0.14.1 in ubuntu 15.04 64 bit
- C++ Struct prototyping in separate header file
- Reuse jquery plugin without conflict
- How do I a conditional build through a make file?
- basic makefile ifeq how to
- (automake, libtool) build fails in automake when using same source file name in different directory
- Makefile pattern rules differences
- Errors while trying to run make on source code
Related Questions in LINUX
- Error trying to generate Makefile for glBinding
- Eclipse Makefile: Make Variables are skipped
- Errors in makefile for qemu 0.14.1 in ubuntu 15.04 64 bit
- C++ Struct prototyping in separate header file
- Reuse jquery plugin without conflict
- How do I a conditional build through a make file?
- basic makefile ifeq how to
- (automake, libtool) build fails in automake when using same source file name in different directory
- Makefile pattern rules differences
- Errors while trying to run make on source code
Related Questions in PROFILING
- Error trying to generate Makefile for glBinding
- Eclipse Makefile: Make Variables are skipped
- Errors in makefile for qemu 0.14.1 in ubuntu 15.04 64 bit
- C++ Struct prototyping in separate header file
- Reuse jquery plugin without conflict
- How do I a conditional build through a make file?
- basic makefile ifeq how to
- (automake, libtool) build fails in automake when using same source file name in different directory
- Makefile pattern rules differences
- Errors while trying to run make on source code
Related Questions in VALGRIND
- Error trying to generate Makefile for glBinding
- Eclipse Makefile: Make Variables are skipped
- Errors in makefile for qemu 0.14.1 in ubuntu 15.04 64 bit
- C++ Struct prototyping in separate header file
- Reuse jquery plugin without conflict
- How do I a conditional build through a make file?
- basic makefile ifeq how to
- (automake, libtool) build fails in automake when using same source file name in different directory
- Makefile pattern rules differences
- Errors while trying to run make on source code
Related Questions in CALLGRIND
- Error trying to generate Makefile for glBinding
- Eclipse Makefile: Make Variables are skipped
- Errors in makefile for qemu 0.14.1 in ubuntu 15.04 64 bit
- C++ Struct prototyping in separate header file
- Reuse jquery plugin without conflict
- How do I a conditional build through a make file?
- basic makefile ifeq how to
- (automake, libtool) build fails in automake when using same source file name in different directory
- Makefile pattern rules differences
- Errors while trying to run make on source code
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Callgrind is a tool, built on valgrind. Valgrind is basically a dynamic binary translator (libVEX, part of valgrind). It will decode every instruction and JIT-compile them into stream of some instructions of the same CPU.
As I know, there is no way to enable this translation (in valgrind implementation) for already running process, so dynamic translation is enabled all time, from start of program. It can't be turned off too.
Tools are built on valgrind by adding some instrumentation code. The "Nul" tool (nulgrind) is the tool which adds no instrumentation. But every tool uses valgrind and dynamic translation is active all time. Turning on and off in callgrind is just turning on and off additional instrumentation.
Virtual CPU, implemented by Valgrind is limited, there is (incomplete) list of limitations http://valgrind.org/docs/manual/manual-core.html#manual-core.limits Most of limitations are about floating point operations, and they can be emulated wrong.
Is the change connected with floating-point operations? Or with other listed limitations?
Also you should know, that "Valgrind serialises execution so that only one thread is running at a time". (from the same page manual-core.html)