Re: Unified tracing buffer

From: Mathieu Desnoyers
Date: Mon Sep 22 2008 - 22:51:47 EST


* Peter Zijlstra (a.p.zijlstra@xxxxxxxxx) wrote:
> On Mon, 2008-09-22 at 19:37 +0530, K.Prasad wrote:
>
> > > > INPUT_FUNCTIONS
> > > > ---------------
> > > >
> > > > allocate_buffer (name, size)
> > > > return buffer_handle
> > > >
> > > > register_event (buffer_handle, event_id, print_function)
> > > > You can pass in a requested event_id from a fixed set, and
> > > > will be given it, or an error
> > > > 0 means allocate me one dynamically
> > > > returns event_id (or -E_ERROR)
> > > >
> > > > record_event (buffer_handle, event_id, length, *buf)
> > >
> > > I'd hoped for an interface like:
> > >
> > > struct ringbuffer *ringbuffer_alloc(const char *name, size_t size);
> > > void ringbuffer_free(struct ringbuffer *buffer);
> > > int ringbuffer_write(struct ringbuffer *buffer, const char *buf, size_t size);
> > > int ringbuffer_read(struct ringbuffer *buffer, int cpu, char *buf, size_t size);
> > >
> > > On top of which you'd do the event thing, the register event with a
> > > callback idea makes sense, except I'd split the consumption into two:
> > > - one method to pull the binary event out, which knows how long it
> > > ought to be etc..
> > > - one method to convert the binary event to ASCII
> > >
> > In conjunction with the previous email on this thread
> > (http://lkml.org/lkml/2008/9/22/160), may I suggest
> > the equivalent interfaces in -mm tree (2.6.27-rc5-mm1) to be:
> >
> > relay_printk(<some struct with default filenames/pathnames>, <string>,
> > ....) ;
> > relay_dump(<some struct with default filenames/pathnames>, <binary
> > data>);
> > and
> > relay_cleanup_all(<the struct name>); - Single interface that cleans up
> > all files/directories/output data created under a logical entity.
>
> Dude, relayfs is such a bad performing mess that extending it seems like
> a bad idea. Better to write something new and delete everything relayfs
> related.
>

LTTng only uses relay for buffer mapping and mmap to userspace. The rest
of internal buffer management is done within LTTng by overriding relay
callbacks. One thing we could think of is to incrementally fix relay
rather than deleting it completely.

> Also, it seems prudent to separate the ring-buffer implementation from
> the event encoding/decoding facilities.
>

Sure, but still I think both are needed, even if they are separated as
two different layers (as they should).

Mathieu

>
>

--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/