Add the Plan 9 kprof device.
authorRonald G. Minnich <rminnich@google.com>
Fri, 25 Apr 2014 18:42:11 +0000 (11:42 -0700)
committerRonald G. Minnich <rminnich@google.com>
Fri, 25 Apr 2014 18:42:11 +0000 (11:42 -0700)
commit8ba5b622d0a499468d84d26565153696bf4c4ec5
tree435bf25ef3ff597b0196aee3cc4db842989f58ac
parentddbad11de4dc030b4f20a1330ad0a5c5f488bfbd
Add the Plan 9 kprof device.

The Plan 9 kprof device takes samples at 1ms intervals.
It maintains an array that is the size of kernel text / 8.
At each timer interrupt, it adds 1 to the array[pc/8].
In this way, we get a profile, accurate to 1 ms, of where
the kernel spends its time.

Unlike Plan 9, the output format of this is text.
Each text record is 48 bytes; 30 bytes of name,
1 byte of space, 16 bytes of PC, and a newline.

To try this, you can, e.g.,
bind -a '#K' /net # we can't use /dev yet.
echo start > /net/kpctl
do something
echo stop > /net/kpctl
cat /net/kpdata > /somefile

Bugs:
- we need to atomic_inc the buf entries, not just add 1
- we only do this on one core; we need to start timers on all

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
kern/drivers/dev/kprof.c
kern/include/smp.h
kern/src/time.c