[lttng-dev] [PATCH] Create kernel events by writing to proc file

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Thu May 10 11:41:26 EDT 2012


* Francis Giraldeau (francis.giraldeau at gmail.com) wrote:
> Le mercredi 09 mai 2012 à 14:04 -0400, Mathieu Desnoyers a écrit :
> > * Francis Giraldeau (francis.giraldeau at gmail.com) wrote:
> > > This feature allow to write events in the kernel trace stream by writing to the
> > > file /proc/lttng_user_event. The content is written unmodified to the trace as
> > > string type. The maximum string length saved per event is 256 bytes. The event
> > > type and the proc file are accessibles when the module lttng-user-event is
> > > loaded.
> > > 
> > > This is a prototype implementation. The final implementation should avoid the
> > > temp copy of the string on the kernel stack.
> > > ---
> > >  Makefile                                    |    1 +
> > >  instrumentation/events/lttng-module/lttng.h |   19 +++
> > >  probes/Makefile                             |    1 +
> > >  probes/lttng-user-event.c                   |  159 +++++++++++++++++++++++++++
> > >  4 files changed, 180 insertions(+), 0 deletions(-)
> > >  create mode 100644 probes/lttng-user-event.c
> > > 
> > > diff --git a/Makefile b/Makefile
> > > index dfa0792..6bd203d 100644
> > > --- a/Makefile
> > > +++ b/Makefile
> > > @@ -24,6 +24,7 @@ lttng-tracer-objs :=  lttng-events.o lttng-abi.o \
> > >  
> > >  obj-m += lttng-statedump.o
> > >  lttng-statedump-objs := lttng-statedump-impl.o wrapper/irqdesc.o
> > > +lttng-user-event-objs := lttng-user-event.o
> > >  
> > >  ifneq ($(CONFIG_HAVE_SYSCALL_TRACEPOINTS),)
> > >  lttng-tracer-objs += lttng-syscalls.o
> > > diff --git a/instrumentation/events/lttng-module/lttng.h b/instrumentation/events/lttng-module/lttng.h
> > > index 6f3d6d1..9da3c7e 100644
> > > --- a/instrumentation/events/lttng-module/lttng.h
> > > +++ b/instrumentation/events/lttng-module/lttng.h
> > > @@ -6,6 +6,8 @@
> > >  
> > >  #include <linux/tracepoint.h>
> > >  
> > > +#define LTTNG_UEVENT_SIZE 256
> > > +
> > >  TRACE_EVENT(lttng_metadata,
> > >  
> > >  	TP_PROTO(const char *str),
> > > @@ -28,6 +30,23 @@ TRACE_EVENT(lttng_metadata,
> > >  	TP_printk("")
> > >  )
> > >  
> > > +TRACE_EVENT(lttng_uevent,
> > > +
> > > +	TP_PROTO(char *str),
> > > +
> > > +	TP_ARGS(str),
> > > +
> > > +	TP_STRUCT__entry(
> > > +		__array_text(	char,	text,	LTTNG_UEVENT_SIZE	)
> > > +	),
> > > +
> > > +	TP_fast_assign(
> > > +		tp_memcpy(text, str, LTTNG_UEVENT_SIZE)
> > 
> > FYI, we have __string_from_user and tp_copy_string_from_user for that
> > (you won't have to do the copy).
> 
> Ok, did an experiment to compare TP, see next message.
> 
> > > + * This library is free software; you can redistribute it and/or
> > > + * modify it under the terms of the GNU Lesser General Public
> > > + * License as published by the Free Software Foundation; only
> > > + * version 2.1 of the License.
> > 
> > This file should be GPLv2, as below one function states that it is
> > inspired from tracing_mark_write in the Linux kernel, which is licensed
> > GPLv2. Or simply reimplement write_event: it will become _trivial_ with
> > the proper zero-copy approach hinted at above.
> 
> Ok, will take that into account for the final version.
> 
> > > +struct proc_dir_entry *lttng_root;
> > 
> > static.
> 
> Removed anyway...
> 
> > > +	/* lttng is already a file with the current abi, not a directory */
> > > +	/*
> > > +	lttng_root = proc_mkdir("lttng", NULL);
> > 
> > why do you mkdir lttng ? It conflicts with /proc/lttng.
> 
> Yeah, that's why it was disabled. I removed it. It would have been great
> if /proc/lttng was a directory, because then all related files could
> have been added into it.
> (ex: /proc/lttng/control, /proc/lttng/user_event, etc.) I guess that,
> since old clients uses /proc/lttng, it's cast in stone, isn't?

Yep. The design guide-line of this lttng ABI is that only a single file
is exported to user-space. ioctl are then used on this file to create
anonymous file descriptors.

Hrm. One thing we could do is to implement write() operation onto that
file to tunnel user-space tracing data directly through the /proc/lttng
file. Thoughts ?

Mathieu

> 
> Francis
> 
> 
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com



More information about the lttng-dev mailing list