public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: Ingo Molnar <mingo@elte.hu>
Cc: "Frank Ch. Eigler" <fche@redhat.com>,
	Paul Mundt <lethal@linux-sh.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Jes Sorensen <jes@sgi.com>, Andrew Morton <akpm@osdl.org>,
	Tom Zanussi <zanussi@us.ibm.com>,
	Richard J Moore <richardj_moore@uk.ibm.com>,
	Michel Dagenais <michel.dagenais@polymtl.ca>,
	Christoph Hellwig <hch@infradead.org>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Thomas Gleixner <tglx@linutronix.de>,
	William Cohen <wcohen@redhat.com>,
	"Martin J. Bligh" <mbligh@mbligh.org>
Subject: Re: tracepoint maintainance models
Date: Mon, 18 Sep 2006 11:45:32 -0400	[thread overview]
Message-ID: <20060918154532.GF15605@Krystal> (raw)
In-Reply-To: <20060918150231.GA8197@elte.hu>

Hi Ingo,

If it is less visually intrusive to declare markers as a macro, let's do it this
way. I have no preference : as long as both dynamic probes and static ones can
be hooked and that it does imply so much black magic that kernel developers
won't know what code will be called from the marker when tracing is enabled.

Back in 2005, I made a quick macro example that would benefit to everybody. It
changes following config options to either :

- nothing
- a call to printk
- a call to a static tracer (either inline function or a real call)
- no operations (a 5 bytes site for an enhanced kprobe)

The 5 bytes of NOOP used here is absolutely not the way to go : djprobes guys
has much better alternatives.

Note that this example is a userspace program that can be trivially moved to a
kernel header (printf->printk, etc).

I also wanted to identify the trace point by a symbol, so it could be easily
found dynamically, but this part is not completed.

What are your thoughts about it ? (think of it as a proof of concept, and
search+replace MAGIC_TRACE for MARK). :)


Mathieu


----- BEGIN -----


/* ltt-macro.c
 *
 * Macro example for instrumentation
 *
 * Version 0.0.1
 * 
 * Mathieu Desnoyers mathieu.desnoyers@polymtl.ca
 *
 * This is released under the GPL v2 (or better) license.
 */



/* This is an example of noop, get this from the current arch header */
#define GENERIC_NOP1    ".byte 0x90\n"


/* PUT THIS IN A INCLUDE/LINUX HEADER */

#define __stringify_1(x) #x //see include/linux/stringify.h
#define __stringify(x) __stringify_1(x)

#define KBUILD_BASENAME basename
#define KBUILD_MODNAME modulename

#define MAGIC_TRACE_SYM(event)	\
	char * __trace_symbol_##event =__stringify(KBUILD_MODNAME) "_" \
					__stringify(KBUILD_BASENAME) "_" \
					#event ;

/* With config menu mutual exclusion of choice */
#ifdef CONFIG_NOLOG
#define MAGIC_TRACE(event, format, args...)
#endif

#ifdef CONFIG_PRINTLOG
#define MAGIC_TRACE(event, format, args...) \
	printf(format, ##args);
#endif

#ifdef CONFIG_TRACELOG
#define MAGIC_TRACE(event, format, args...) \
	trace_##event( args );
#endif

#ifdef CONFIG_KPROBELOG
#define MAGIC_TRACE(event, format, args...) \
	__asm__ ( GENERIC_NOP1 GENERIC_NOP1 GENERIC_NOP1 GENERIC_NOP1 GENERIC_NOP1 )
#endif

/* PUT THIS IN A HEADER NEAR THE .C FILE */
#ifdef CONFIG_TRACELOG
static inline void trace_eventname(int a, char *b)
{
	/* log.... */
	printf("Tracing event : first arg %d, second arg %s", a, b);
}
#endif

/* PUT THIS IN THE .C FILE */

MAGIC_TRACE_SYM(eventname);

int main()
{
	int myint = 55;
	char * mystring = "blah";
	
	MAGIC_TRACE(eventname, "%d %s", myint, mystring);
	
	printf("\n");

	return 0;
}

------ END  -----




OpenPGP public key:              http://krystal.dyndns.org:8080/key/compudj.gpg
Key fingerprint:     8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68 

  reply	other threads:[~2006-09-18 15:50 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-17  9:40 The emperor is naked: why *comprehensive* static markup belongs in mainline Karim Yaghmour
2006-09-17 11:21 ` Paul Mundt
2006-09-17 14:36   ` tracepoint maintainance models Ingo Molnar
2006-09-17 15:02     ` Roman Zippel
2006-09-17 15:09       ` Ingo Molnar
2006-09-17 17:18         ` Roman Zippel
2006-09-17 23:27           ` Ingo Molnar
2006-09-17 23:41           ` Ingo Molnar
2006-09-18  0:17             ` Roman Zippel
2006-09-18  9:01               ` Jes Sorensen
2006-09-17 20:37         ` Roman Zippel
2006-09-17 22:34           ` Ingo Molnar
2006-09-17 15:36     ` Mathieu Desnoyers
2006-09-18  0:07       ` Ingo Molnar
2006-09-18  1:12         ` Karim Yaghmour
2006-09-18  1:13           ` Ingo Molnar
2006-09-18  2:32             ` Karim Yaghmour
2006-09-18  2:57               ` Ingo Molnar
2006-09-18  3:54                 ` Karim Yaghmour
2006-09-18  4:09                   ` Ingo Molnar
2006-09-18  4:43                     ` Karim Yaghmour
2006-09-18  2:43             ` Mathieu Desnoyers
2006-09-18  3:21               ` Ingo Molnar
2006-09-18  4:26                 ` Mathieu Desnoyers
2006-09-18  5:08                   ` Ingo Molnar
2006-09-18 12:25             ` Frank Ch. Eigler
2006-09-18 15:02               ` Ingo Molnar
2006-09-18 15:45                 ` Mathieu Desnoyers [this message]
2006-09-18 15:48                 ` Alan Cox
2006-09-18 15:22                   ` Ingo Molnar
2006-09-18 16:19                     ` Alan Cox
2006-09-18 16:15                       ` Ingo Molnar
2006-09-18 17:02                         ` Alan Cox
2006-09-18 16:15                       ` Frank Ch. Eigler
2006-09-18 17:02                         ` Alan Cox
2006-09-18 17:27                           ` Frank Ch. Eigler
2006-09-18 18:04                             ` Alan Cox
2006-09-18 17:54                               ` Martin Bligh
2006-09-18 18:05                               ` Frank Ch. Eigler
2006-09-18 19:10                           ` Vara Prasad
2006-09-18 19:49                             ` Alan Cox
2006-09-18 19:39                               ` Frank Ch. Eigler
2006-09-18 20:28                               ` Vara Prasad
2006-10-06  5:33                                 ` Steven Rostedt
2006-10-06 13:01                                   ` Frank Ch. Eigler
2006-10-06 14:23                                     ` Steven Rostedt
2006-10-06 23:17                                   ` Jeremy Fitzhardinge
2006-09-18 15:47                   ` Frank Ch. Eigler
2006-09-18 15:42                     ` Ingo Molnar
2006-09-18 16:30                 ` MARKER mechanism, try 2 Mathieu Desnoyers
2006-09-18 16:28                   ` Ingo Molnar
2006-09-18 17:47                     ` Mathieu Desnoyers
2006-09-18 19:39                       ` Alan Cox
2006-09-17 20:19     ` tracepoint maintainance models Nicholas Miell
2006-09-17 23:06       ` Ingo Molnar
2006-09-18  0:05         ` Roman Zippel
2006-09-18  1:52           ` Theodore Tso
2006-09-19 12:58           ` tracing - consensus building insteat of dogfights Christoph Hellwig
2006-09-19 13:25             ` Roman Zippel
2006-09-19 13:45             ` Karim Yaghmour
2006-09-19 14:25               ` Karim Yaghmour
2006-09-18  0:10         ` tracepoint maintainance models Nicholas Miell
2006-09-18  0:43           ` Roman Zippel
2006-09-18  0:56         ` Karim Yaghmour
2006-09-18  0:56           ` Ingo Molnar
2006-09-18  2:09             ` Karim Yaghmour
2006-09-18  3:30               ` Ingo Molnar
2006-09-18  3:52                 ` Theodore Tso
2006-09-18  4:11                   ` Ingo Molnar
2006-09-18  4:24                   ` Karim Yaghmour
2006-09-18  4:32                     ` Ingo Molnar
2006-09-18  5:03                       ` LTTng and SystemTAP (Everyone who is scared to read this huge thread, skip to here) Mathieu Desnoyers
2006-09-18 15:11                         ` Ingo Molnar
2006-09-23 15:50                           ` Mathieu Desnoyers
2006-09-18  5:37                       ` tracepoint maintainance models Karim Yaghmour
2006-09-18 20:12                   ` Michel Dagenais
2006-09-18  4:14                 ` Karim Yaghmour
2006-09-18  4:09                   ` Ingo Molnar
2006-09-18  4:57                     ` Karim Yaghmour
2006-09-18  1:03   ` The emperor is naked: why *comprehensive* static markup belongs in mainline Karim Yaghmour
2006-09-18 15:53 ` Jose R. Santos
2006-09-18 17:28   ` Karim Yaghmour

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060918154532.GF15605@Krystal \
    --to=mathieu.desnoyers@polymtl.ca \
    --cc=akpm@osdl.org \
    --cc=fche@redhat.com \
    --cc=gregkh@suse.de \
    --cc=hch@infradead.org \
    --cc=jes@sgi.com \
    --cc=lethal@linux-sh.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mbligh@mbligh.org \
    --cc=michel.dagenais@polymtl.ca \
    --cc=mingo@elte.hu \
    --cc=richardj_moore@uk.ibm.com \
    --cc=tglx@linutronix.de \
    --cc=wcohen@redhat.com \
    --cc=zanussi@us.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox