Re: [PATCH v1 03/11] perf: Allow for multiple ring buffers per event

Alexander Shishkin
2014-05-08T09:09:29Z

Alexander Shishkin <alexander.shishkin@linux.intel.com> writes:

> Peter Zijlstra <peterz@infradead.org> writes:
>
>> How about something like this for the itrace thing?
>
> It's much nicer than the page swizzling draft I was about to send you.
>
>> You would mmap() the regular buffer; when write ->aux_{offset,size} in
>> the control page. After which you can do a second mmap() with the .pgoff
>> matching the aux_offset you gave and .length matching the aux_size you
>> gave.
>
> Why do we need aux_{offset,size} at all, then? Userspace should know how
> they mmap()ed it.
>
>> This way the mmap() content still looks like a single linear file (could
>> be sparse if you leave a hole, although we could require the aux_offset
>> to match the end of the data section).
>>
>> And there is still the single event->rb, not more.
>
> Fair enough.
>
>> Then, when data inside that aux data store changes they should inject an
>> PERF_RECORD_AUX to indicate this did happen, which ties it back into the
>> normal event flow.
>>
>> With this there should be no difficult page table tricks or anything.
>
> True.
>
>> The patch is way incomplete but should sketch enough of the idea..
>
> Can I take it over?
>
>> So the aux_head/tail values should also be in the file space and not
>> start at 0 again, similar for the offsets in the AUX record.
>
> With PERF_RECORD_AUX carrying offset and size, we shouldn't need
> aux_{head,tail} either, don't you think?

I take this one back, as perf record doesn't actually parse records from
the buffer, it would still need the pointers.

Regards,
--
Alex