Per-cpu timer control for oprofile sampling
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 10 Dec 2014 06:44:37 +0000 (22:44 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 10 Dec 2014 06:55:08 +0000 (22:55 -0800)
commit383648aa099a3974b397cf81d1a82969bf7814fc
tree5d99bc6dd9afc53c9472f9d7e6cb90f470187416
parent4911ffbcbcc61daac617e308579679c228a8399b
Per-cpu timer control for oprofile sampling

To use oprof now, you need to set the timer, then enable the profiling.
If/when we add other tracers that can be turned on and off, we'll
continue to use this model: set the collection of things to trace, then
start them all at once.

If you don't have the timers turned on, but you run opstart, other
traces, such as TRACE_ME and whatnot (like perhaps writing traces from
userspace via kpoprofile) will still be collected.

I don't have a control for various TRACE_MEs yet.  Maybe we can add one
(like printx).

Some examples:

To turn on the timer on core 0.  This turns on an alarm/IRQ:

$ echo optimer 0 on > /prof/kpctl

Then start the actual profiling/collection:

$ echo opstart > /prof/kpctl

To stop collecting:

$ echo opstop > /prof/kpctl

To turn off all the timers:

$ echo optimer all off > /prof/kpctl

Oh, and you can adjust the timer period if you like.  Default is 1ms.

$ echo optimer period 1000 > /prof/kpctl (period is in usec)
kern/drivers/dev/kprof.c
kern/src/time.c