Successful and not (yet?) successful optimisations in Valgrind
Making Valgrind faster is a never ending challenge. In this talk, we will describe 2 optimisations in Valgrind.
A first optimisation is a speedup of Helgrind (a race detection tool). A very simple observation has led to an optimisation in the way helgrind captures stack traces for its 'full recording' of where a piece of memory was modified. This optimisation gives a typical speed up of 25%. We will describe the issues encountered during the implementation and discuss the reasons why this optimisation is not (yet?) committed in the Valgrind sources.
The second optimisation is the implementation of the execution tree concept : this generalises the way Massif (a heap profiler) records the memory usage of a program. We will show how a (maybe counter-intuitive) representation of a tree using a hash table of flat stack traces has doubled the speed of Massif for some workloads.
This talk is aimed at Valgrind developers and any application developer interested in data structures and algorithm optimisations.