OProfile uses non-maskable interrupts (NMI) on the P6 generation, Pentium 4, Athlon, Opteron, Phenom, and Turion processors. These interrupts can occur even in section of the Linux where interrupts are disabled, allowing collection of samples in virtually all executable code. The RTC, timer interrupt mode, and Itanium 2 collection mechanisms use maskable interrupts. Thus, the RTC and Itanium 2 data collection mechanism have "sample shadows", or blind spots: regions where no samples will be collected. Typically, the samples will be attributed to the code immediately after the interrupts are re-enabled.
Your kernel is likely to support halting the processor when a CPU is idle. As
the typical hardware events like CPU_CLK_UNHALTED do not
count when the CPU is halted, the kernel profile will not reflect the actual
amount of time spent idle. You can change this behaviour by booting with
the idle=poll option, which uses a different idle routine. This
will appear as poll_idle() in your kernel profile.
OProfile profiles kernel modules by default. However, there are a couple of problems
you may have when trying to get results. First, you may have booted via an initrd;
this means that the actual path for the module binaries cannot be determined automatically.
To get around this, you can use the -p option to the profiling tools
to specify where to look for the kernel modules.
In 2.6, the information on where kernel module binaries are located has been removed.
This means OProfile needs guiding with the -p option to find your
modules. Normally, you can just use your standard module top-level directory for this.
Note that due to this problem, OProfile cannot check that the modification times match;
it is your responsibility to make sure you do not modify a binary after a profile
has been created.
If you have run insmod or modprobe to insert a module
in a particular directory, it is important that you specify this directory with the
-p option first, so that it over-rides an older module binary that might
exist in other directories you've specified with -p. It is up to you
to make sure that these values are correct: 2.6 kernels simply do not provide enough
information for OProfile to get this information.