ktr(9)
NAME
CTR0, CTR1, CTR2, CTR3, CTR4, CTR5 - kernel tracing facility
SYNOPSIS
#include <sys/param.h> #include <sys/ktr.h> extern int ktrc_pumask; extern int ktre_ntries; extern int ktre_xtend; extern int ktrm_ask; extern int ktrv_erbose; extern struct ktre_ntry ktrb_uf[]; void CTR0(ui_nt mask, char *format); void CTR1(ui_nt mask, char *format, arg1); void CTR2(ui_nt mask, char *format, arg1, arg2); void CTR3(ui_nt mask, char *format, arg1, arg2, arg3); void CTR4(ui_nt mask, char *format, arg1, arg2, arg3, arg4); void CTR5(ui_nt mask, char *format, arg1, arg2, arg3, arg4, arg5);
DESCRIPTION
- KTR provides a circular buffer of events that can be logged
- in a
printf(9) style fashion. These events can then be dumped - with ddb(4),
gdb(1) or ktrdump(8). - Events are created and logged in the kernel via the CTRx
- macros. The
first parameter is a mask of event types (KTR_*) defined in - The event
will be logged only if any of the event types specified in - mask are
enabled in the global event mask stored in ktrm_ask. The - format argument
is a printf(9) style format string used to build the text of - the event
log message. Following the format string are zero to five - arguments referenced by format. Note that the different macros differ
- only in the
number of arguments each one takes, as indicated by its - name. Each event
is logged with a timestamp in addition to the log message. - The ktre_ntries variable contains the number of entries in the
- ktrb_uf
array. These variables are mostly useful for post-mortem - crash dump
tools to locate the base of the circular trace buffer and - its length.
- The ktrm_ask variable contains the run time mask of events to
- log.
- The CPU event mask is stored in the ktrc_pumask variable.
- The ktrv_erbose variable stores the verbose flag that controls
- whether
events are logged to the console in addition to the event - buffer.
EXAMPLES
- This example demonstrates the use of tracepoints at the
- KTR_PROC logging
level. - void
mi_switch()
{ - ...
/** Pick a new current process and record its starttime.
*/ - ...
CTR3(KTR_PROC, "mi_switch: old proc %p (pid %d, - %s)", p, p->p_pid,
p->p_comm);
- ...
cpu_switch();
...
CTR3(KTR_PROC, "mi_switch: new proc %p (pid %d, - %s)", p, p->p_pid,
p->p_comm);
- ...
- }
SEE ALSO
HISTORY
- The KTR kernel tracing facility first appeared in BSD/OS 3.0
- and was
imported into FreeBSD 5.0.
BUGS
- Currently there is one global buffer shared among all CPUs.
- It might be
profitable at some point in time to use per-CPU buffers in - stead so that
if one CPU halts or starts spinning, then the log messages - it emitted
just prior to halting or spinning will not be drowned out by - events from
the other CPUs. - BSD February 15, 2001