Re: [PATCH v0 04/71] itrace: Infrastructure for instruction flowtracing units

From: Andi Kleen
Date: Mon Jan 06 2014 - 20:01:29 EST


On Tue, Jan 07, 2014 at 01:52:31AM +0100, Andi Kleen wrote:
> > > Also of course it requires disabling/enabling PT explicitly for
> > > every perf message, which is slow. So you add at least 2*WRMSR cost
> > > (thousands of cycles).
> >
> > That's just dumb, no flush the entire PT buffer into a few large
> > records.
>
> How would that work?
>
> You mean a separate buffer and then copy or map?
>
> ------
>
> Also here are some more problems with interleaving:
>
> A common PT config is to just run it as a ring buffer in the background
> and only take the data out when something happens (sample, crash etc.)
>
> But the side band still needs to be logged and at arbitary times.
>
> So the PT wrapping will happen much more often than the perf wrapping.
>
> If you interleave you may actually end up with lots of small rings
> in a single buffer, unless you stop every time the buffer fills up
> (which would add a lot more overhead)
>
> I suppose it could be somehow parsed, but it would very different
> from what perf does today.

Thinking about it more it's likely very hard to parse. Dropping instructions is
fine, dropping perf metadata is not (or only as last resort).

If we miss a MMAP we may never be able to parse that code region.
If we miss a context switch we may be also completely lost until the
next switch.

That means PT couldn't overwrite perf metadata normally.

So you could easily get into situations where the interleaved PT buffer
is between two perf metadata statements and ends up really small, while
large other parts of the buffer are unused.

The only way around it would be likely to move entries around -- to
garbage collect so to say -- but doing that non-blocking from a NMI will be
challenging.

With the separate buffers we don't have any of these problems.

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