xref: /dflybsd-src/share/man/man9/ktr.9 (revision 300510f624c9c5d17e927b592fb558e2977d4f44)
181540c2dSEirik Nygaard.\" Copyright (c) 2001 John H. Baldwin <jhb@FreeBSD.org>
281540c2dSEirik Nygaard.\" All rights reserved.
381540c2dSEirik Nygaard.\"
481540c2dSEirik Nygaard.\" Redistribution and use in source and binary forms, with or without
581540c2dSEirik Nygaard.\" modification, are permitted provided that the following conditions
681540c2dSEirik Nygaard.\" are met:
781540c2dSEirik Nygaard.\" 1. Redistributions of source code must retain the above copyright
881540c2dSEirik Nygaard.\"    notice, this list of conditions and the following disclaimer.
981540c2dSEirik Nygaard.\" 2. Redistributions in binary form must reproduce the above copyright
1081540c2dSEirik Nygaard.\"    notice, this list of conditions and the following disclaimer in the
1181540c2dSEirik Nygaard.\"    documentation and/or other materials provided with the distribution.
1281540c2dSEirik Nygaard.\"
1381540c2dSEirik Nygaard.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1481540c2dSEirik Nygaard.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1581540c2dSEirik Nygaard.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1681540c2dSEirik Nygaard.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1781540c2dSEirik Nygaard.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1881540c2dSEirik Nygaard.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1981540c2dSEirik Nygaard.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2081540c2dSEirik Nygaard.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2181540c2dSEirik Nygaard.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2281540c2dSEirik Nygaard.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2381540c2dSEirik Nygaard.\" SUCH DAMAGE.
2481540c2dSEirik Nygaard.\"
25cdbdd4f6SHiten Pandya.\" $FreeBSD: src/share/man/man9/ktr.9,v 1.8 2005/03/08 01:37:36 hmp Exp $
2681540c2dSEirik Nygaard.\"
27*b0bbd261SMihai Carabas.Dd August 22, 2012
2881540c2dSEirik Nygaard.Dt KTR 9
2981540c2dSEirik Nygaard.Os
3081540c2dSEirik Nygaard.Sh NAME
31525aff02SSascha Wildner.Nm KTR_INFO_MASTER ,
329b8f7feaSSascha Wildner.Nm KTR_INFO_MASTER_EXTERN ,
33525aff02SSascha Wildner.Nm KTR_INFO ,
34*b0bbd261SMihai Carabas.Nm KTR_LOG ,
35*b0bbd261SMihai Carabas.Nm KTR_COND_LOG
3681540c2dSEirik Nygaard.Nd kernel tracing facility
3781540c2dSEirik Nygaard.Sh SYNOPSIS
3881540c2dSEirik Nygaard.In sys/ktr.h
3981540c2dSEirik Nygaard.Vt "extern int ktr_entries" ;
4081540c2dSEirik Nygaard.Vt "extern int ktr_verbose" ;
41525aff02SSascha Wildner.Vt "extern struct ktr_entry *ktr_buf[MAXCPU]" ;
42525aff02SSascha Wildner.Fn KTR_INFO_MASTER "master"
439b8f7feaSSascha Wildner.Fn KTR_INFO_MASTER_EXTERN "master"
448ad2d5deSSascha Wildner.Fn KTR_INFO "compile" "master" "name" "maskbit" "format" "type name" "..."
45525aff02SSascha Wildner.Fn KTR_LOG "info" "arg ..."
46*b0bbd261SMihai Carabas.Fn KTR_COND_LOG "info" "cond" "arg ..."
4781540c2dSEirik Nygaard.Sh DESCRIPTION
48525aff02SSascha WildnerThe
49525aff02SSascha Wildner.Nm ktr
50525aff02SSascha Wildnerfacility provides a circular buffer of events that can be logged in a
51525aff02SSascha Wildner.Xr kprintf 9
52525aff02SSascha Wildnerstyle fashion.
53cdbdd4f6SHiten PandyaThese events can then be dumped with
54cdbdd4f6SHiten Pandya.Xr ddb 4 ,
55cdbdd4f6SHiten Pandya.Xr gdb 1
5681540c2dSEirik Nygaardor
57cdbdd4f6SHiten Pandya.Xr ktrdump 8 .
5881540c2dSEirik Nygaard.Pp
59525aff02SSascha Wildner.Fn KTR_INFO_MASTER
60525aff02SSascha Wildnerdeclares a new master variable
61525aff02SSascha Wildner.Dv ktr Ns _ Ns Fa master Ns _ Ns Dv enable
62525aff02SSascha Wildnerthat is used to turn on and off event logging.
639b8f7feaSSascha Wildner.Fn KTR_INFO_MASTER_EXTERN
649b8f7feaSSascha Wildneris a convenience macro for declaring a master variable
659b8f7feaSSascha Wildner.Sy extern .
66525aff02SSascha Wildner.Pp
67525aff02SSascha WildnerThe
68525aff02SSascha Wildner.Fn KTR_INFO
69525aff02SSascha Wildnermacro registers a new event
70525aff02SSascha Wildner.Fa name
71525aff02SSascha Wildnerthat will be controlled by the
72525aff02SSascha Wildner.Fa master
73525aff02SSascha Wildnerenable variable.
74525aff02SSascha WildnerCode for logging this event will be compiled in when
75525aff02SSascha Wildner.Fa compile
76525aff02SSascha Wildneris defined.
7781540c2dSEirik NygaardThe
7881540c2dSEirik Nygaard.Fa format
798ad2d5deSSascha Wildnerargument is a format string in the manner of
80525aff02SSascha Wildner.Xr kprintf 9
818ad2d5deSSascha Wildnerused to build the text of the event log message.
828ad2d5deSSascha WildnerThe arguments required by the format string have to be specified with a
838ad2d5deSSascha Wildner.Fa type
848ad2d5deSSascha Wildnerand a
858ad2d5deSSascha Wildner.Fa name .
86525aff02SSascha WildnerThe
87525aff02SSascha Wildner.Fa maskbit
8846da84faSSascha Wildneris a bit number that determines which of the corresponding
8946da84faSSascha Wildner.Va debug.ktr.*_enable
9046da84faSSascha Wildnersysctl's bits will enable logging of this event.
91525aff02SSascha Wildner.Pp
92525aff02SSascha WildnerKernel events are logged via the
93525aff02SSascha Wildner.Fn KTR_LOG
943b813696SSascha Wildnermacro.
95525aff02SSascha WildnerThe
96525aff02SSascha Wildner.Fa info
97525aff02SSascha Wildnerparameter is an identifier of the format
98525aff02SSascha Wildner.Fa master Ns _ Ns Fa name .
99525aff02SSascha Wildner.Fn KTR_LOG
100525aff02SSascha Wildneraccepts zero or more additional
101525aff02SSascha Wildner.Fa arg
102525aff02SSascha Wildnerarguments as required by the
103525aff02SSascha Wildner.Fa format
104525aff02SSascha Wildnerstring passed to the associated
105525aff02SSascha Wildner.Fn KTR_INFO
106525aff02SSascha Wildnercall.
10781540c2dSEirik Nygaard.Pp
10881540c2dSEirik NygaardThe
109*b0bbd261SMihai Carabas.Fn KTR_COND_LOG
110*b0bbd261SMihai Carabasmacro is equivalent to
111*b0bbd261SMihai Carabas.Fn KTR_LOG
112*b0bbd261SMihai Carabasexcept it logs only when the condition specified in
113*b0bbd261SMihai Carabas.Fa cond
114*b0bbd261SMihai Carabasevaluates to true.
115*b0bbd261SMihai Carabas.Pp
116*b0bbd261SMihai CarabasThe
11781540c2dSEirik Nygaard.Va ktr_entries
11881540c2dSEirik Nygaardvariable contains the number of entries in the
11981540c2dSEirik Nygaard.Va ktr_buf
12081540c2dSEirik Nygaardarray.
12181540c2dSEirik NygaardThese variables are mostly useful for post-mortem crash dump tools to locate
12281540c2dSEirik Nygaardthe base of the circular trace buffer and its length.
12381540c2dSEirik Nygaard.Pp
12481540c2dSEirik NygaardThe
12581540c2dSEirik Nygaard.Va ktr_verbose
12681540c2dSEirik Nygaardvariable stores the verbose flag that controls whether events are logged to
12781540c2dSEirik Nygaardthe console in addition to the event buffer.
12881540c2dSEirik Nygaard.Sh EXAMPLES
129525aff02SSascha WildnerThis example demonstrates a simple usage of the KTR facility:
130525aff02SSascha Wildner.Pp
131bd02a712SHiten Pandya.Bd -literal -compact
132a45f658fSSascha Wildner#include <sys/ktr.h>
133a45f658fSSascha Wildner
134a45f658fSSascha Wildner\&...
135a45f658fSSascha Wildner
136a45f658fSSascha Wildner#if !defined(KTR_FOO)
137a45f658fSSascha Wildner#define KTR_FOO		KTR_ALL
138a45f658fSSascha Wildner#endif
139a45f658fSSascha WildnerKTR_INFO_MASTER(foo);
1408ad2d5deSSascha WildnerKTR_INFO(KTR_FOO, foo, func1, 0, "func1()");
1418ad2d5deSSascha WildnerKTR_INFO(KTR_FOO, foo, func2, 1, "func2(%d)", int arg);
142*b0bbd261SMihai CarabasKTR_INFO(KTR_FOO, foo, func3, 2, "func3: arg positive: %d", int arg);
143525aff02SSascha Wildner
144525aff02SSascha Wildner\&...
145525aff02SSascha Wildner
14681540c2dSEirik Nygaardvoid
147a45f658fSSascha Wildnerfunc1(void)
14881540c2dSEirik Nygaard{
149a45f658fSSascha Wildner	KTR_LOG(foo_func1);
150a45f658fSSascha Wildner	...
151a45f658fSSascha Wildner}
152a45f658fSSascha Wildner
153a45f658fSSascha Wildnervoid
154a45f658fSSascha Wildnerfunc2(int arg)
155a45f658fSSascha Wildner{
156a45f658fSSascha Wildner	KTR_LOG(foo_func2, arg);
15781540c2dSEirik Nygaard	...
15881540c2dSEirik Nygaard}
159*b0bbd261SMihai Carabas
160*b0bbd261SMihai Carabasvoid
161*b0bbd261SMihai Carabasfunc3(int arg)
162*b0bbd261SMihai Carabas{
163*b0bbd261SMihai Carabas	KTR_COND_LOG(foo_func3, arg >= 0, arg);
164*b0bbd261SMihai Carabas	...
165*b0bbd261SMihai Carabas}
16681540c2dSEirik Nygaard.Ed
16781540c2dSEirik Nygaard.Sh SEE ALSO
168525aff02SSascha Wildner.Xr gdb 1 ,
169525aff02SSascha Wildner.Xr ddb 4 ,
170525aff02SSascha Wildner.Xr ktr 4 ,
171525aff02SSascha Wildner.Xr ktrdump 8 ,
172525aff02SSascha Wildner.Xr kprintf 9
17381540c2dSEirik Nygaard.Sh HISTORY
174525aff02SSascha WildnerThe
175525aff02SSascha Wildner.Nm ktr
176525aff02SSascha Wildnerkernel tracing facility first appeared in
17781540c2dSEirik Nygaard.Bsx 3.0
17881540c2dSEirik Nygaardand was imported into
17981540c2dSEirik Nygaard.Fx 5.0
18081540c2dSEirik Nygaardand
18181540c2dSEirik Nygaard.Dx 1.1 .
182525aff02SSascha WildnerIt was completely rewritten by Matthew Dillon in
183525aff02SSascha Wildner.Dx 1.3 .
184