Re: [RFC PATCH] perf/core: Put size of a sample at the end of it

From: Wangnan (F)
Date: Thu Dec 03 2015 - 05:33:43 EST




On 2015/12/3 18:08, Peter Zijlstra wrote:
On Wed, Dec 02, 2015 at 01:38:19PM +0000, Wang Nan wrote:
This sloution requires user program (perf) do more things. At least
following things and limitations should be considered:

1. Before reading such ring buffer, perf must ensure all events which
may output to it is already stopped, so the 'head' pointer it get
is the end of the last record.
Right, this is tricky, this would not allow two snapshots to happen back
to back since that would then result in a bunch of missed events.

Aside from this issue its a rather nice idea.

Thank you for your attitude. We can start consider it seriously.

Now I'm working on perf side code to make a workable prototype.

2. We must ensure all events attached this ring buffer has
'PERF_SAMPLE_SIZE' selected.
That can be easily enforced.

Yes.

3. There must no tracking events output to this ring buffer.
That is rather unfortunate, we'd best fix that up.

4. 2 bytes extra space is required for each record.
8, perf records must be 8 byte aligned and sized.

So does it means we need to pad before outputing size?

Further improvement can be taken:

1. If PERF_SAMPLE_SIZE is selected, we can avoid outputting the event
size in header. Which eliminate extra space cose;
That would mandate you always parse the stream backwards. Which seems
rather unfortunate. Also, no you cannot recoup the extra space, see the
alignment and size requirement.

That's good. We don't need to consider this :)

Before receiving your comment I'm thinking about modifying
DEFINE_OUTPUT_COPY() to write first sizeof(header) bytes at the
end of reserved area, so it would work automatically for every
possible events.

2. We can find a way to append size information for tracking events
also.
The !sample records you mean? Yes those had better have them too.

Thank you.

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