Re: [RFC PATCH v4] Unified trace buffer

From: Mathieu Desnoyers
Date: Thu Sep 25 2008 - 23:20:57 EST


* Steven Rostedt (rostedt@xxxxxxxxxxx) wrote:
>
> On Thu, 25 Sep 2008, Masami Hiramatsu wrote:
>
> > Hi Steven,
> >
> > Steven Rostedt wrote:
> > > This version has been cleaned up a bit. I've been running it as
> > > a back end to ftrace, and it has been handling pretty well.
> >
> > Thank you for your great work.
> > It seems good to me(especially, encapsulating events :)).
>
> Thanks!
>
> >
> > I have one request of enhancement.
> >
> > > +static struct ring_buffer_per_cpu *
> > > +ring_buffer_allocate_cpu_buffer(struct ring_buffer *buffer, int cpu)
> > > +{
> > [...]
> > > + cpu_buffer->pages = kzalloc_node(ALIGN(sizeof(void *) * pages,
> > > + cache_line_size()), GFP_KERNEL,
> > > + cpu_to_node(cpu));
> >
> > Here, you are using a slab object for page managing array,
> > the largest object size is 128KB(x86-64), so it can contain
> > 16K pages = 64MB.
> >
> > As I had improved relayfs, in some rare case(on 64bit arch),
> > we'd like to use larger buffer than 64MB.
> >
> > http://sourceware.org/ml/systemtap/2008-q2/msg00103.html
> >
> > So, I think similar hack can be applicable.
> >
> > Would it be acceptable for the next version?
>
> I would like to avoid using vmalloc as much as possible, but I do see the
> limitation here. Here's my compromise.
>
> Instead of using vmalloc if the page array is greater than one page,
> how about using vmalloc if the page array is greater than
> KMALLOC_MAX_SIZE?
>
> This would let us keep the vmap area free unless we have no choice.
>
> -- Steve
>

You could also fallback on a 2-level page array when buffer size is >
64MB. The cost is mainly a supplementary pointer dereference, but one
more should not make sure a big difference overall.

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/