On Sun, Sep 13, 2020 at 11:41:00PM -0700, Stephane Eranian wrote: > On Sun, Sep 13, 2020 at 2:03 PM Jiri Olsa <jo...@kernel.org> wrote: > > > > Add new version of mmap event. The MMAP3 record is an > > augmented version of MMAP2, it adds build id value to > > identify the exact binary object behind memory map: > > > > struct { > > struct perf_event_header header; > > > > u32 pid, tid; > > u64 addr; > > u64 len; > > u64 pgoff; > > u32 maj; > > u32 min; > > u64 ino; > > u64 ino_generation; > > u32 prot, flags; > > u32 reserved; > > u8 buildid[20]; > > char filename[]; > > struct sample_id sample_id; > > }; > > > > Adding 4 bytes reserved field to align buildid data to 8 bytes, > > so sample_id data is properly aligned. > > > > The mmap3 event is enabled by new mmap3 bit in perf_event_attr > > struct. When set for an event, it enables the build id retrieval > > and will use mmap3 format for the event. > > > > Keeping track of mmap3 events and calling build_id_parse > > in perf_event_mmap_event only if we have any defined. > > > > Having build id attached directly to the mmap event will help > > tool like perf to skip final search through perf data for > > binaries that are needed in the report time. Also it prevents > > possible race when the binary could be removed or replaced > > during profiling. > > > > Signed-off-by: Jiri Olsa <jo...@kernel.org> > > --- > > include/uapi/linux/perf_event.h | 27 ++++++++++++++++++++++- > > kernel/events/core.c | 38 +++++++++++++++++++++++++++------ > > 2 files changed, 57 insertions(+), 8 deletions(-) > > > > diff --git a/include/uapi/linux/perf_event.h > > b/include/uapi/linux/perf_event.h > > index 077e7ee69e3d..facfc3c673ed 100644 > > --- a/include/uapi/linux/perf_event.h > > +++ b/include/uapi/linux/perf_event.h > > @@ -384,7 +384,8 @@ struct perf_event_attr { > > aux_output : 1, /* generate AUX > > records instead of events */ > > cgroup : 1, /* include cgroup > > events */ > > text_poke : 1, /* include text poke > > events */ > > - __reserved_1 : 30; > > + mmap3 : 1, /* include bpf events > > */ > > + __reserved_1 : 29; > > > what happens if I set mmap3 and mmap2?
hum bad things probably ;-) I think mmap3 would overload mmap2 > > I think using mmap3 for every mmap may be overkill as you add useless > 20 bytes to an mmap record. > I am not sure if your code handles the case where mmap3 is not needed > because there is no buildid, e.g, anonymous memory. > It seems to me you've written the patch in such a way that if the user > tool supports mmap3, then it supersedes mmap2, and thus > you need all the fields of mmap2. But if could be more interesting to > return either MMAP2 or MMAP3 depending on tool support > and type of mmap, that would certainly save 20 bytes on any anon mmap. > But maybe that logic is already in your patch and I missed it. I like peter's idea of ditching mmap3 and use that maj/min.. area in mmap2 for buildid based on misc bits jirka