KPROF(3)                                                 KPROF(3)

     NAME
          kprof - kernel profiling

     SYNOPSIS
          bind -a #T /dev

          /dev/kpctl
          /dev/kpdata

     DESCRIPTION
          The 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 pro-
          filing clock. Often this is just the system clock, but may
          be an independent higher priority timer which allows profil-
          ing of interrupt handlers, dependent on implementation.

          The file 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 sample bucket size
          times number of sample buckets. That is, the first six sam-
          ple buckets are replaced with the special numbers.

          The file kpctl controls profiling.  Writing the string start
          to kpctl begins profiling; stop terminates it.  The message
          startclr restarts profiling after zeroing the array of
          counts.

          Kprof(10.1) formats the data for presentation.

     EXAMPLE
          The following sh(1) commands define and invoke a function
          sample that runs a given test program with kernel profiling
          enabled, and copies the result to a server presumed to be
          mounted on /n/remote.

          fn sample {
               echo start >/dev/kpctl
               $1
               echo stop >/dev/kpctl
               cp /dev/kpdata /n/remote/tmp/kpdata

     Page 1                       Plan 9             (printed 3/29/24)

     KPROF(3)                                                 KPROF(3)

          }
          bind -a '#T' /dev
          sample {cp sound /dev/audio}

          On the server, the kprof(10.1) command is used to analyse
          the data:
               kprof /usr/inferno/os/mpc/impc /tmp/kpdata

     SOURCE
          /os/port/devkprof.c

     SEE ALSO
          kprof(10.1)

     BUGS
          It cannot provide times for each node in the dynamic call
          graph (dynamic profiling).

     Page 2                       Plan 9             (printed 3/29/24)