Re: [PATCH] perf record: Add snapshot mode support for perf's regular events

From: Ingo Molnar
Date: Thu Nov 26 2015 - 04:20:10 EST



* Wangnan (F) <wangnan0@xxxxxxxxxx> wrote:

>
>
> On 2015/11/25 20:20, Peter Zijlstra wrote:
> >On Wed, Nov 25, 2015 at 05:44:00PM +0800, Wangnan (F) wrote:
> >>
> >>On 2015/11/25 17:27, Peter Zijlstra wrote:
> >>>On Tue, Nov 24, 2015 at 10:00:31PM +0800, Yunlong Song wrote:
> >>>>In our patch, we create and maintain a user space ring buffer to store
> >>>>perf's tracing info, instead of directly writing to perf.data file as
> >>>>before. In snapshot mode, only a SIGUSR2 signal can trigger perf to dump
> >>>>the tracing info currently stored in the user space ring buffer to
> >>>>perf.data file.
> >>>I would very much like to first fix the perf overwrite mode: see
> >>>lkml.kernel.org/r/20151023151205.GW11639@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> >>I think they can be done in parallel. We can first do something with
> >>tracking events and perf's output file, and wait for kernel level
> >>overwrite mode fixed, then decide whether to implement perf's own
> >>ringbuffer.
> >That seems backwards; why would you ever want to endlessly copy the
> >events if you're not going to use them?
>
> I agree that we need to fixing overwrite mode. However, user space ringbuffer
> can be more flexible. for example, dynamically shrinking and expansion. It would
> be hard in kernel I think, and I'm not sure how much flexibility we need. Doing
> things in kernel always more difficult than in userspace.
>
> But yes, we can do that userspace ring buffer when we really need it. At very
> first we can start working on perf side and assume overwrite mode is ready.

I don't think Peter asked for much: pick up the patch he has already written and
use it, to have an even lower overhead always-enabled background tracing mode of
perf.

Resizing shouldn't be much of an issue with existing features: if events start
overflowing or some other threshold for dynamic increase of the ring-buffer is met
then the daemon should open a new set of events with a larger ring-buffer, and
close the old events once the new tracing ring-buffer is up and running.

Use event multiplexing to output all interesting events into the same single (per
CPU) ring-buffer.

Thanks,

Ingo
--
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/