Em Thu, May 24, 2012 at 09:36:35AM -0600, David Ahern escreveu:On 5/22/12 11:51 AM, Stephane Eranian wrote:The problem is that the headers as they are written to the file need
seeking in the file to update the offset table. That is NOT possible when
you operate in pipe mode. As such you need to inject the header infos
very much like kernel PERF_RECORD_*. That is also why you have
perf inject -b. Buildids are added at the end of the run in file mode,
and that's another seek to the offset table if I recall correctly.
Perhaps I am being too simple minded here, but why not dump the
features to the pipe as a series of structs when the perf session is
created?
struct pipe_data {
u32 length;
u32 type;
char data[0];
}
It would require the features to be written to a buffer first to get
the length, but that's manageable without too much code change.
Endianness would need to be handled -- maybe a u8 flags at the
beginning.
I guess this comes down to somebody prototyping it. The way its being
done is just the easiest one, and one that at least Peter dislikes a lot
;-)
- Arnaldo