OProfile

Collects profile data about all processes. Needs to load a kernel module dynamically. No program changes or recompilations are needed. Typical design with kernel part to collect data and postprocessing in user space.