Re: kernel api for application profiling

Mikael Pettersson (mikpe@csd.uu.se)
Sun, 13 Oct 2002 15:28:44 +0200 (MET DST)


On Sun, 13 Oct 2002 21:08:30 +1000, James Courtier-Dutton wrote:
>I wish to be able to make a function call to start a timer, and then
>later on in the program stop the timer and therefore gather information
>about how long a particular routine took.
>The problem I have is that between start of timer and stop of timer, the
>kernel might task switch to another thread or process. I would like this
>kernel task switch to automatically stop the timer, and then restart it
>when I get CPU time returned. I cannot find any such API availiable
>currently in the linux kernel.

perfctr & PAPI support this. perfctr virtualises the TSC which
gives you high-res process times, and sampling is extremely
light-weight (no syscalls involved) so measuring small blocks
of code is feasible & accurate.
perfctr is a low-level Linux/x86-specific framework. PAPI is
a higher-level framework which supports a number of platforms.
PAPI uses perfctr on Linux/x86.

Both perfctr and PAPI also let you set up CPU performance
counters for counting other things than clock cycles.

See:
<http://www.csd.uu.se/~mikpe/linux/perfctr/>
<http://icl.cs.utk.edu/projects/papi/>

>Also, as an extension to this, it would be nice to know which other
>tasks happened during the task switch. The reason I would like this, is
>so that I can tell if the time was taken reading data off the hard disk
>or instead time spent by X displaying/transfering to screen the next
>video frame. If too much time is being spent doing a task like reading
>from the hard disk, I would need to look into reducing the latency of
>that task. This might also highlight buggy modules that take up too much
>of a time slice. I have seen some task switches take 800ms away from my
>audio out thread, and therefore causing underruns on the sound hardware,
>that then causes glitches in the perceived audio coming from the speakers.

This could perhaps be measured by programming a TSC-like event into
a performance counter and programming it to count in kernel-mode only.
P6, K7, and P4 should all support this.

And before people ask me: perfctr is not yet in official kernels,
I'm working on a cleaned up version for 2.5 submission RSN,
perfctr isn't easy for newbies to use due to HW-specific details,
but PAPI gives you a nice cosy high-level API.

/Mikael
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/