The profiling results tell you which functions are called frequently and which ones have the longest execution times.
You can then analyze the target system or measure other aspects of an application's performance, to learn why certain functions
are performance bottlenecks and to get ideas about how to optimize them.
Some common causes of bad performance are:
- Heavy heap usage — If a function allocates and frees a lot of heap memory many times, this slows execution
because of the overhead of heap operations. You can analyze the program's heap usage to see which areas of code do this.
- Impact of other processes — On the target machine, other processes could be negatively impacting the performance of
a given application. You can run a kernel event trace and examine the
System Profiler results to see if problems such as starvation or priority inversion may be slowing the application at a
particular point.
- Inefficient cache usage — If an application is doing data-intensive work but most of the working set isn't
kept in cache memory, the frequent accesses to slower memory can noticeably reduce performance. Valgrind Cachegrind
profiles a process's cache usage and reports statistics for each function and line of code, so you can pinpoint the exact
sources of inefficient cache usage.