OProfile is a system-wide profiler for Linux systems, capable of profiling all running code at low overhead. OProfile is released under the GNU GPL.
It consists of a kernel driver and a daemon for collecting sample data, and several post-profiling tools for turning data into information.
OProfile leverages the hardware performance counters of the CPU to enable profiling of a wide variety of interesting statistics, which can also be used for basic time-spent profiling. All code is profiled: hardware and software interrupt handlers, kernel modules, the kernel, shared libraries, and applications.
OProfile is currently in alpha status; however it has proven stable over a large number of differing configurations; it is being used on machines ranging from laptops to 16-way NUMA-Q boxes. As always, there is no warranty.
Linux/MIPS support for Oprofile was added for Linux 2.6.10. There is no support for older MIPS kernels nor due to bugs and limitations in the existing oprofile patches for these kernels this is considered a sensible project.
CPUs support by the kernel
- Legacy processors R10000, R12000, R14000, RM9000
- MIPS32 processors 24K, 34K in non-SMTC mode
- MIPS64 processors 5K, 20K, 25K, SB1
The 4K series is not supported as they do not have performance counters but only a performance monitoring interface which basically is an interface to which a SOC designer can glue his own counter gadgetry. As there is no standard whatsoever for how to implement this. One SOC known to make use of this is the ATI Xilleon.
Oprofile support is available at the time of this writing only in the Sourceforge Oprofile CVS repository; released versions are either lacking support for MIPS or are unusable due to bugs. The R10000, R12000, RM7000, RM9000, SB1 / SB1A, VR5432, VR5500 processors are supported by the CVS version of the userspace tools; support for further is in the queue.