shithub: 9ferno

ref: 6966e8d72ae8fb72ebf98909acbd464aff84a3cc

View raw version
kprof \- kernel profiling
.B bind -a #T /dev
.B /dev/kpctl
.B /dev/kpdata
.I kprof
device provides simple profiling
data for the operating system kernel.   The data accumulates by
recording the program counter of the kernel at each `tick' of a
profiling clock. Often this is just the system clock, but may be an
independent higher priority timer which allows profiling of interrupt
handlers, dependent on implementation.
The file
.B kpdata
holds the accumulated counts in big-endian
byte order.
The size of the file depends on the size of kernel text, and the
size of the individual counts.
The first six counts are 4 bytes in size, and are special. The
first holds the total number of ticks, the second the number of
ticks which fell outside the kernel text, the third the number
of microseconds per tick, the fourth the number of sample buckets,
the fifth the size in bytes of each sample bucket, and sixth the
log base 2 of the sample bucket size. Typically the sample size
is 4, and the log base 2 of the bucket size 3 (8 bytes). The remainder
of the file holds the sample buckets. The entire file has size
.I "sample bucket size"
.IR "number of sample buckets" .
That is, the first six sample buckets are replaced with the special
The file
.B kpctl
controls profiling.
Writing the string
.B start
.B kpctl
begins profiling;
.B stop
terminates it.  The message
.B startclr
restarts profiling after zeroing the array of counts.
.IR Kprof (10.1)
formats the data for presentation.
The following
.IR sh (1)
commands define and invoke a
.B sample
that runs a given test program with kernel profiling enabled,
and copies the result to a server presumed to be mounted on
.BR /n/remote .
fn sample {
	echo start >/dev/kpctl
	echo stop >/dev/kpctl
	cp /dev/kpdata /n/remote/tmp/kpdata
bind -a '#T' /dev
sample {cp sound /dev/audio}
On the server, the
.IR kprof (10.1)
command is used to analyse the data:
	kprof /usr/inferno/os/mpc/impc /tmp/kpdata
.B /os/port/devkprof.c
.IR kprof (10.1)
It cannot provide times for each node in the dynamic call graph (dynamic profiling).