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